Esempio n. 1
0
        // TODO weitermachen
        private void DeleteBadTransferMoves(Moves movesSoFar)
        {
            var interestingTransfers = new List <BotOrderAttackTransfer>();

            foreach (var atm in movesSoFar.Orders.OfType <BotOrderAttackTransfer>())
            {
                if (atm.Armies.AttackPower > 1 && atm.To.OwnerPlayerID == BotState.Me.ID && atm.From.GetTotalDeployment(BotTerritory.DeploymentType.Normal) > 0)
                {
                    interestingTransfers.Add(atm);
                }
            }
            foreach (var atm_1 in interestingTransfers)
            {
                var deploymentToShift = Math.Min(atm_1.From.GetTotalDeployment(BotTerritory.DeploymentType.Normal), atm_1.Armies.AttackPower);
                atm_1.Armies = atm_1.Armies.Subtract(new Armies(deploymentToShift));
                var pam = new BotOrderDeploy(BotState.Me.ID, atm_1.To, deploymentToShift);
                MovesCommitter.CommittPlaceArmiesMove(pam);
                movesSoFar.AddOrder(pam);
                foreach (var oldDeployment in atm_1.From.GetDeployment(BotTerritory.DeploymentType.Normal))
                {
                    while (deploymentToShift > 0)
                    {
                        if (oldDeployment.Armies > 0)
                        {
                            deploymentToShift--;
                            oldDeployment.Armies = oldDeployment.Armies - 1;
                        }
                        else
                        {
                            break;
                        }
                    }
                }
            }
        }
Esempio n. 2
0
        private void CalculateJoinInAttacksMoves(Moves moves)
        {
            var joinInAttackMoves = JoinInAttacksTask.CalculateJoinInAttacksTask(BotState);

            MovesCommitter.CommittMoves(BotState, joinInAttackMoves);
            moves.MergeMoves(joinInAttackMoves);
        }
Esempio n. 3
0
        private void CalculateDelayMoves(Moves moves)
        {
            var maxMovesBeforeRiskyAttack = 7;
            var minMovesBeforeRiskyAttack = 1;
            var delayMoves = DelayTask.CalculateDelayTask(BotState, moves, maxMovesBeforeRiskyAttack,
                                                          minMovesBeforeRiskyAttack);

            MovesCommitter.CommittMoves(BotState, delayMoves);
            moves.MergeMoves(delayMoves);
        }
Esempio n. 4
0
        private void CalculateFlankBonusMoves(Moves moves)
        {
            var maxDeployment   = BotState.MyIncome.Total - moves.GetTotalDeployment();
            var flankBonusMoves = FlankBonusTask.CalculateFlankBonusTask(BotState, maxDeployment);

            if (flankBonusMoves != null)
            {
                MovesCommitter.CommittMoves(BotState, flankBonusMoves);
                moves.MergeMoves(flankBonusMoves);
            }
        }
Esempio n. 5
0
        private void CalculateMoveIdleArmiesMoves(Moves moves)
        {
            var idleArmiesMoves = MoveIdleArmiesTask.CalculateMoveIdleArmiesTask(BotState);

            MovesCommitter.CommittMoves(BotState, idleArmiesMoves);
            moves.MergeMoves(idleArmiesMoves);
            var idleExpansionArmiesMoves = MoveIdleArmiesTask.CalculateMoveIdleExpansionArmiesTask(BotState);

            MovesCommitter.CommittMoves(BotState, idleExpansionArmiesMoves);
            moves.MergeMoves(idleExpansionArmiesMoves);
        }
Esempio n. 6
0
        private void CalculateNoPlanTryoutAttackMoves(Moves moves)
        {
            var foundMove = true;

            while (foundMove)
            {
                foundMove = false;
                var tryoutAttackMoves = NoPlanTryoutAttackTask.CalculateNoPlanTryoutAttackTask(BotState, false, true, true);
                if (tryoutAttackMoves != null)
                {
                    foundMove = true;
                    MovesCommitter.CommittMoves(BotState, tryoutAttackMoves);
                    moves.MergeMoves(tryoutAttackMoves);
                }
            }
        }
        public void StoreOpponentDeployment()
        {
            var lastVisibleMap = BotState.LastVisibleMapX;

            foreach (GamePlayer opponent in BotState.Opponents)
            {
                List <GameOrderDeploy> opponentDeployments = BotState.PrevTurn.Where(o => o.PlayerID == opponent.ID).OfType <GameOrderDeploy>().ToList();
                foreach (GameOrderDeploy opponentDeployment in opponentDeployments)
                {
                    BotTerritory lwmTerritory = lastVisibleMap.Territories[opponentDeployment.DeployOn];
                    if (lwmTerritory.IsVisible)
                    {
                        MovesCommitter.CommittPlaceArmiesMove(new BotOrderDeploy(lwmTerritory.OwnerPlayerID, lwmTerritory, opponentDeployment.NumArmies));
                    }
                }
            }
        }
