Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        public Direction TurnRight(Directions direction)
        {
            direction = (Directions)((int)direction < (int)Directions.West ? (int)direction + 1 : (int)direction - 3);

            return(Direction.GetDirection(direction));
        }
Exemplo n.º 3
0
        public Direction TurnLeft(Directions direction)
        {
            direction = (Directions)((int)direction > (int)Directions.North ? (int)direction - 1 : (int)direction + 3);

            return(Direction.GetDirection(direction));
        }