From df44f00eb8ec50820f482189a130aa957fe5dbef Mon Sep 17 00:00:00 2001 From: Hellfish Date: Mon, 2 Sep 2013 19:10:31 +0000 Subject: [PATCH] *For some reason I thought the commander blocking hadn't been committed. Removing duplicate code. --- .../forge/game/ai/ComputerUtilCombat.java | 65 ++++++++----------- 1 file changed, 26 insertions(+), 39 deletions(-) diff --git a/src/main/java/forge/game/ai/ComputerUtilCombat.java b/src/main/java/forge/game/ai/ComputerUtilCombat.java index 5ebbd44bb39..599e8741260 100644 --- a/src/main/java/forge/game/ai/ComputerUtilCombat.java +++ b/src/main/java/forge/game/ai/ComputerUtilCombat.java @@ -292,27 +292,25 @@ public class ComputerUtilCombat { public static List getLifeThreateningCommanders(final Player ai, final Combat combat) { List res = new ArrayList(); - if(ai.getGame().getType() == GameType.Commander) { - for(Card c : combat.getAttackers()) { - if(c.isCommander()) { - int cmdDmg = ai.getCommanderDamage().containsKey(c) ? ai.getCommanderDamage().get(c) : 0; - - if(c.hasKeyword("Trample")) { - for(Card blocker : combat.getBlockers(c)) { - cmdDmg -= blocker.getCurrentToughness(); + for(Card c : combat.getAttackers()) { + if(c.isCommander()) + { + List blockers = combat.getBlockers(c); + int possibleCommanderDamage = c.getCurrentPower(); + int currentCommanderDamage = ai.getCommanderDamage().containsKey(c) ? ai.getCommanderDamage().get(c) : 0; + if(blockers.size() > 0) { + if(c.getKeyword().contains("Trample")) { + for(Card b : blockers) { + possibleCommanderDamage -= b.getCurrentToughness(); } } - else - { - if(combat.getBlockers(c).size() == 0) - { - cmdDmg += c.getCurrentPower(); - } - } - if(cmdDmg >= 21) { - res.add(c); + else { + possibleCommanderDamage = 0; } } + + if(possibleCommanderDamage + currentCommanderDamage >= 21) + res.add(c); } } @@ -337,35 +335,21 @@ public class ComputerUtilCombat { // check for creatures that must be blocked final List attackers = combat.getAttackersOf(ai); + + final List threateningCommanders = getLifeThreateningCommanders(ai,combat); for (final Card attacker : attackers) { - final List blockers = combat.getBlockers(attacker); - - if(attacker.isCommander()) - { - int possibleCommanderDamage = attacker.getCurrentPower(); - int currentCommanderDamage = ai.getCommanderDamage().containsKey(attacker) ? ai.getCommanderDamage().get(attacker) : 0; - if(blockers.size() > 0) { - if(attacker.getKeyword().contains("Trample")) { - for(Card b : blockers) { - possibleCommanderDamage -= b.getCurrentToughness(); - } - } - else { - possibleCommanderDamage = 0; - } - } - - if(possibleCommanderDamage + currentCommanderDamage >= 21) - return true; - } + final List blockers = combat.getBlockers(attacker); if (blockers.size() == 0) { if (!attacker.getSVar("MustBeBlocked").equals("")) { return true; } } + if (threateningCommanders.contains(attacker)) { + return true; + } } if (ComputerUtilCombat.lifeThatWouldRemain(ai, combat) < Math.min(4, ai.getLife()) @@ -408,7 +392,7 @@ public class ComputerUtilCombat { return false; } - final List deadlyCommanders = ComputerUtilCombat.getLifeThreateningCommanders(ai, combat); + final List threateningCommanders = ComputerUtilCombat.getLifeThreateningCommanders(ai, combat); // check for creatures that must be blocked final List attackers = combat.getAttackersOf(ai); @@ -418,10 +402,13 @@ public class ComputerUtilCombat { final List blockers = combat.getBlockers(attacker); if (blockers.size() == 0) { - if (!attacker.getSVar("MustBeBlocked").equals("") || deadlyCommanders.contains(attacker)) { + if (!attacker.getSVar("MustBeBlocked").equals("")) { return true; } } + if(threateningCommanders.contains(attacker)) { + return true; + } } if (ComputerUtilCombat.lifeThatWouldRemain(ai, combat) < 1 && !ai.cantLoseForZeroOrLessLife()) {