Esempio n. 8
0
        private void CalculateNoPlanCleanupMoves(Moves moves)
        {
            // The cleanup deployment
            var armiesToDeploy         = BotState.MyIncome.Total - moves.GetTotalDeployment();
            var cleanupDeploymentMoves = NoPlanCleanupTask.CalculateNoPlanCleanupDeploymentTask(BotState, armiesToDeploy, moves);

            MovesCommitter.CommittMoves(BotState, cleanupDeploymentMoves);
            moves.MergeMoves(cleanupDeploymentMoves);
            CalculateMoveIdleArmiesMoves(moves);
            // The cleanup expansion moves. We need here already the distance to the opponent border
            BotState.ExpansionMapUpdater.UpdateExpansionMap();
            DistanceCalculator.CalculateDistanceToOpponentBorderCare3(BotState.ExpansionMap, BotState.VisibleMap);
            var cleanupExpansionMoves = NoPlanCleanupTask.CalculateNoPlanCleanupExpansionTask(BotState, moves);

            MovesCommitter.CommittMoves(BotState, cleanupExpansionMoves);
            moves.MergeMoves(cleanupExpansionMoves);
        }
Esempio n. 9
0
        private void CalculateSnipeBonusMoves(Moves moves)
        {
            var maxDeployment     = BotState.MyIncome.Total - moves.GetTotalDeployment();
            var bestSnipableBonus = BotState.PreventOpponentExpandBonusTask.GetBestBonusToPrevent(BotState.VisibleMap, BotState.WorkingMap);

            if (bestSnipableBonus == null)
            {
                return;
            }

            var snipeBonusMoves = BotState.PreventOpponentExpandBonusTask.CalculatePreventOpponentExpandBonusTaskk(bestSnipableBonus, maxDeployment, BotState.VisibleMap, BotState.WorkingMap);

            if (snipeBonusMoves != null)
            {
                MovesCommitter.CommittMoves(BotState, snipeBonusMoves);
                moves.MergeMoves(snipeBonusMoves);
            }
        }
Esempio n. 10
0
        private void CalculateNoPlanAttackTerritoriesMoves(Moves moves)
        {
            var foundAnAttack = true;

            while (foundAnAttack)
            {
                var maxDeployment        = BotState.MyIncome.Total - moves.GetTotalDeployment();
                var unplannedAttackMoves = NoPlanAttackBestTerritoryTask.CalculateNoPlanAttackBestTerritoryTask
                                               (BotState, maxDeployment);
                if (unplannedAttackMoves == null)
                {
                    foundAnAttack = false;
                }
                else
                {
                    MovesCommitter.CommittMoves(BotState, unplannedAttackMoves);
                    moves.MergeMoves(unplannedAttackMoves);
                }
            }
        }
 public void GuessOpponentDeployment(PlayerIDType opponentID)
 {
     Assert.Fatal(BotState.NumberOfTurns != -1);
     if (BotState.NumberOfTurns == 0)
     {
         foreach (var vmTerritory in BotState.VisibleMap.OpponentTerritories(opponentID))
         {
             var armies = BotState.Settings.MinimumArmyBonus;
             MovesCommitter.CommittPlaceArmiesMove(new BotOrderDeploy(opponentID, vmTerritory, armies));
         }
     }
     else
     {
         foreach (var vmTerritory1 in BotState.VisibleMap.OpponentTerritories(opponentID))
         {
             var lvmTerritory = BotState.LastVisibleMapX.Territories[vmTerritory1.ID];
             var guessedOpponentDeployment = 0;
             if (lvmTerritory.IsVisible && lvmTerritory.OwnerPlayerID == opponentID)
             {
                 var opponentIncome = BotState.GetGuessedOpponentIncome(opponentID, BotState.VisibleMap);
                 guessedOpponentDeployment = Math.Min(lvmTerritory.GetTotalDeployment(BotTerritory.DeploymentType.Normal), opponentIncome);
                 if (HasDeploymentReasonDisapeared(lvmTerritory, vmTerritory1))
                 {
                     var boundDeployment = GetBoundOpponentDeployment(opponentID, vmTerritory1);
                     var maxDeployment   = BotState.GetGuessedOpponentIncome(opponentID, BotState.VisibleMap) - boundDeployment;
                     guessedOpponentDeployment = Math.Min(5, maxDeployment);
                 }
             }
             else
             {
                 var boundDeployment = GetBoundOpponentDeployment(opponentID, vmTerritory1);
                 var maxDeployment   = BotState.GetGuessedOpponentIncome(opponentID, BotState.VisibleMap) - boundDeployment;
                 guessedOpponentDeployment = Math.Max(1, Math.Min(5, maxDeployment));
             }
             var pam = new BotOrderDeploy(opponentID, vmTerritory1, guessedOpponentDeployment);
             MovesCommitter.CommittPlaceArmiesMove(pam);
             var conservativePam = new BotOrderDeploy(opponentID, vmTerritory1, BotState.GetGuessedOpponentIncome(opponentID, BotState.VisibleMap));
             MovesCommitter.CommittPlaceArmiesMove(conservativePam, BotTerritory.DeploymentType.Conservative);
         }
     }
 }
