/// <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: y = 1; break; case Direction.East: x = 1; break; case Direction.South: y = -1; break; case Direction.West: x = -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) { IWorld world = new World(); var result = world.Move(initialPosition); Assert.AreEqual(expectedResult, result); }
public void TransformClockwiseFromWest() { PositionVector vector = new PositionVector(0, 0, Direction.West); var result = vector.Transform(true); Assert.AreEqual(Direction.Notrh, result.Direction); }
public void TransformAntiClockwiseFromWest() { PositionVector vector = new PositionVector(0, 0, Direction.West); var result = vector.Transform(false); Assert.AreEqual(Direction.South, result.Direction); }
/// <summary>Rotates right</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>Moves forward.</summary> /// <param name="forward">move forward.</param> /// <returns>true if successful.</returns> public bool Move() { var initialPosition = this.Position; this.Position = this.world.Move(this.Position); return !initialPosition.Equals(this.Position); }
/// <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> private bool CanMove(PositionVector newPosition) { return newPosition.X >= this.min && newPosition.X <= this.max && newPosition.Y >= this.min && newPosition.Y <= this.max; }