コード例 #1
0
        public static void GetSimulationCombination(Player player, int[] data, int start, int end, int index, int numCards)
        {
            if (index == numCards)
            {
                SimulationGroup group = new SimulationGroup(player);

                for (int i = 0; i < numCards; i++)
                {
                    var sim = player.trades[data[i]];
                    if (!group.AddSimulation(sim))
                    {
                        return;
                    }
                }

                var possible = group.ComputeScore();
                if (possible)
                {
                    player.tradeGroups.Add(group);

                    //Console.Error.WriteLine(printString);
                }

                return;
            }

            for (int i = start; i <= end && end - i + 1 >= numCards - index; i++)
            {
                data[index] = i;
                GetSimulationCombination(player, data, i + 1, end, index + 1, numCards);
            }
        }
コード例 #2
0
        public static void FindGroupSimulation(Player player, SimulationGroup parent = null)
        {
            FindTrades(player, parent);

            //player.trades = player.trades.OrderBy(sim => sim is Trade ? 0 : 1).ToList();

            for (int i = 1; i <= 3 && i <= player.trades.Count; i++)
            {
                int[] myCards = new int[i];
                GetSimulationCombination(player, myCards, 0, player.trades.Count - 1, 0, i);
            }
        }
コード例 #3
0
        public static bool PossibleGroupSelection(SimulationGroup myGroup, SimulationGroup enemyGroup)
        {
            foreach (var target in myGroup.targets)
            {
                if (enemyGroup.simulationCards.Contains(target))
                {
                    return(false);
                }
            }

            return(true);
        }
コード例 #4
0
        public static SimulationCard GetSimulationCard(Card target, SimulationGroup group)
        {
            foreach (var trade in group.simulations)
            {
                SimulationCard simTarget;
                if (target.simulationCards.TryGetValue(trade, out simTarget))
                {
                    return(simTarget);
                }
            }

            return(null);
        }
コード例 #5
0
        public static bool PossibleSummonSelection(SimulationGroup myGroup, SummonGroup summonGroup)
        {
            if (myGroup.simulatedManaCost + summonGroup.simulatedManaCost > Player.me.mana)
            {
                return(false);
            }

            /*foreach (var target in summonGroup.)
             * {
             *  if (enemyGroup.simulationCards.Contains(target))
             *  {
             *      return false;
             *  }
             * }*/

            return(true);
        }
コード例 #6
0
        public static void FindTrades(Player player, SimulationGroup parent = null)
        {
            var enemyPlayer = player.isMe ? Player.enemy : Player.me;

            var enemyCards = enemyPlayer.boardCards
                             .OrderBy(c => c.hasGuard ? 0 : 1)
                             .ThenByDescending(c => c.health);

            /*var print = player.isMe ? "My " : "Enemy ";
             * print += "Useable Cards: ";
             *
             * foreach(var card in player.usableCards)
             * {
             *  print += card.id + " ";
             * }
             *
             * Console.Error.WriteLine(print);*/

            List <Card> newUseableCards = parent != null?
                                          player.usableCards.Where(c => !parent.targets.Contains(c)).ToList() : player.usableCards;

            foreach (var enemy in enemyCards)
            {
                if (parent != null)
                {
                    var target = SimulationCard.GetSimulationCard(enemy, parent);
                    if (target != null)
                    {
                        if (!(target.health > 0 && (target.attack > 0 || target.hasGuard)))
                        {
                            continue;
                        }
                    }
                }

                if (enemy.health > 0 && (enemy.attack > 0 || enemy.hasGuard))
                {
                    GetTradeOptions(newUseableCards, player, enemy, parent);
                }
            }
        }
コード例 #7
0
 public static void GetTradeOptions(List <Card> usableCards, Player player, Card target, SimulationGroup parent, List <Trade> ret = null)
 {
     for (int i = 1; i < 4 && i <= usableCards.Count; i++)
     {
         int[] myCards = new int[i];
         GetTradeCombination(usableCards, player, target, myCards, 0, usableCards.Count - 1, 0, i, ret);
     }
 }