Ejemplo n.º 1
0
        /// <summary>
        /// Rotates the Rover based on the action it is performing
        /// </summary>
        /// <param name="action">The action the Rover is performing</param>
        public void Rotate(Action action)
        {
            if (action != Action.RotateLeft && action != Action.RotateRight)
            {
                throw new ArgumentOutOfRangeException(nameof(action));
            }

            switch (this.Direction)
            {
            case Direction.North:
                this.Direction = action == Action.RotateLeft ? Direction.West : Direction.East;

                break;

            case Direction.East:
                this.Direction = action == Action.RotateLeft ? Direction.North : Direction.South;

                break;

            case Direction.South:
                this.Direction = action == Action.RotateLeft ? Direction.East : Direction.West;

                break;

            case Direction.West:
                this.Direction = action == Action.RotateLeft ? Direction.South : Direction.North;

                break;

            default:
                throw new InvalidOperationException("Invalid direction on Rover");
            }
        }
Ejemplo n.º 2
0
        /// <inheritdocs />
        public override void Move()
        {
            if (this.Actions == null || this.Actions.Count == 0)
            {
                throw new InvalidOperationException("Rover has no more movements to make");
            }

            Action action = this.Actions.Dequeue();

            if (action == Action.MoveForward)
            {
                this.MoveForward();
            }
            else if (action == Action.RotateLeft || action == Action.RotateRight)
            {
                this.Rotate(action);
            }
            else
            {
                throw new InvalidOperationException("Rover has invalid movement");
            }
        }