Example #1
0
            private void GetBlockersDeclarationsLure(List <Card> attackers, List <ChosenBlockers> strategies)
            {
                var chosenBlockers = new ChosenBlockers();
                var candidates     = new HashSet <Card>(D.Controller.Battlefield.CreaturesThatCanBlock);

                foreach (var attacker in attackers.Where(x => x.Has().Lure).OrderBy(x => x.Toughness))
                {
                    foreach (var blocker in candidates.Where(x => attacker.CanBeBlockedBy(x)).ToList())
                    {
                        chosenBlockers.Add(blocker, attacker);
                        candidates.Remove(blocker);
                    }
                }

                if (candidates.Count > 0)
                {
                    var remaining = BlockStrategy.ChooseBlockers(new BlockStrategyParameters
                    {
                        Attackers         = attackers,
                        BlockerCandidates = candidates.ToList(),
                        DefendersLife     = D.Controller.Life
                    });

                    foreach (var attackerBlockerPair in remaining)
                    {
                        chosenBlockers.Add(attackerBlockerPair.Blocker, attackerBlockerPair.Attacker);
                    }
                }

                strategies.Add(chosenBlockers);
            }
Example #2
0
            private void GetBlockersDeclarationsNormal(List <Card> attackers, List <ChosenBlockers> strategies)
            {
                // 1. Strategy, no blockers
                strategies.Add(ChosenBlockers.None);

                // 2. Strategy, try assign some blockers via shallow strategy
                var strategy2 = BlockStrategy.ChooseBlockers(new BlockStrategyParameters
                {
                    Attackers         = attackers,
                    BlockerCandidates = D.Controller.Battlefield.CreaturesThatCanBlock.ToList(),
                    DefendersLife     = D.Controller.Life
                });

                if (strategy2.Count > 0)
                {
                    strategies.Add(strategy2);
                }
            }