示例#1
0
        /// <summary>
        /// Calculates rover's next position with the moving direction
        /// </summary>
        /// <param name="currentPosition">Rover's current position</param>
        /// <param name="direction">Direction that rover want to go</param>
        /// <returns>The rover's new position</returns>
        public RoverPosition CalculateNextPosition(RoverPosition currentPosition, MovingDirectionEnum direction)
        {
            switch (direction)
            {
            case MovingDirectionEnum.Forward:
                switch (currentPosition.Direction)
                {
                case RoverDirectionEnum.North:
                    currentPosition.Coordinate.Y = (currentPosition.Coordinate.Y + 1) > Bounds.UpperRight.Y ? Bounds.UpperRight.Y : currentPosition.Coordinate.Y + 1;
                    break;

                case RoverDirectionEnum.South:
                    currentPosition.Coordinate.Y = (currentPosition.Coordinate.Y - 1) < Bounds.LowerLeft.Y ? Bounds.LowerLeft.Y : currentPosition.Coordinate.Y - 1;
                    break;

                case RoverDirectionEnum.East:
                    currentPosition.Coordinate.X = (currentPosition.Coordinate.X + 1) > Bounds.UpperRight.X ? Bounds.UpperRight.X : currentPosition.Coordinate.X + 1;
                    break;

                case RoverDirectionEnum.West:
                    currentPosition.Coordinate.X = (currentPosition.Coordinate.X - 1) < Bounds.LowerLeft.X ? Bounds.LowerLeft.X : currentPosition.Coordinate.X - 1;
                    break;
                }
                break;

            case MovingDirectionEnum.Left:
                switch (currentPosition.Direction)
                {
                case RoverDirectionEnum.North:
                    currentPosition.Direction = RoverDirectionEnum.West;
                    break;

                case RoverDirectionEnum.South:
                    currentPosition.Direction = RoverDirectionEnum.East;
                    break;

                case RoverDirectionEnum.East:
                    currentPosition.Direction = RoverDirectionEnum.North;
                    break;

                case RoverDirectionEnum.West:
                    currentPosition.Direction = RoverDirectionEnum.South;
                    break;
                }
                break;

            case MovingDirectionEnum.Right:
                switch (currentPosition.Direction)
                {
                case RoverDirectionEnum.North:
                    currentPosition.Direction = RoverDirectionEnum.East;
                    break;

                case RoverDirectionEnum.South:
                    currentPosition.Direction = RoverDirectionEnum.West;
                    break;

                case RoverDirectionEnum.East:
                    currentPosition.Direction = RoverDirectionEnum.South;
                    break;

                case RoverDirectionEnum.West:
                    currentPosition.Direction = RoverDirectionEnum.North;
                    break;
                }
                break;
            }
            return(currentPosition);
        }
示例#2
0
 /// <summary>
 /// Initializes a new instance for the Rover
 /// </summary>
 /// <param name="plateau">Sets the plateau that rover moved on</param>
 /// <param name="startPosition">Sets the rover's start position</param>
 public Rover(IPlateau plateau, RoverPosition startPosition)
 {
     this._plateau        = plateau;
     this.CurrentPosition = startPosition;
 }