Пример #1
0
        public static Moves CalculatePreventBonusTask(BotMain state, BotBonus bonusToPrevent, PlayerIDType opponentID, int maxDeployment, BotTerritory.DeploymentType conservativeLevel)
        {
            var territoriesToPrevent = bonusToPrevent.GetOwnedTerritories();

            var opponentAttacks = PreventTerritoriesTask.CalculateGuessedOpponentTakeOverMoves(state, territoriesToPrevent, opponentID, true, conservativeLevel);

            if (opponentAttacks == null)
            {
                return(new Moves());
            }

            var preventTerritoryMovesByDeploying = PreventTerritoriesTask.CalculatePreventTerritoriesTask(state, territoriesToPrevent, opponentID, maxDeployment, conservativeLevel);
            var visibleOpponentTerritories       = bonusToPrevent.GetVisibleOpponentTerritories();
            var breakBestTerritoryMoves          = NoPlanBreakBestTerritoryTask.CalculateNoPlanBreakBestTerritoryTask(state, maxDeployment, visibleOpponentTerritories, state.VisibleMap, state.WorkingMap, "PreventBonusTask");

            if (breakBestTerritoryMoves == null)
            {
                return(preventTerritoryMovesByDeploying);
            }
            else if (breakBestTerritoryMoves.GetTotalDeployment() <= preventTerritoryMovesByDeploying.GetTotalDeployment())
            {
                return(breakBestTerritoryMoves);
            }
            else
            {
                return(preventTerritoryMovesByDeploying);
            }
        }
Пример #2
0
        private void CalculatePreventValue(BotBonus bonus, BotMap mapToWriteIn)
        {
            var ownedTerritories = bonus.GetOwnedTerritories();
            var ownArmies        = 0;

            foreach (var ownedTerritory in ownedTerritories)
            {
                ownArmies += ownedTerritory.Armies.DefensePower;
            }

            GamePlayer maxOpponent     = null;
            int        maxPreventValue = int.MinValue;

            foreach (var opponent in BotState.Opponents)
            {
                var val = CalculatePreventValue(bonus, ownedTerritories, opponent, ownArmies);
                if (val > maxPreventValue)
                {
                    maxPreventValue = val;
                    maxOpponent     = opponent;
                }
            }

            if (maxOpponent != null)
            {
                var b = mapToWriteIn.Bonuses[bonus.ID];
                b.PreventTakeOverValue    = maxPreventValue;
                b.PreventTakeOverOpponent = maxOpponent.ID;
            }
        }