* Fixed that attacker has not always to assign all damage to multiple blockers. Improved AI behaviour of assigning damage to multiple blockers. Tries to kill blocker if possible now.

This commit is contained in:
LevelX2 2014-08-18 00:46:45 +02:00
parent 06caf2179d
commit d02f272bca
7 changed files with 82 additions and 13 deletions

View file

@ -304,12 +304,16 @@ public class CombatGroup implements Serializable, Copyable<CombatGroup> {
}
if (damage > 0 && hasTrample(attacker)) {
defenderDamage(attacker, damage, game);
} else {
// Assign the damge left to first blocker
int alreadyAssigned = assigned.get(blockerOrder.get(0));
assigned.replace(blockerOrder.get(0), damage + alreadyAssigned);
}
}
for (UUID blockerId: blockerOrder) {
Integer power = blockerPower.get(blockerId);
if (power != null) {
attacker.markDamage(power.intValue(), blockerId, game, true, true);
attacker.markDamage(power, blockerId, game, true, true);
}
}
for (Map.Entry<UUID, Integer> entry : assigned.entrySet()) {
@ -448,7 +452,7 @@ public class CombatGroup implements Serializable, Copyable<CombatGroup> {
for (UUID blockerId: blockerList) {
blockerPerms.add(game.getPermanent(blockerId));
}
UUID blockerId = player.chooseBlockerOrder(blockerPerms, game);
UUID blockerId = player.chooseBlockerOrder(blockerPerms, this, blockerOrder, game);
blockerOrder.add(blockerId);
blockerList.remove(blockerId);
}

View file

@ -59,6 +59,7 @@ import mage.util.Copyable;
import java.io.Serializable;
import java.util.*;
import mage.game.combat.CombatGroup;
/**
*
@ -312,7 +313,15 @@ public interface Player extends MageItem, Copyable<Player> {
void selectAttackers(Game game, UUID attackingPlayerId);
void selectBlockers(Game game, UUID defendingPlayerId);
UUID chooseAttackerOrder(List<Permanent> attacker, Game game);
UUID chooseBlockerOrder(List<Permanent> blockers, Game game);
/**
* Choose the order in which blockers get damage assigned to
* @param blockers list of blockers where to choose the next one from
* @param combatGroup the concerning combat group
* @param blockerOrder the already set order of blockers
* @param game
* @return blocker next to add to the blocker order
*/
UUID chooseBlockerOrder(List<Permanent> blockers, CombatGroup combatGroup, List<UUID> blockerOrder, Game game);
void assignDamage(int damage, List<UUID> targets, String singleTargetName, UUID sourceId, Game game);
int getAmount(int min, int max, String message, Game game);
void sideboard(Match match, Deck deck);