Esempio n. 12
0
        public void CalculateExpansionMoves(Moves moves)
        {
            var armiesForExpansion = Math.Min(BotState.Settings.MinimumArmyBonus, BotState.MyIncome.Total - moves.GetTotalDeployment());
            var armiesForTakeOver  = BotState.MyIncome.Total - moves.GetTotalDeployment();

            if (BotState.VisibleMap.GetOpponentBorderingTerritories().Count == 0)
            {
                armiesForExpansion = BotState.MyIncome.Total - moves.GetTotalDeployment();
            }

            AddValueToImmediateBonuses(armiesForTakeOver);
            var sortedAccessibleBonuses = BotState.BonusExpansionValueCalculator.SortAccessibleBonuses(BotState.VisibleMap);
            var bonusesThatCanBeTaken   = GetBonusesThatCanBeTaken(armiesForTakeOver);
            var takenOverBonuses        = new List <BotBonus>();
            var armiesUsedForTakeOver   = 0;

            // calculate the moves for the bonuses that can be immediately taken
            foreach (var bonus in sortedAccessibleBonuses)
            {
                if (bonusesThatCanBeTaken.Contains(bonus))
                {
                    var expansionMoves = BotState.TakeTerritoriesTaskCalculator.CalculateTakeTerritoriesTask(armiesForTakeOver, bonus.GetNotOwnedTerritories(), BotTerritory.DeploymentType.Normal, "MovesCalculator.CalculateExpansionMoves");
                    MovesCommitter.CommittMoves(BotState, expansionMoves);
                    moves.MergeMoves(expansionMoves);
                    armiesForTakeOver    -= expansionMoves.GetTotalDeployment();
                    bonusesThatCanBeTaken = GetBonusesThatCanBeTaken(armiesForTakeOver);
                    takenOverBonuses.Add(bonus);
                    armiesUsedForTakeOver += expansionMoves.GetTotalDeployment();
                }
                else
                {
                    break;
                }
            }


            var isExpandingAfterTakeOverSmart = IsExpandingAfterTakeOverSmart();


            var opponentBorderPresent = BotState.VisibleMap.GetOpponentBorderingTerritories().Count > 0;

            armiesForExpansion = Math.Max(0, armiesForExpansion - armiesUsedForTakeOver);
            if (takenOverBonuses.Count == 0 || isExpandingAfterTakeOverSmart)
            {
                BotBonus bonusToExpand = null;
                foreach (var bonus in sortedAccessibleBonuses)
                {
                    if (!takenOverBonuses.Contains(bonus))
                    {
                        var condition1 = bonus.GetVisibleNeutralTerritories().Count > 0;
                        var condition2 = bonus.Amount > 0;
                        var condition3 = !opponentBorderPresent || bonus.ExpansionValueCategory > 0;
                        if (condition1 && condition2 && condition3)
                        {
                            bonusToExpand = bonus;
                            break;
                        }
                    }
                }
                if (bonusToExpand == null)
                {
                    return;
                }
                var foundMoves = true;
                var firstStep  = true;
                while (foundMoves)
                {
                    BotState.BonusValueCalculator.CalculateBonusValues(BotState.WorkingMap, BotState.VisibleMap);
                    foundMoves = false;
                    if (firstStep == false)
                    {
                        if (bonusToExpand.ExpansionValueCategory == 0)
                        {
                            return;
                        }
                        if (opponentBorderPresent)
                        {
                            armiesForExpansion = 0;
                        }
                        if (bonusToExpand.GetOpponentNeighbors().Count > 0)
                        {
                            return;
                        }
                    }
                    Moves oneStepMoves = null;
                    if (!opponentBorderPresent)
                    {
                        oneStepMoves = BotState.TakeTerritoriesTaskCalculator.CalculateOneStepExpandBonusTask(armiesForExpansion, bonusToExpand, true, BotState.WorkingMap, BotTerritory.DeploymentType.Normal);
                    }
                    else
                    {
                        oneStepMoves = BotState.TakeTerritoriesTaskCalculator.CalculateOneStepExpandBonusTask(armiesForExpansion, bonusToExpand, false, BotState.WorkingMap, BotTerritory.DeploymentType.Normal);
                    }

                    if (oneStepMoves != null)
                    {
                        firstStep           = false;
                        armiesForExpansion -= oneStepMoves.GetTotalDeployment();
                        MovesCommitter.CommittMoves(BotState, oneStepMoves);
                        moves.MergeMoves(oneStepMoves);
                        foundMoves = true;
                    }
                }
            }
        }
