public Position Start(Position position, string commands) { Console.WriteLine($"Current location : {LocationInfo(position)}"); ICommand command = new RoverCommand(); var direction = Direction.GetDirection(position.Direction); foreach (var cmd in commands) { switch (cmd) { case Commands.Left: direction = command.TurnLeft((Directions)direction.Id); position.SetDirection((Directions)direction.Id); break; case Commands.Right: direction = command.TurnRight((Directions)direction.Id); position.SetDirection((Directions)direction.Id); break; case Commands.Move: { if (IsThereAnyDeathHere(position)) { Console.WriteLine("You cannot go further. Try another direction please.."); var newCommand = Console.ReadLine(); this.Start(position, newCommand); } position = command.Move(position); if (CheckPosition(position) == RoverStatus.Dead) { Console.WriteLine("Rest in peace!"); commands = string.Empty; } } break; default: throw new Exception($"command : {command} is not invalid."); } Console.WriteLine(LocationInfo(position)); } return(position); }
public Direction TurnRight(Directions direction) { direction = (Directions)((int)direction < (int)Directions.West ? (int)direction + 1 : (int)direction - 3); return(Direction.GetDirection(direction)); }
public Direction TurnLeft(Directions direction) { direction = (Directions)((int)direction > (int)Directions.North ? (int)direction - 1 : (int)direction + 3); return(Direction.GetDirection(direction)); }