Пример #1
0
    //предложение о торговле от компьютерного игрока
    private void TryToTrade()
    {
        //монополии (не обязательно полные) бота
        List <int> monopolies = GetMyMonopolies(_dbWork.GetMyPathes(idPlayer));

        //поиск pathforbuy которого не хватает до полной монополии
        int        count = 0;
        PathForBuy trade = null;

        foreach (int monopoly in monopolies)
        {
            foreach (StreetPath path in _dbWork.GetPathsOfStreet(monopoly))
            {
                if (trade == null)
                {
                    PathForBuy pathForBuy = _dbWork.GetPathForBuy(path.GetIdStreetPath());
                    if (path.canBuy && pathForBuy.IdPlayer != 0 && pathForBuy.IdPlayer != idPlayer)
                    {
                        trade = pathForBuy;
                        count = 1;
                        break;
                    }
                }
            }

            if (trade != null)
            {
                break;
            }
        }

        //если нет таких, то выходим
        if (trade == null)
        {
            return;
        }

        //поиск, какому игроку принадлежит улица
        Player player = _dbWork.GetPlayerbyId(trade.IdPlayer);

        Trade.CreateListThings(player, this);
        Trade.AddItemToList(player, this, trade);

        //проверяем, есть ли у этого игрока ещё улицы из этой монополии
        foreach (StreetPath streetPath in _dbWork.GetPathsOfStreet(trade.GetIdStreetParent()))
        {
            PathForBuy path = _dbWork.GetPathForBuy(streetPath.GetIdStreetPath());
            if (streetPath.CanBuy && path.GetIdStreetPath() != trade.GetIdStreetPath() &&
                path.IdPlayer == trade.IdPlayer)
            {
                Trade.AddItemToList(player, this, path);
                count++;
            }
        }

        //если достаточно денег, то записываем деньги в сделку и открываем игроку канву с предложением о сделке
        if (count * price <= money)
        {
            Trade.AddMoneyToList(player, this, count * price);
            if (!player.IsBot())
            {
                _gameCanvas.OpenTradeFromBotToPlayer(this, player, count * price);
            }
            else
            {
                player.ThinkAboutTrade(this);
            }
        }
        else
        {
            //прописать отмену сделки
        }
    }