コード例 #1
0
        /// <summary>Calculates next coordinate moving forward from selected position.</summary>
        /// <param name="currentPosition">The selected position.</param>
        /// <returns>New position.</returns>
        public PositionVector Move(PositionVector currentPosition)
        {
            int x = 0;
            int y = 0;

            switch (currentPosition.Direction)
            {
                case Direction.Notrh:
                    x = 1;
                    break;
                case Direction.East:
                    y = 1;
                    break;
                case Direction.South:
                    x = -1;
                    break;
                case Direction.West:
                    y = -1;
                    break;
                default:
                    throw new Exception("This direction is not recognised.");
            }

            var newPosition = new PositionVector(currentPosition.X + x, currentPosition.Y + y, currentPosition.Direction);

            if (this.CanMove(newPosition))
            {
                return newPosition;
            }

            return currentPosition;
        }
コード例 #2
0
        private void PerformTest(PositionVector initialPosition, PositionVector expectedResult)
        {
            SmallWorld world = new SmallWorld();

            var result = world.Move(initialPosition);

            Assert.AreEqual(expectedResult, result);
        }
コード例 #3
0
        private void PerformTest(PositionVector initialPosition, PositionVector expectedResult)
        {
            LandRover rover = new LandRover(initialPosition, new SmallWorld());

            var result = rover.Move(true);

            bool isSuccess = !initialPosition.Equals(expectedResult);
            Assert.AreEqual(isSuccess, result);
            Assert.AreEqual(expectedResult, rover.Position);
        }
コード例 #4
0
 /// <summary>Moves rover.</summary>
 /// <param name="forward">move forward.</param>
 /// <returns>true if successful.</returns>
 public bool Move(bool forward)
 {
     if (forward)
     {
         var initialPosition = this.Position;
         this.Position = this.world.Move(this.Position);
         return !initialPosition.Equals(this.Position);
     }
     else
     {
         throw new NotImplementedException("Moving backwards is not implemented.");
     }
 }
コード例 #5
0
 public void TransformClockwiseFromWest()
 {
     PositionVector vector = new PositionVector(0, 0, Direction.West);
     var result = vector.Transform(true);
     NUnit.Framework.Assert.AreEqual(Direction.Notrh, result.Direction);
 }
コード例 #6
0
 public void TransformAntiClockwiseFromNorth()
 {
     PositionVector vector = new PositionVector(0, 0, Direction.Notrh);
     var result = vector.Transform(false);
     NUnit.Framework.Assert.AreEqual(Direction.West, result.Direction);
 }
コード例 #7
0
 /// <summary>Rotates rover</summary>
 /// <param name="right">rotate right.</param>
 /// <returns>true if successful.</returns>
 public bool Rotate(bool right)
 {
     this.Position = this.Position.Transform(right);
     return true;
 }
コード例 #8
0
 /// <summary>Initializes a new instance of the <see cref="LandRover" /> class.</summary>
 /// <param name="initialPosition">initial position.</param>
 /// <param name="world">World dependency. This should represent the world rover is in.</param>
 public LandRover(PositionVector initialPosition, IWorld world)
 {
     this.Position = initialPosition;
     this.world = world;
 }
コード例 #9
0
 /// <summary>Indicated whether it is possible to go forward from location.</summary>
 /// <param name="newPosition">Location to check.</param>
 /// <returns><c>true</c> if going forward is allowed.</returns>
 public virtual bool CanMove(PositionVector newPosition)
 {
     return newPosition.X >= this.min && newPosition.X <= this.max && newPosition.Y >= this.min && newPosition.Y <= this.max;
 }