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;
 }
Example #5
0
 internal MartianRobot(IMarsSurface surface,
                       Vector2 position,
                       Direction direction,
                       IMoveCoordinator moveCoordinator)
 {
     _moveCoordinator = moveCoordinator;
     Surface          = surface;
     Position         = position;
     Direction        = direction;
 }