public async Task <IActionResult> AddShip(string battleId, [FromBody] AddShipRequest addShipRequest) { try { var direction = (ShipDirection)Enum.Parse(typeof(ShipDirection), addShipRequest.ShipDirection, true); var ship = await _battleService.AddShip( battleId, new Coordinate(addShipRequest.Column, addShipRequest.Row), direction ); return(Created(Request.Path, ship)); } catch (InvalidShipCreationException ex) { _logger.LogError(ex.Message); return(Conflict(ex)); } catch (FailedShipCreationException ex) { _logger.LogError(ex.Message); return(BadRequest(ex)); } }
public void HasLost_WhenAllShipsSunk_ReturnTrue() { //Arrange var player = new Player("My Player"); var request = new AddShipRequest { Direction = ShipDirection.Horizental, Origin = new Coordinates(0, 0), Ship = new Destroyer() { Name = "Destroyer" } }; //Act player.AddShip(request); player.ProcessAttack(new Coordinates(0, 0)); player.ProcessAttack(new Coordinates(0, 1)); player.ProcessAttack(new Coordinates(0, 2)); //Assert var hasLost = player.HasLost(); Assert.True(hasLost); }
public async Task <IActionResult> AddShip(Guid boardId, Guid shipId, AddShipRequest addShipRequest) { var boardTask = _boardService.GetBoard(boardId); var shipTask = _shipService.GetShip(shipId); var board = await boardTask; var ship = await shipTask; await _shipService.AddShipOnBoard(boardId, ship, addShipRequest); return(NoContent()); }
private bool TryAddShipHorizental(AddShipRequest request) { if (!CanAddShipVertical(request)) { return(false); } for (int i = request.Origin.Column; i < request.Ship.Size; i++) { Squares[request.Origin.Row, i].Status = request.Ship.ShipSquareStatus; } _ships.Add(request.Ship); return(true); }
public bool AddShip(AddShipRequest request) { var validator = new AddShipRequestValidator(); var validationResults = validator.Validate(request); if (validationResults.Errors.Any()) { //in real world return the real errors. throw new ArgumentException($"Invalid Argument Exception.{nameof(request)}"); } //only add ship if it is not already on board and return(PrimaryBoard.TryAddShip(request)); }
public async Task <IActionResult> Post([FromBody] AddShipRequest request) { var addShipCommand = new AddShipCommand( type: (ShipType)Enum.Parse <ShipType>(request.Type), name: new ShipName(request.Name), capacity: new Capacity(request.Capacity), shippingLine: new Id(request.ShippingLine) ); await _commandProcessor.SendAsync(addShipCommand); var addedShip = await _queryProcessor.ExecuteAsync(new ShipByIdQuery(new Id(addShipCommand.Id))); return(Ok(addedShip)); }
private bool CanAddShipHorizental(AddShipRequest request) { if (request.Origin.Column + request.Ship.Size >= Cols) { return(false); } for (int i = request.Origin.Column; i < request.Ship.Size; i++) { if (Squares[request.Origin.Row, i].Status != SquareStatus.Available) { return(false); } } return(true); }
private bool CanAddShipVertical(AddShipRequest request) { if (request.Origin.Row + request.Ship.Size >= Rows) { return(false); } for (int i = request.Origin.Row; i < request.Ship.Size; i++) { if (Squares[i, request.Origin.Column].Status != SquareStatus.Available) { return(false); } } return(true); }
public void AddShip_WhenProvidedWithWrongCoordinates_ReturnFalse() { //Arrange var player = new Player("My Player"); var request = new AddShipRequest { Direction = ShipDirection.Horizental, Origin = new Coordinates(-1, -1), Ship = new Destroyer() { Name = "Destroyer" } }; //Act & Assert Assert.Throws <ArgumentException>(() => player.AddShip(request)); }
public IActionResult AddShip([FromBody] AddShipRequest request) { // Note: This function won't handle the scenario that // the ship is partially or completely placed out of the board // because the request validation will fail the request before // entering this function. Logger.Info("AddShip request received."); var board = _boardsManager.GetBoard(request.BoardId); if (board == null) { Logger.Error($"The board [{request.BoardId}] can't be found."); return(CreateErrorResponse(StatusCodes.Status400BadRequest, $"The board [{request.BoardId}] doesn't exist")); } Result result; try { result = board.AddShip(new BattleShip( new Coordinate(request.HeadPosition.X.Value, request.HeadPosition.Y.Value), new Coordinate(request.TailPosition.X.Value, request.TailPosition.Y.Value))); } catch (Exception e) // BattleShip constructor will throw exception if the ship is not placed vertically or horizontally { Logger.Error(e.Message); return(CreateErrorResponse(StatusCodes.Status400BadRequest, $"The ship {request.HeadPosition}, {request.TailPosition} must be vertical or horizontal")); } if (result == Result.PositionsTaken) { Logger.Error($"The ship {request.HeadPosition}, {request.TailPosition} can't be placed because some positions have been taken by other ship."); return(CreateErrorResponse(StatusCodes.Status400BadRequest, $"The ship {request.HeadPosition}, {request.TailPosition} can't be placed because some positions have been taken by other ship")); } Logger.Info("The ship has been successfully added."); return(CreateSuccessResponse(StatusCodes.Status201Created)); }
public ActionResult AddShip([FromBody] AddShipRequest addShipRequest) { if (addShipRequest == null) { return(BadRequest($"{nameof(addShipRequest)} must not be null")); } if (addShipRequest.End == null || addShipRequest.Start == null) { return(BadRequest("Coordinate must not be null")); } var result = Board.Add(addShipRequest.Start, addShipRequest.End); if (!result.Valid) { return(BadRequest(result.ErrorMessage)); } return(Ok()); }
public IActionResult AddShip([FromBody] AddShipRequest addShipRequest) { try { var validation = _gameStateService.ValidateAddShipRequest( addShipRequest.XPosition, addShipRequest.YPosition, addShipRequest.Orientation, addShipRequest.Size, addShipRequest.AddToPlayerOne); if (!validation.IsValid) { return(BadRequest( ApiErrorResponse.GetCustomBadRequest( "One or more game rules were not respected.", HttpContext.TraceIdentifier, new List <string> { validation.Error }))); } _gameStateService.AddShipOnPlayersBoard(addShipRequest.XPosition, addShipRequest.YPosition, addShipRequest.Orientation, addShipRequest.Size, addShipRequest.AddToPlayerOne); return(StatusCode(201, _gameStateService.GetGameStatus())); } catch (Exception e) { return(StatusCode(500, ApiErrorResponse.GetCustomInternalServerError( "An unexpected error occured. Please contact API team.", HttpContext.TraceIdentifier, new List <string> { e.Message }))); } }
public void AddShip_WhenShipIsAdded_ReturnsSuccess() { //Arrange var player = new Player("My Player"); var request = new AddShipRequest { Direction = ShipDirection.Horizental, Origin = new Coordinates(0, 0), Ship = new BattleShip() { Name = "BattleShip" } }; //Act var result = player.AddShip(request); //Assert Assert.True(result); }
public void AddShip_WhenAddedShipIsAlreadyPresent_ReturnsFalse() { //Arrange var player = new Player("My Player"); var request = new AddShipRequest { Direction = ShipDirection.Horizental, Origin = new Coordinates(0, 0), Ship = new BattleShip() { Name = "BattleShip" } }; //Act player.AddShip(request); var result = player.AddShip(request); //Assert Assert.False(result); }
public bool TryAddShip(AddShipRequest request) { lock (request) { if (_ships.FirstOrDefault(x => x.ShipSquareStatus == request.Ship.ShipSquareStatus) != null) { return(false); } switch (request.Direction) { case ShipDirection.Horizental: return(TryAddShipHorizental(request)); case ShipDirection.Vertical: return(TryAddShipVertical(request)); default: return(false); } } }
public IActionResult AddShip([FromBody] AddShipRequest request) { if (_gameState == null) { var msg = "The Game has not been created yet, please create first"; _logger.Debug(msg); throw new ApplicationException(msg); } Player currentPlayer; if (request.playerId == PlayerId.Player1) { currentPlayer = _gameState.player1; } else { currentPlayer = _gameState.player2; } _gameService.AddShip(request.shipId, request.lengthOrWidth, request.startingRow, request.startingColumn, request.orientation, currentPlayer); return(Ok()); }
public async Task AddShipOnBoard(Guid boardId, Ship ship, AddShipRequest addShipRequest) { var shipPositions = new List <object>(); var index = 0; //Write code to place a ship in backend(database) }