Esempio n. 13
0
        private void CalculateXBonusMoves(Moves moves, BotTerritory.DeploymentType lowerBoundConservative, BotTerritory.DeploymentType upperBoundConservative)
        {
            var solutionFound         = true;
            var alreadyHandledBonuses = new List <BotBonus>();

            while (solutionFound)
            {
                solutionFound = false;
                BotState.BonusValueCalculator.CalculateBonusValues(BotState.WorkingMap, BotState.VisibleMap);
                BotState.TerritoryValueCalculator.CalculateTerritoryValues(BotState.VisibleMap, BotState.WorkingMap);
                var bonusesToX = BotState.BonusValueCalculator.GetSortedBonusesAdjustedFactor(BotState.VisibleMap);
                bonusesToX.RemoveAll(alreadyHandledBonuses);
                foreach (var bonus in bonusesToX)
                {
                    alreadyHandledBonuses.Add(bonus);
                    var stillAvailableDeployment = BotState.MyIncome.Total - moves.GetTotalDeployment();
                    var plan = BotState.BonusValueCalculator.GetPlanForBonus(bonus);
                    if (plan == BonusPlan.Break)
                    {
                        var visibleTerritories = bonus.GetVisibleOpponentTerritories();
                        var breakBonusMoves    = BreakTerritoriesTask.CalculateBreakTerritoriesTask(BotState, visibleTerritories, stillAvailableDeployment, lowerBoundConservative, upperBoundConservative);
                        if (breakBonusMoves != null)
                        {
                            MovesCommitter.CommittMoves(BotState, breakBonusMoves);
                            moves.MergeMoves(breakBonusMoves);
                            solutionFound = true;
                            break;
                        }
                    }
                    else if (plan == BonusPlan.Defend)
                    {
                        var defendBonusMoves = DefendBonusTask.CalculateDefendBonusTask(BotState, bonus, stillAvailableDeployment, false, (BotTerritory.DeploymentType)Math.Max(1, (int)lowerBoundConservative), (BotTerritory.DeploymentType)Math.Max(1, (int)upperBoundConservative));
                        if (defendBonusMoves != null)
                        {
                            MovesCommitter.CommittMoves(BotState, defendBonusMoves);
                            moves.MergeMoves(defendBonusMoves);
                            solutionFound = true;
                            break;
                        }
                    }
                    else if (plan == BonusPlan.TakeOver)
                    {
                        var takeOverMoves = TakeBonusOverTask.CalculateTakeBonusOverTask(BotState, stillAvailableDeployment, bonus, lowerBoundConservative);
                        if (takeOverMoves != null)
                        {
                            MovesCommitter.CommittMoves(BotState, takeOverMoves);
                            moves.MergeMoves(takeOverMoves);
                            solutionFound = true;
                            break;
                        }
                    }
                    else if (plan == BonusPlan.PreventTakeOver && bonus.PreventTakeOverOpponent.HasValue)
                    {
                        var preventTakeOverMoves = PreventBonusTask.CalculatePreventBonusTask(BotState, bonus, bonus.PreventTakeOverOpponent.Value, stillAvailableDeployment, lowerBoundConservative);
                        MovesCommitter.CommittMoves(BotState, preventTakeOverMoves);
                        moves.MergeMoves(preventTakeOverMoves);
                        solutionFound = true;
                        break;
                    }
                    else
                    {
                        throw new Exception("Unexpected plan");
                    }
                }
            }
        }
