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; }
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); }
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); }