From a24dc019b377138b917ad21202ed1e7431f04a52 Mon Sep 17 00:00:00 2001 From: Sloth Date: Sat, 5 Nov 2011 14:31:31 +0000 Subject: [PATCH] - Improved the Attack AI deciding to assault (especially with poison involved). --- src/main/java/forge/CombatUtil.java | 4 ++-- src/main/java/forge/ComputerUtilAttack.java | 21 +++++++++++++++------ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/main/java/forge/CombatUtil.java b/src/main/java/forge/CombatUtil.java index 9cd19987ad1..7ba0b67359a 100644 --- a/src/main/java/forge/CombatUtil.java +++ b/src/main/java/forge/CombatUtil.java @@ -868,7 +868,7 @@ public class CombatUtil { * a {@link forge.Player} object. * @return a int. */ - private static int sumDamageIfUnblocked(final CardList attackers, final Player attacked) { + public static int sumDamageIfUnblocked(final CardList attackers, final Player attacked) { int sum = 0; for (Card attacker : attackers) { sum += damageIfUnblocked(attacker, attacked, null); @@ -888,7 +888,7 @@ public class CombatUtil { * a {@link forge.Player} object. * @return a int. */ - private static int sumPoisonIfUnblocked(final CardList attackers, final Player attacked) { + public static int sumPoisonIfUnblocked(final CardList attackers, final Player attacked) { int sum = 0; for (Card attacker : attackers) { sum += poisonIfUnblocked(attacker, attacked, null); diff --git a/src/main/java/forge/ComputerUtilAttack.java b/src/main/java/forge/ComputerUtilAttack.java index fe27ed88cd5..785ecc732b4 100644 --- a/src/main/java/forge/ComputerUtilAttack.java +++ b/src/main/java/forge/ComputerUtilAttack.java @@ -330,15 +330,24 @@ public class ComputerUtilAttack { } // I think this is right but the assault code may still be a little off - CardListUtil.sortAttackLowFirst(attackers); + CardListUtil.sortAttack(attackers); - int totalAttack = 0; + CardList remainingAttackers = new CardList(attackers.toArray()); // presumes the Human will block - for (int i = 0; i < (attackers.size() - blockers.size()); i++) { - totalAttack += getAttack(attackers.get(i)); + for (int i = 0; i < blockers.size(); i++) { + remainingAttackers.remove(attackers.get(i)); + } + + if(CombatUtil.sumDamageIfUnblocked(remainingAttackers, AllZone.getHumanPlayer()) > AllZone.getHumanPlayer().getLife() + && AllZone.getHumanPlayer().canLoseLife()) { + return true; + } + + if(CombatUtil.sumPoisonIfUnblocked(remainingAttackers, AllZone.getHumanPlayer()) >= 10 - AllZone.getHumanPlayer().getPoisonCounters()) { + return true; } - return blockerLife <= totalAttack; + return false; } // doAssault() /** @@ -643,7 +652,7 @@ public class ComputerUtilAttack { for (int i = 0; i < attackersLeft.size(); i++) { if (CombatUtil.canAttack(attackersLeft.get(i), combat)) { combat.addAttacker(attackersLeft.get(i)); - } + } } } else { System.out.println("Normal attack");