public void movePlayer(int dx, int dy){
		
		if(!isRedoing){
			//if we are not redoing an undo, we have to clear the redo-stack
			redo.clear();
		}
		// x- and y-coordinates of where to move the player (if possible) 
		int moveX = playerX + dx;
		int moveY = playerY + dy;
		
		//The player and the piece in the way of the player to move to the given x- and y-coordinates
		Player player = (Player) level.get(playerY).get(playerX);
		Piece pieceInTheWay = level.get(moveY).get(moveX);
		
		//If the piece in the way is blank or a goal, then no push is needed
		if(pieceInTheWay instanceof Blank || pieceInTheWay instanceof Goal){
			
			if(player.getIsOnGoal()){
				level.get(playerY).set(playerX, new Goal());
			}else{
				level.get(playerY).set(playerX, new Blank());
			}
			
			level.get(moveY).set(moveX, new Player(pieceInTheWay instanceof Goal));
			
			playerX += dx;
			playerY += dy;
			
			//Add move to the undo stack
			ArrayList<Integer> tempList = new ArrayList<Integer>();
			tempList.add(dx);
			tempList.add(dy);
			tempList.add(0); //0 means not moving any piece
			undo.add(tempList);
			
			isRedoing = false;
		
		//if the piece in the way is a brick we need to try to push it
		}else if (pieceInTheWay instanceof Brick){
			
			//the x- and y-coordinates of the location we want to push the brick to
			int pushX = moveX+dx;
			int pushY = moveY+dy;
			
			//Piece at the location where we want to push the brick in the way of the player
			Piece pieceAtPushLocation = level.get(pushY).get(pushX);
			
			//If the piece at the push-location is a blank or a goal, we can push it
			if(pieceAtPushLocation instanceof Blank || pieceAtPushLocation instanceof Goal){
				
				//Moving the brick
				level.get(pushY).set(pushX, new Brick(pieceAtPushLocation instanceof Goal));
				
				//Moving the player
				if(((Brick) pieceInTheWay).getIsOnGoal()){
					level.get(moveY).set(moveX, new Player(true));
				}else{
					level.get(moveY).set(moveX, new Player(false));
				}
				
				//Changing the previous player-position to a goal or a blank
				if(player.getIsOnGoal()){
					level.get(playerY).set(playerX, new Goal());
				}else{
					level.get(playerY).set(playerX, new Blank());
				}
				
				//Updating the position of the player
				playerX += dx;
				playerY += dy;
				
				//Add move the the undo stack
				ArrayList<Integer> tempList = new ArrayList<Integer>();
				tempList.add(dx);
				tempList.add(dy);
				tempList.add(1); //1 means moving a piece
				undo.add(tempList);
				isRedoing = false;
				
			}else{
				//Cannot push
			}
		}else{
			//Cannot move
		}
		
	}