- Improved the AI detecting whether the attacking creature would be destroyed by blockers when it has first strike or double strike (fixes e.g. a useless power pump vs. a first striker).

This commit is contained in:
Agetian
2017-09-16 15:29:42 +00:00
parent ae66502fd5
commit fd7ba65203

View File

@@ -689,12 +689,21 @@ public class ComputerUtilCombat {
*/ */
public static boolean attackerWouldBeDestroyed(Player ai, final Card attacker, Combat combat) { public static boolean attackerWouldBeDestroyed(Player ai, final Card attacker, Combat combat) {
final List<Card> blockers = combat.getBlockers(attacker); final List<Card> blockers = combat.getBlockers(attacker);
int firstStrikeBlockerDmg = 0;
for (final Card defender : blockers) { for (final Card defender : blockers) {
if (ComputerUtilCombat.canDestroyAttacker(ai, attacker, defender, combat, true) if (ComputerUtilCombat.canDestroyAttacker(ai, attacker, defender, combat, true)
&& !(defender.hasKeyword("Wither") || defender.hasKeyword("Infect"))) { && !(defender.hasKeyword("Wither") || defender.hasKeyword("Infect"))) {
return true; return true;
} }
if (defender.hasKeyword("First Strike") || defender.hasKeyword("Double Strike")) {
firstStrikeBlockerDmg += defender.getNetCombatDamage();
}
}
// Consider first strike and double strike
if (attacker.hasKeyword("First Strike") || attacker.hasKeyword("Double Strike")) {
return firstStrikeBlockerDmg >= ComputerUtilCombat.getDamageToKill(attacker);
} }
return ComputerUtilCombat.totalDamageOfBlockers(attacker, blockers) >= ComputerUtilCombat.getDamageToKill(attacker); return ComputerUtilCombat.totalDamageOfBlockers(attacker, blockers) >= ComputerUtilCombat.getDamageToKill(attacker);