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); }
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); } }