From 7d27c06329c03d004463fab866c2dba53d922427 Mon Sep 17 00:00:00 2001 From: BetaSteward Date: Mon, 17 May 2010 03:19:31 +0000 Subject: [PATCH] changes to support multiplayer --- .../src/mage/player/ai/ComputerPlayer.java | 37 +++++++------------ .../player/ai/simulators/ActionSimulator.java | 6 +-- 2 files changed, 16 insertions(+), 27 deletions(-) diff --git a/Mage.Player.AI/src/mage/player/ai/ComputerPlayer.java b/Mage.Player.AI/src/mage/player/ai/ComputerPlayer.java index 43fab32467..01d01dcf08 100644 --- a/Mage.Player.AI/src/mage/player/ai/ComputerPlayer.java +++ b/Mage.Player.AI/src/mage/player/ai/ComputerPlayer.java @@ -44,6 +44,7 @@ import java.util.UUID; import java.util.logging.Logger; import mage.Constants.CardType; import mage.Constants.Outcome; +import mage.Constants.RangeOfInfluence; import mage.Constants.Zone; import mage.Mana; import mage.abilities.ActivatedAbility; @@ -72,12 +73,10 @@ import mage.cards.Card; import mage.cards.Cards; import mage.cards.decks.Deck; import mage.choices.Choice; -import mage.filter.common.FilterCreatureForAttack; import mage.filter.common.FilterCreatureForCombat; import mage.filter.common.FilterLandCard; import mage.filter.common.FilterNonlandCard; import mage.game.Game; -import mage.game.GameState; import mage.game.combat.CombatGroup; import mage.game.permanent.Permanent; import mage.players.Player; @@ -94,7 +93,7 @@ import mage.util.TreeNode; /** * - * only suitable for two player games + * suitable for two player games and some multiplayer games * * @author BetaSteward_at_googlemail.com */ @@ -107,8 +106,8 @@ public class ComputerPlayer extends PlayerImpl implements Player { private transient List playableInstant = new ArrayList(); private transient List playableAbilities = new ArrayList(); - public ComputerPlayer(String name, Deck deck) { - super(name, deck); + public ComputerPlayer(String name, Deck deck, RangeOfInfluence range) { + super(name, deck, range); human = false; } @@ -126,7 +125,7 @@ public class ComputerPlayer extends PlayerImpl implements Player { @Override public boolean chooseTarget(Outcome outcome, Target target, Game game) { logger.fine("chooseTarget: " + outcome.toString() + ":" + target.toString()); - UUID opponentId = game.getOpponents(playerId).get(0); + UUID opponentId = game.getOpponents(playerId).iterator().next(); if (target instanceof TargetPlayer) { if (outcome.isGood()) { if (target.canTarget(playerId, game)) { @@ -190,7 +189,7 @@ public class ComputerPlayer extends PlayerImpl implements Player { @Override public void priority(Game game) { logger.fine("priority"); - UUID opponentId = game.getOpponents(playerId).get(0); + UUID opponentId = game.getOpponents(playerId).iterator().next(); if (game.getActivePlayerId().equals(playerId)) { if (game.isMainPhase() && game.getStack().isEmpty()) { playLand(game); @@ -339,7 +338,7 @@ public class ComputerPlayer extends PlayerImpl implements Player { } } } - for (Permanent permanent: game.getBattlefield().getActivePermanents(playerId)) { + for (Permanent permanent: game.getBattlefield().getAllActivePermanents(playerId)) { for (ActivatedAbility ability: permanent.getAbilities().getActivatedAbilities(Zone.BATTLEFIELD)) { if (!(ability instanceof ManaAbility) && ability.canActivate(playerId, game)) { ManaOptions abilityOptions = ability.getManaCosts().getOptions(); @@ -515,7 +514,7 @@ public class ComputerPlayer extends PlayerImpl implements Player { @Override public void selectAttackers(Game game) { logger.fine("selectAttackers"); - UUID opponentId = game.getOpponents(playerId).get(0); + UUID opponentId = game.getCombat().getDefenders().iterator().next(); Attackers attackers = getPotentialAttackers(game); List blockers = getOpponentBlockers(opponentId, game); List actualAttackers = new ArrayList(); @@ -588,7 +587,7 @@ public class ComputerPlayer extends PlayerImpl implements Player { protected List getAvailableManaProducers(Game game) { logger.fine("getAvailableManaProducers"); List result = new ArrayList(); - for (Permanent permanent: game.getBattlefield().getActivePermanents(playerId)) { + for (Permanent permanent: game.getBattlefield().getAllActivePermanents(playerId)) { for (ManaAbility ability: permanent.getAbilities().getManaAbilities(Zone.BATTLEFIELD)) { if (ability.canActivate(playerId, game)) { result.add(permanent); @@ -605,7 +604,7 @@ public class ComputerPlayer extends PlayerImpl implements Player { List creatures = super.getAvailableAttackers(game); for (Permanent creature: creatures) { int potential = combatPotential(creature, game); - if (potential > 0) { + if (potential > 0 && creature.getPower().getValue() > 0) { List l = attackers.get(potential); if (l == null) attackers.put(potential, l = new ArrayList()); @@ -631,16 +630,14 @@ public class ComputerPlayer extends PlayerImpl implements Player { protected List getAvailableBlockers(Game game) { logger.fine("getAvailableBlockers"); FilterCreatureForCombat blockFilter = new FilterCreatureForCombat(); - blockFilter.getControllerId().add(playerId); - List blockers = game.getBattlefield().getActivePermanents(blockFilter); + List blockers = game.getBattlefield().getAllActivePermanents(blockFilter, playerId); return blockers; } protected List getOpponentBlockers(UUID opponentId, Game game) { logger.fine("getOpponentBlockers"); FilterCreatureForCombat blockFilter = new FilterCreatureForCombat(); - blockFilter.getControllerId().add(opponentId); - List blockers = game.getBattlefield().getActivePermanents(blockFilter); + List blockers = game.getBattlefield().getAllActivePermanents(blockFilter, opponentId); return blockers; } @@ -743,15 +740,7 @@ public class ComputerPlayer extends PlayerImpl implements Player { } protected List threats(UUID playerId, TargetPermanent target, Game game) { - List threats = game.getBattlefield().getActivePermanents(target.getFilter()); - Iterator it = threats.iterator(); - while(it.hasNext()) { - Permanent permanent = it.next(); - if (!permanent.getControllerId().equals(playerId)) { - it.remove(); - } - } - + List threats = game.getBattlefield().getAllActivePermanents(target.getFilter(), playerId); Collections.sort(threats, new PermanentComparator(game)); return threats; } diff --git a/Mage.Player.AI/src/mage/player/ai/simulators/ActionSimulator.java b/Mage.Player.AI/src/mage/player/ai/simulators/ActionSimulator.java index 10c283e204..e4bd1c231d 100644 --- a/Mage.Player.AI/src/mage/player/ai/simulators/ActionSimulator.java +++ b/Mage.Player.AI/src/mage/player/ai/simulators/ActionSimulator.java @@ -60,7 +60,7 @@ public class ActionSimulator { } public int evaluateState() { - Player opponent = game.getPlayer(game.getOpponents(player.getId()).get(0)); + Player opponent = game.getPlayer(game.getOpponents(player.getId()).iterator().next()); if (game.isGameOver()) { if (player.hasLost() || opponent.hasWon()) return Integer.MIN_VALUE; @@ -70,10 +70,10 @@ public class ActionSimulator { int value = player.getLife(); value -= opponent.getLife(); PermanentEvaluator evaluator = new PermanentEvaluator(); - for (Permanent permanent: game.getBattlefield().getActivePermanents(player.getId())) { + for (Permanent permanent: game.getBattlefield().getAllActivePermanents(player.getId())) { value += evaluator.evaluate(permanent, game); } - for (Permanent permanent: game.getBattlefield().getActivePermanents(player.getId())) { + for (Permanent permanent: game.getBattlefield().getAllActivePermanents(player.getId())) { value -= evaluator.evaluate(permanent, game); } value += player.getHand().size();