Esempio n. 14
0
        public void CalculateMoves()
        {
            CalculatedMoves = new Moves();
            var movesSoFar = new Moves();

            PlayCardsTask.PlayCards(BotState, movesSoFar);

            AILog.Log("Starting armies: " + BotState.MyIncome.Total);
            CalculateXBonusMoves(movesSoFar, BotTerritory.DeploymentType.Normal, BotTerritory.DeploymentType.Normal);
            AILog.Log("Armies used after calculateXBonusMoves type 1: " + movesSoFar.GetTotalDeployment());
            BotState.DeleteBadMovesTask.CalculateDeleteBadMovesTask(movesSoFar);
            CalculateXBonusMoves(movesSoFar, BotTerritory.DeploymentType.Normal, BotTerritory.DeploymentType.Conservative);
            BotState.DeleteBadMovesTask.CalculateDeleteBadMovesTask(movesSoFar);
            CalculateXBonusMoves(movesSoFar, BotTerritory.DeploymentType.Conservative, BotTerritory.DeploymentType.Conservative);
            BotState.DeleteBadMovesTask.CalculateDeleteBadMovesTask(movesSoFar);
            AILog.Log("Armies used after calculateXBonusMoves type 2: " + movesSoFar.GetTotalDeployment());
            CalculateSnipeBonusMoves(movesSoFar);
            BotState.DeleteBadMovesTask.CalculateDeleteBadMovesTask(movesSoFar);
            AILog.Log("Armies used after calculateSnipeBonusMoves: " + movesSoFar.GetTotalDeployment());
            CalculateXBonusMoves(movesSoFar, 0, BotTerritory.DeploymentType.Normal);
            BotState.DeleteBadMovesTask.CalculateDeleteBadMovesTask(movesSoFar);
            BotState.TerritoryValueCalculator.CalculateTerritoryValues(BotState.VisibleMap, BotState.WorkingMap);

            BotState.ExpansionTask.CalculateExpansionMoves(movesSoFar);


            BotState.DeleteBadMovesTask.CalculateDeleteBadMovesTask(movesSoFar);
            AILog.Log("Armies used after calculateExpansionMoves: " + movesSoFar.GetTotalDeployment());
            BotState.TerritoryValueCalculator.CalculateTerritoryValues(BotState.VisibleMap, BotState.WorkingMap);
            CalculateNoPlanBreakDefendMoves(movesSoFar, false, false, true, BotTerritory.DeploymentType.Normal, BotTerritory.DeploymentType.Normal);
            BotState.DeleteBadMovesTask.CalculateDeleteBadMovesTask(movesSoFar);
            AILog.Log("Armies used after calculateNoPlanBreakDefendMoves1: " + movesSoFar.GetTotalDeployment());
            BotState.TerritoryValueCalculator.CalculateTerritoryValues(BotState.VisibleMap, BotState.WorkingMap);
            CalculateNoPlanBreakDefendMoves(movesSoFar, false, true, false, BotTerritory.DeploymentType.Normal, BotTerritory.DeploymentType.Normal);
            BotState.DeleteBadMovesTask.CalculateDeleteBadMovesTask(movesSoFar);
            AILog.Log("Armies used after calculateNoPlanBreakDefendMoves: " + movesSoFar.GetTotalDeployment());
            BotState.TerritoryValueCalculator.CalculateTerritoryValues(BotState.VisibleMap, BotState.WorkingMap);
            CalculateNoPlanBreakDefendMoves(movesSoFar, false, false, true, BotTerritory.DeploymentType.Conservative, BotTerritory.DeploymentType.Conservative);
            BotState.DeleteBadMovesTask.CalculateDeleteBadMovesTask(movesSoFar);
            BotState.TerritoryValueCalculator.CalculateTerritoryValues(BotState.VisibleMap, BotState.WorkingMap);
            CalculateNoPlanBreakDefendMoves(movesSoFar, false, true, true, BotTerritory.DeploymentType.Normal, BotTerritory.DeploymentType.Conservative);
            BotState.DeleteBadMovesTask.CalculateDeleteBadMovesTask(movesSoFar);
            BotState.TerritoryValueCalculator.CalculateTerritoryValues(BotState.VisibleMap, BotState.WorkingMap);
            CalculateFlankBonusMoves(movesSoFar);
            BotState.DeleteBadMovesTask.CalculateDeleteBadMovesTask(movesSoFar);
            AILog.Log("Armies used after calculateFlankBonusMoves: " + movesSoFar.GetTotalDeployment());
            BotState.TerritoryValueCalculator.CalculateTerritoryValues(BotState.VisibleMap, BotState.WorkingMap);
            CalculateNoPlanBreakDefendMoves(movesSoFar, true, false, false, BotTerritory.DeploymentType.Normal, BotTerritory.DeploymentType.Normal);
            BotState.DeleteBadMovesTask.CalculateDeleteBadMovesTask(movesSoFar);
            BotState.TerritoryValueCalculator.CalculateTerritoryValues(BotState.VisibleMap, BotState.WorkingMap);
            CalculateNoPlanBreakDefendMoves(movesSoFar, true, false, false, BotTerritory.DeploymentType.Normal, BotTerritory.DeploymentType.Conservative);
            BotState.DeleteBadMovesTask.CalculateDeleteBadMovesTask(movesSoFar);
            BotState.TerritoryValueCalculator.CalculateTerritoryValues(BotState.VisibleMap, BotState.VisibleMap);
            CalculateNoPlanAttackTerritoriesMoves(movesSoFar);
            BotState.DeleteBadMovesTask.CalculateDeleteBadMovesTask(movesSoFar);
            AILog.Log("Armies used after calculateNoPlanAttackTerritoriesMoves2: " + movesSoFar.GetTotalDeployment());
            BotState.TerritoryValueCalculator.CalculateTerritoryValues(BotState.VisibleMap, BotState.VisibleMap);
            CalculateMoveIdleArmiesMoves(movesSoFar);
            BotState.DeleteBadMovesTask.CalculateDeleteBadMovesTask(movesSoFar);
            CalculateJoinInAttacksMoves(movesSoFar);
            BotState.DeleteBadMovesTask.CalculateDeleteBadMovesTask(movesSoFar);
            var supportTransferMoves = TransferMovesChooser.CalculateJoinStackMoves(BotState);

            BotState.DeleteBadMovesTask.CalculateDeleteBadMovesTask(movesSoFar);
            MovesCommitter.CommittMoves(BotState, supportTransferMoves);
            movesSoFar.MergeMoves(supportTransferMoves);

            CalculateNoPlanCleanupMoves(movesSoFar);
            BotState.DeleteBadMovesTask.CalculateDeleteBadMovesTask(movesSoFar);
            CalculateMoveIdleArmiesMoves(movesSoFar);
            BotState.DeleteBadMovesTask.CalculateDeleteBadMovesTask(movesSoFar);
            CalculateJoinInAttacksMoves(movesSoFar);
            BotState.DeleteBadMovesTask.CalculateDeleteBadMovesTask(movesSoFar);
            CalculateNoPlanTryoutAttackMoves(movesSoFar);
            BotState.DeleteBadMovesTask.CalculateDeleteBadMovesTask(movesSoFar);

            AILog.Log("Armies used after all moves done: " + movesSoFar.GetTotalDeployment());
            BotState.MapUpdater.UpdateMap(BotState.WorkingMap);
            DistanceCalculator.CalculateDistanceToBorder(BotState, BotState.VisibleMap, BotState.WorkingMap);
            BotState.ExpansionMapUpdater.UpdateExpansionMap();
            DistanceCalculator.CalculateDistanceToUnimportantTerritories(BotState.ExpansionMap, BotState.VisibleMap);
            DistanceCalculator.CalculateDistanceToImportantExpansionTerritories(BotState.ExpansionMap, BotState.VisibleMap);
            DistanceCalculator.CalculateDistanceToOpponentBorderCare3(BotState.ExpansionMap, BotState.VisibleMap);
            foreach (BotBonus emBonus in BotState.ExpansionMap.Bonuses.Values)
            {
                emBonus.ExpansionValue = BotState.VisibleMap.Bonuses[emBonus.ID].ExpansionValue;
            }
            DistanceCalculator.CalculateDistanceToHighlyImportantExpansionTerritories(BotState.ExpansionMap, BotState.VisibleMap);
            DistanceCalculator.CalculateDistanceToOpponentBorderCare4(BotState.ExpansionMap, BotState.VisibleMap);
            var transferMoves = TransferMovesChooser.CalculateTransferMoves2(BotState);

            MovesCommitter.CommittMoves(BotState, transferMoves);
            movesSoFar.MergeMoves(transferMoves);
            CalculateDelayMoves(movesSoFar);
            MovesCleaner.CleanupMoves(BotState, movesSoFar);
            movesSoFar      = BotState.MovesScheduler2.ScheduleMoves(movesSoFar);
            CalculatedMoves = movesSoFar;
        }
