示例#1
0
        public void MoveRoverTo(Entities.Rover rover, int destinationYCoordinate, int destinationXCoordinate)
        {
            ValidateReceivedCoordinatesIntegrity(destinationYCoordinate, destinationXCoordinate);
            ValidateCoordinatesAreWithInBoundary(destinationYCoordinate, destinationXCoordinate);
            if (rover.GridPosition.X != destinationXCoordinate || rover.GridPosition.Y != destinationYCoordinate)
            {
                ValidateIfDestinationIsOccupied(destinationYCoordinate, destinationXCoordinate);
            }

            _roverFloorSpace2dArray[rover.GridPosition.Y, rover.GridPosition.X]     = FloorSpaceStatus.Vacant;
            _roverFloorSpace2dArray[destinationYCoordinate, destinationXCoordinate] = FloorSpaceStatus.Occupied;
        }
示例#2
0
        public Guid CreateARover(YAndXCoordinate startingGridPosition, RoverStatus roverStatus,
                                 Direction roverStartDirection)
        {
            var result = new Entities.Rover
            {
                GridPosition         = startingGridPosition,
                RoverStatus          = roverStatus,
                RoverFacingDirection = roverStartDirection,
                RoverId = Guid.NewGuid()
            };

            _rovers.Add(result);
            return(result.RoverId);
        }
示例#3
0
        public SetRoverStateCommand Translate(Entities.Rover rover, RoverActionCommand roverActionCommand)
        {
            var result = new SetRoverStateCommand
            {
                XCoordinate = rover.GridPosition.X,
                YCoordinate = rover.GridPosition.Y
            };

            switch (roverActionCommand.RoverAction)
            {
            case RoverAction.TurnLeft:
                result.FacingDirection =
                    _roverActionToDirection.GetDirection(rover.RoverFacingDirection, roverActionCommand.RoverAction);
                break;

            case RoverAction.TurnRight:
                result.FacingDirection =
                    _roverActionToDirection.GetDirection(rover.RoverFacingDirection, roverActionCommand.RoverAction);
                break;

            case RoverAction.MoveForwardInTheDirectionRoverIsFacing:
                switch (rover.RoverFacingDirection)
                {
                case Direction.North:
                    result.YCoordinate--;
                    break;

                case Direction.South:
                    result.YCoordinate++;
                    break;

                case Direction.East:
                    result.XCoordinate++;
                    break;

                case Direction.West:
                    result.XCoordinate--;
                    break;
                }

                result.FacingDirection = rover.RoverFacingDirection;
                break;
            }

            return(result);
        }