private void MoveForward(IMarsSurface surface, IMartianRobot robot) { var expectedRobotPosition = CalculatePosition( robot.Position, robot.Direction); if (!surface.InSurface(expectedRobotPosition)) { if (surface.Surface[robot.Position.X, robot.Position.Y] == MarsSurfacePointState.WithScent) { //Do nothing } else { surface.Surface[robot.Position.X, robot.Position.Y] = MarsSurfacePointState.WithScent; robot.State = MarsRobotState.Lost; } } else { robot.Position = expectedRobotPosition; } }
public void Move(IMarsSurface surface, IMartianRobot robot, MoveAction moveAction) { if (robot.State == MarsRobotState.Lost) { return; } switch (moveAction) { case MoveAction.Forward: MoveForward(surface, robot); break; case MoveAction.TurnLeft: TurnLeft(robot); break; case MoveAction.TurnRight: TurnRight(robot); break; default: throw new ArgumentOutOfRangeException(nameof(moveAction), moveAction, null); } }
public IMartianRobot Create(IMarsSurface surface, Vector2 startPosition, Direction startDirection) { return(new MartianRobot(surface, startPosition, startDirection, _moveCoordinator)); }
internal MartianRobotStub(IMarsSurface surface, Vector2 position, Direction direction) { Surface = surface; Position = position; Direction = direction; }
internal MartianRobot(IMarsSurface surface, Vector2 position, Direction direction, IMoveCoordinator moveCoordinator) { _moveCoordinator = moveCoordinator; Surface = surface; Position = position; Direction = direction; }