/// <summary> /// Пытается добавить корабль. /// </summary> /// <param name="ship"></param> public void AddShip(Ship ship) { if (StageType != Stage.Arrangement || !leftShipsSizesPattern.Contains(ship.Size)) { return; } foreach (var cell in ship.GetCells()) { //Если какая-то ячейка корабля не внутри поля, выходим. if (!cell.IsInside(gameSettings.LeftBottom, gameSettings.PlaceRightBottom)) { return; } } foreach (var s in ships) { //Если какой-то корабль конфликтует с этим кораблём, выходим. if (s.IsConflict(ship)) { return; } } ships.Add(ship); leftShipsSizesPattern.Remove(ship.Size); //Если в паттерне размеров больше не осталось, значит все корабли расставлены! if (leftShipsSizesPattern.Count == 0) { StageType = Stage.Game; } ShipAdded?.Invoke(this, ship); }
public async Task Handle(ShipAdded message) { var gameToUpdate = await _read.Get <GameDetails>(message.GameId); gameToUpdate.Players[message.PlayerIndex].Board.AddShip(message.ShipToAdd); gameToUpdate.Version = message.Version; await _save.Put(gameToUpdate); }
public Task Handle(ShipAdded message) { var direction = message.Head.X == message.Tail.X ? "vertical" : "horizontal"; _gameDisplay.DisplayShipAdded(message.Name, message.Size, $"{direction} - head: {message.Head.ToLetterCoordinate()}"); return(Task.CompletedTask); }
private void Apply(ShipAdded e) { _innerDetails.Players[e.PlayerIndex].Board.AddShip(e.ShipToAdd); _innerDetails.Version = e.Version; }
private void Apply(ShipAdded e) { _board.FullFillAllocation(e.ShipId, e.AllocationReference, e.Size); _ships.Add(e.ShipId, new Ship(e.ShipId, e.Name, e.Size)); }