public static Moves CalculateNoPlanBreakBestTerritoryTask(BotMain state, int maxDeployment, List <BotTerritory> territoriesToConsider, BotMap visibleMap, BotMap workingMap, string source)
        {
            var wmOpponentTerritories     = workingMap.AllOpponentTerritories.Where(o => o.IsVisible).ToList();
            var vmOpponentTerritories     = visibleMap.CopyTerritories(wmOpponentTerritories);
            var sortedOpponentTerritories = state.TerritoryValueCalculator.SortAttackValue(vmOpponentTerritories);

            if (territoriesToConsider != null)
            {
                var territoriesToRemove = new List <BotTerritory>();
                foreach (var territory in sortedOpponentTerritories)
                {
                    if (!territoriesToConsider.Contains(territory))
                    {
                        territoriesToRemove.Add(territory);
                    }
                }
                territoriesToRemove.ForEach(o => sortedOpponentTerritories.Remove(o));
            }
            foreach (var territory_1 in sortedOpponentTerritories)
            {
                if (territory_1.IsVisible)
                {
                    var breakTerritoryMoves = state.BreakTerritoryTask.CalculateBreakTerritoryTask(territory_1, maxDeployment, BotTerritory.DeploymentType.Normal, BotTerritory.DeploymentType.Normal, source);
                    if (breakTerritoryMoves != null)
                    {
                        return(breakTerritoryMoves);
                    }
                }
            }
            return(null);
        }
        public static Moves CalculateNoPlanDefendBestTerritoryTask(BotMain state, int maxDeployment, BotMap visibleMap, BotMap workingMap)
        {
            var wmOpponentBorderingTerritories       = workingMap.GetOpponentBorderingTerritories();
            var vmOpponentBorderingTerritories       = visibleMap.CopyTerritories(wmOpponentBorderingTerritories);
            var sortedVMOpponentBorderingTerritories = state.TerritoryValueCalculator.SortDefenseValue(vmOpponentBorderingTerritories);

            foreach (var vmTerritory in sortedVMOpponentBorderingTerritories)
            {
                var defendTerritoryMoves = state.DefendTerritoryTask.CalculateDefendTerritoryTask(vmTerritory, maxDeployment, true, BotTerritory.DeploymentType.Normal, BotTerritory.DeploymentType.Normal);
                if (defendTerritoryMoves != null && defendTerritoryMoves.GetTotalDeployment() > 0)
                {
                    return(defendTerritoryMoves);
                }
            }

            return(null);
        }