/// <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; }
private void PerformTest(PositionVector initialPosition, PositionVector expectedResult) { SmallWorld world = new SmallWorld(); var result = world.Move(initialPosition); Assert.AreEqual(expectedResult, result); }
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); }
/// <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."); } }
public void TransformClockwiseFromWest() { PositionVector vector = new PositionVector(0, 0, Direction.West); var result = vector.Transform(true); NUnit.Framework.Assert.AreEqual(Direction.Notrh, result.Direction); }
public void TransformAntiClockwiseFromNorth() { PositionVector vector = new PositionVector(0, 0, Direction.Notrh); var result = vector.Transform(false); NUnit.Framework.Assert.AreEqual(Direction.West, result.Direction); }
/// <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; }
/// <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; }
/// <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; }