public bool TryMakeStep(Directions direction) { if (direction != Directions.None) { var newPos = GetNewPosition(playerPosition, direction); if (map.GetCell(newPos) is Wall || IsOutOfMap(newPos)) { newPos = playerPosition; } else if (map.GetCell(newPos) is Box) { if (TryMoveBox(direction, newPos)) { var newBoxPos = GetNewPosition(newPos, direction); map.Move(newPos, newBoxPos); } else { newPos = playerPosition; } } if (playerPosition == newPos) { return(false); } playerPosition = newPos; return(true); } return(false); }