Esempio n. 15
0
        private void CalculateNoPlanBreakDefendMoves(Moves moves, bool lowImportance, bool mediumImportance, bool highImportance, BotTerritory.DeploymentType lowerConservative, BotTerritory.DeploymentType upperConservative)
        {
            List <BotTerritory> territoriesToDefend = new List <BotTerritory>();

            foreach (var territory in BotState.VisibleMap.GetOwnedTerritories())
            {
                var importance      = territory.DefenceTerritoryValue;
                var lowImportant    = importance < TerritoryValueCalculator.LOWEST_MEDIUM_PRIORITY_VALUE;
                var mediumImportant = importance < TerritoryValueCalculator.LOWEST_HIGH_PRIORITY_VALUE && importance >= TerritoryValueCalculator.LOWEST_MEDIUM_PRIORITY_VALUE;
                var highImportant   = importance >= TerritoryValueCalculator.LOWEST_HIGH_PRIORITY_VALUE;
                if ((lowImportance && lowImportant) || (mediumImportance && mediumImportant) || (highImportance && highImportant))
                {
                    territoriesToDefend.Add(territory);
                }
            }
            var possibleTerritoriesToAttack = new List <BotTerritory>();

            foreach (var opponentTerritory in BotState.VisibleMap.Territories.Values.Where(o => o.IsVisible &&
                                                                                           BotState.IsOpponent(o.OwnerPlayerID)))
            {
                var wmOpponentTerritory = BotState.WorkingMap.Territories[opponentTerritory.ID];
                if (BotState.IsOpponent(wmOpponentTerritory.OwnerPlayerID))
                {
                    possibleTerritoriesToAttack.Add(opponentTerritory);
                }
            }
            var territoriesToAttack = new List <BotTerritory>();

            foreach (var territory_1 in possibleTerritoriesToAttack)
            {
                var importance      = territory_1.AttackTerritoryValue;
                var lowImportant    = importance < TerritoryValueCalculator.LOWEST_MEDIUM_PRIORITY_VALUE;
                var mediumImportant = importance < TerritoryValueCalculator.LOWEST_HIGH_PRIORITY_VALUE && importance >= TerritoryValueCalculator.LOWEST_MEDIUM_PRIORITY_VALUE;
                var highImportant   = importance >= TerritoryValueCalculator.LOWEST_HIGH_PRIORITY_VALUE;
                if ((lowImportance && lowImportant) || (mediumImportance && mediumImportant) || (highImportance && highImportant))
                {
                    territoriesToAttack.Add(territory_1);
                }
            }
            var combinedTerritories = new List <BotTerritory>();

            combinedTerritories.AddRange(territoriesToDefend);
            combinedTerritories.AddRange(territoriesToAttack);
            var sortedTerritories = BotState.TerritoryValueCalculator.SortTerritoriesAttackDefense(combinedTerritories);

            foreach (var territory_2 in sortedTerritories)
            {
                var   maxDeployment    = BotState.MyIncome.Total - moves.GetTotalDeployment();
                Moves defendBreakMoves = null;
                if (territory_2.OwnerPlayerID == BotState.Me.ID)
                {
                    defendBreakMoves = BotState.DefendTerritoryTask.CalculateDefendTerritoryTask(territory_2, maxDeployment, true, lowerConservative, upperConservative);
                }
                else
                {
                    defendBreakMoves = BotState.BreakTerritoryTask.CalculateBreakTerritoryTask(territory_2, maxDeployment, lowerConservative, upperConservative, "CalculateNoPlanBreakDefendMoves");
                }

                if (defendBreakMoves != null)
                {
                    MovesCommitter.CommittMoves(BotState, defendBreakMoves);
                    moves.MergeMoves(defendBreakMoves);
                }
            }
        }