Пример #1
0
            private List <List <Card> > GetAttackersDeclarations()
            {
                var results = new List <List <Card> >();

                var noAttackers = new List <Card>();

                results.Add(noAttackers);

                var allAttackers = Controller.Battlefield.CreaturesThatCanAttack.ToList();

                if (allAttackers.Count > 0)
                {
                    var parameters = new AttackStrategyParameters
                    {
                        AttackerCandidates   = allAttackers,
                        BlockerCandidates    = Defender.Battlefield.CreaturesThatCanBlock.ToList(),
                        DefendingPlayersLife = Defender.Life
                    };

                    var chosenAttackers = new AttackStrategy(parameters).ChooseAttackers();

                    if (chosenAttackers.Count > 0)
                    {
                        results.Add(chosenAttackers);
                    }

                    if (chosenAttackers.Count < allAttackers.Count)
                    {
                        results.Add(allAttackers);
                    }
                }

                return(results);
            }
Пример #2
0
            private List <ChosenAttackers> GetAttackersDeclarations()
            {
                var results = new List <ChosenAttackers>();

                // First choice: only attackers that must attack
                results.Add(SelectAttackTarget(CreaturesThatMustAttack));

                var everyCreatureThatCanAttack = RemoveAttackersIfWeCannotAffordToPayCombatCost(
                    Controller.Battlefield.CreaturesThatCanAttack.ToList());

                if (everyCreatureThatCanAttack.Count > CreaturesThatMustAttack.Count)
                {
                    var parameters = new AttackStrategyParameters
                    {
                        AttackerCandidates   = everyCreatureThatCanAttack,
                        BlockerCandidates    = Defender.Battlefield.CreaturesThatCanBlock.ToList(),
                        DefendingPlayersLife = Defender.Life
                    };

                    var greedyAttackers = new AttackStrategy(parameters)
                                          .ChooseAttackers()
                                          .Concat(CreaturesThatMustAttack)
                                          .Distinct()
                                          .ToList();

                    if (greedyAttackers.Count > CreaturesThatMustAttack.Count)
                    {
                        // Second choice: attackers selected by greedy attack strategy
                        results.Add(SelectAttackTarget(greedyAttackers));
                    }

                    if (greedyAttackers.Count < everyCreatureThatCanAttack.Count)
                    {
                        // Third choice: every creature that can attack
                        results.Add(SelectAttackTarget(everyCreatureThatCanAttack));
                    }
                }

                return(results);
            }