예제 #1
0
        /// <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);
        }
예제 #3
0
        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);
        }
예제 #4
0
 private void Apply(ShipAdded e)
 {
     _innerDetails.Players[e.PlayerIndex].Board.AddShip(e.ShipToAdd);
     _innerDetails.Version = e.Version;
 }
예제 #5
0
 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));
 }