From 517a0cae26184fb5ee55b9aaf4597828a41c32c6 Mon Sep 17 00:00:00 2001 From: BetaSteward Date: Tue, 25 Oct 2011 15:17:42 -0400 Subject: [PATCH] optimizations + some fixes - mostly for monte carlo simulations --- .../src/mage/player/ai/ComputerPlayer6.java | 25 +++--- .../src/mage/player/ai/ComputerPlayer7.java | 14 ++-- .../src/mage/player/ai/SimulatedPlayer2.java | 21 ++--- .../java/mage/player/ai/ComputerPlayer.java | 39 ++++----- .../src/mage/player/ai/ComputerPlayer2.java | 38 ++++----- .../src/mage/player/ai/ComputerPlayer3.java | 18 ++--- .../src/mage/player/ai/SimulatedPlayer.java | 22 ++---- Mage.Server/plugins/mage-player-ai-ma.jar | Bin 44225 -> 43780 bytes Mage.Server/plugins/mage-player-ai.jar | Bin 53335 -> 53319 bytes Mage.Server/plugins/mage-player-aiminimax.jar | Bin 40237 -> 39808 bytes .../java/mage/server/TableController.java | 3 +- .../src/mage/sets/eventide/CascadeBluffs.java | 6 +- .../src/mage/sets/eventide/FetidHeath.java | 6 +- .../src/mage/sets/eventide/FloodedGrove.java | 6 +- .../src/mage/sets/eventide/RuggedPrairie.java | 6 +- .../src/mage/sets/eventide/TwilightMire.java | 6 +- Mage/src/mage/abilities/Abilities.java | 18 +++++ Mage/src/mage/abilities/AbilitiesImpl.java | 35 ++++++++- Mage/src/mage/abilities/AbilityImpl.java | 7 ++ .../abilities/effects/ContinuousEffects.java | 74 ++++++------------ .../abilities/effects/common/PassEffect.java | 3 + .../abilities/keyword/SplitSecondAbility.java | 2 +- Mage/src/mage/abilities/mana/ManaOptions.java | 54 +++++++++++++ Mage/src/mage/cards/CardsImpl.java | 7 +- Mage/src/mage/game/Game.java | 1 + Mage/src/mage/game/GameImpl.java | 55 +++++++++---- Mage/src/mage/game/GameOptions.java | 4 +- Mage/src/mage/game/GameState.java | 13 ++- .../mage/game/permanent/PermanentCard.java | 32 ++++---- Mage/src/mage/players/Player.java | 6 +- Mage/src/mage/players/PlayerImpl.java | 53 ++++++++++--- 31 files changed, 347 insertions(+), 227 deletions(-) diff --git a/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/ComputerPlayer6.java b/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/ComputerPlayer6.java index 51209bf93b6..d7c923a9417 100644 --- a/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/ComputerPlayer6.java +++ b/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/ComputerPlayer6.java @@ -43,7 +43,6 @@ import mage.abilities.effects.SearchEffect; import mage.cards.Card; import mage.cards.Cards; import mage.choices.Choice; -import mage.filter.FilterAbility; import mage.game.Game; import mage.game.combat.Combat; import mage.game.combat.CombatGroup; @@ -218,7 +217,7 @@ public class ComputerPlayer6 extends ComputerPlayer implements logger.info("simulating actions"); //int bestScore = addActionsTimed(new FilterAbility()); currentScore = GameStateEvaluator2.evaluate(playerId, game); - addActionsTimed(new FilterAbility()); + addActionsTimed(); if (root.children.size() > 0) { root = root.children.get(0); //GameStateEvaluator2.evaluate(playerId, root.getGame()); @@ -268,7 +267,7 @@ public class ComputerPlayer6 extends ComputerPlayer implements return false; } - protected int minimaxAB(SimulationNode2 node, FilterAbility filter, int depth, int alpha, int beta) { + protected int minimaxAB(SimulationNode2 node, int depth, int alpha, int beta) { UUID currentPlayerId = node.getGame().getPlayerList().get(); SimulationNode2 bestChild = null; for (SimulationNode2 child: node.getChildren()) { @@ -281,7 +280,7 @@ public class ComputerPlayer6 extends ComputerPlayer implements //logger.info("simulating -- reached end-state, count=" + SimulationNode2.nodeCount); break; } - int val = addActions(child, filter, depth-1, alpha, beta); + int val = addActions(child, depth-1, alpha, beta); if (!currentPlayerId.equals(playerId)) { if (val < beta) { beta = val; @@ -364,12 +363,12 @@ public class ComputerPlayer6 extends ComputerPlayer implements game.getPlayerList().setCurrent(game.getActivePlayerId()); } - protected Integer addActionsTimed(final FilterAbility filter) { + protected Integer addActionsTimed() { FutureTask task = new FutureTask(new Callable() { @Override public Integer call() throws Exception { - return addActions(root, filter, maxDepth, Integer.MIN_VALUE, Integer.MAX_VALUE); + return addActions(root, maxDepth, Integer.MIN_VALUE, Integer.MAX_VALUE); } }); pool.execute(task); @@ -392,7 +391,7 @@ public class ComputerPlayer6 extends ComputerPlayer implements return 0; } - protected int addActions(SimulationNode2 node, FilterAbility filter, int depth, int alpha, int beta) { + protected int addActions(SimulationNode2 node, int depth, int alpha, int beta) { logger.debug("addActions: " + depth + ", alpha=" + alpha + ", beta=" + beta); Game game = node.getGame(); int val; @@ -411,7 +410,7 @@ public class ComputerPlayer6 extends ComputerPlayer implements } else if (node.getChildren().size() > 0) { logger.debug("simulating -- somthing added children:" + node.getChildren().size()); - val = minimaxAB(node, filter, depth-1, alpha, beta); + val = minimaxAB(node, depth-1, alpha, beta); return val; } else { @@ -431,10 +430,10 @@ public class ComputerPlayer6 extends ComputerPlayer implements } else if (node.getChildren().size() > 0) { //declared attackers or blockers or triggered abilities logger.debug("simulating -- attack/block/trigger added children:" + node.getChildren().size()); - val = minimaxAB(node, filter, depth-1, alpha, beta); + val = minimaxAB(node, depth-1, alpha, beta); } else { - val = simulatePriority(node, game, filter, depth, alpha, beta); + val = simulatePriority(node, game, depth, alpha, beta); } } @@ -443,7 +442,7 @@ public class ComputerPlayer6 extends ComputerPlayer implements } - protected int simulatePriority(SimulationNode2 node, Game game, FilterAbility filter, int depth, int alpha, int beta) { + protected int simulatePriority(SimulationNode2 node, Game game, int depth, int alpha, int beta) { if (Thread.interrupted()) { Thread.currentThread().interrupt(); logger.info("interrupted"); @@ -453,7 +452,7 @@ public class ComputerPlayer6 extends ComputerPlayer implements SimulatedPlayer2 currentPlayer = (SimulatedPlayer2) game.getPlayer(game.getPlayerList().get()); //logger.info("simulating -- player " + currentPlayer.getName()); SimulationNode2 bestNode = null; - List allActions = currentPlayer.simulatePriority(game, filter); + List allActions = currentPlayer.simulatePriority(game); logger.debug("simulating -- adding " + allActions.size() + " children:" + allActions); for (Ability action: allActions) { if (Thread.interrupted()) { @@ -477,7 +476,7 @@ public class ComputerPlayer6 extends ComputerPlayer implements if (depth == 20) { logger.info("*** Action *** " + action.toString()); } - int val = addActions(newNode, filter, depth-1, alpha, beta); + int val = addActions(newNode, depth-1, alpha, beta); if (depth == 20) { logger.info("*** Value *** " + val); } diff --git a/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/ComputerPlayer7.java b/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/ComputerPlayer7.java index dd520e39744..8d44881aca9 100644 --- a/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/ComputerPlayer7.java +++ b/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/ComputerPlayer7.java @@ -151,7 +151,7 @@ public class ComputerPlayer7 extends ComputerPlayer6 implements Player { root = new SimulationNode2(null, sim, maxDepth, playerId); logger.debug("simulating pre combat actions -----------------------------------------------------------------------------------------"); - addActionsTimed(new FilterAbility()); + addActionsTimed(); if (root.children.size() > 0) { root = root.children.get(0); int bestScore = root.getScore(); @@ -171,7 +171,7 @@ public class ComputerPlayer7 extends ComputerPlayer6 implements Player { root = new SimulationNode2(null, sim, maxDepth, playerId); logger.debug("simulating post combat actions ----------------------------------------------------------------------------------------"); - addActionsTimed(new FilterAbility()); + addActionsTimed(); if (root.children.size() > 0) { root = root.children.get(0); int bestScore = root.getScore(); @@ -184,7 +184,7 @@ public class ComputerPlayer7 extends ComputerPlayer6 implements Player { } @Override - protected int addActions(SimulationNode2 node, FilterAbility filter, int depth, int alpha, int beta) { + protected int addActions(SimulationNode2 node, int depth, int alpha, int beta) { boolean stepFinished = false; int val; Game game = node.getGame(); @@ -199,7 +199,7 @@ public class ComputerPlayer7 extends ComputerPlayer6 implements Player { } else if (node.getChildren().size() > 0) { logger.debug("simulating -- somthing added children:" + node.getChildren().size()); - val = minimaxAB(node, filter, depth-1, alpha, beta); + val = minimaxAB(node, depth-1, alpha, beta); } else { if (logger.isDebugEnabled()) @@ -248,10 +248,10 @@ public class ComputerPlayer7 extends ComputerPlayer6 implements Player { } else if (node.getChildren().size() > 0) { logger.debug("simulating -- trigger added children:" + node.getChildren().size()); - val = minimaxAB(node, filter, depth, alpha, beta); + val = minimaxAB(node, depth, alpha, beta); } else { - val = simulatePriority(node, game, filter, depth, alpha, beta); + val = simulatePriority(node, game, depth, alpha, beta); } } @@ -520,7 +520,7 @@ public class ComputerPlayer7 extends ComputerPlayer6 implements Player { game.getPhase().setStep(new PostCombatMainStep()); game.getStep().beginStep(game, playerId); game.getPlayers().resetPassed(); - return addActions(node, new FilterAbility(), depth, alpha, beta); + return addActions(node, depth, alpha, beta); } return simulateCounterAttack(game, node, depth, alpha, beta); } diff --git a/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/SimulatedPlayer2.java b/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/SimulatedPlayer2.java index 0fe76573852..cefc7288dc7 100644 --- a/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/SimulatedPlayer2.java +++ b/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/SimulatedPlayer2.java @@ -28,7 +28,6 @@ package mage.player.ai; -import java.io.File; import java.util.*; import java.util.concurrent.ConcurrentLinkedQueue; import mage.abilities.Ability; @@ -38,18 +37,14 @@ import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.ManaCost; import mage.abilities.costs.mana.ManaCosts; import mage.abilities.costs.mana.VariableManaCost; -import mage.abilities.mana.ManaOptions; import mage.cards.Card; import mage.choices.Choice; -import mage.filter.FilterAbility; import mage.game.Game; import mage.game.combat.Combat; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.game.stack.StackAbility; -import mage.sets.innistrad.UnholyFiend; import mage.target.Target; -import mage.util.Logging; import org.apache.log4j.Logger; /** @@ -60,7 +55,6 @@ public class SimulatedPlayer2 extends ComputerPlayer { private final static transient Logger logger = Logger.getLogger(SimulatedPlayer2.class); private boolean isSimulatedPlayer; - private FilterAbility filter; private transient ConcurrentLinkedQueue allActions; private static PassAbility pass = new PassAbility(); @@ -76,8 +70,6 @@ public class SimulatedPlayer2 extends ComputerPlayer { public SimulatedPlayer2(final SimulatedPlayer2 player) { super(player); this.isSimulatedPlayer = player.isSimulatedPlayer; - if (player.filter != null) - this.filter = player.filter.copy(); } @Override @@ -85,10 +77,9 @@ public class SimulatedPlayer2 extends ComputerPlayer { return new SimulatedPlayer2(this); } - public List simulatePriority(Game game, FilterAbility filter) { + public List simulatePriority(Game game) { allActions = new ConcurrentLinkedQueue(); Game sim = game.copy(); - this.filter = filter; simulateOptions(sim, pass); @@ -99,13 +90,11 @@ public class SimulatedPlayer2 extends ComputerPlayer { protected void simulateOptions(Game game, Ability previousActions) { allActions.add(previousActions); - ManaOptions available = getManaAvailable(game); - available.addMana(manaPool.getMana()); - List playables = game.getPlayer(playerId).getPlayable(game, filter, available, isSimulatedPlayer); + List playables = game.getPlayer(playerId).getPlayable(game, isSimulatedPlayer); playables = filterAbilities(game, playables, suggested); for (Ability ability: playables) { List options = game.getPlayer(playerId).getPlayableOptions(ability, game); - if (options.size() == 0) { + if (options.isEmpty()) { if (ability.getManaCosts().getVariableCosts().size() > 0) { simulateVariableCosts(ability, game); } @@ -237,7 +226,7 @@ public class SimulatedPlayer2 extends ComputerPlayer { } protected void addBlocker(Game game, List blockers, Map engagements) { - if (blockers.size() == 0) + if (blockers.isEmpty()) return; int numGroups = game.getCombat().getGroups().size(); //try to block each attacker with each potential blocker @@ -260,7 +249,7 @@ public class SimulatedPlayer2 extends ComputerPlayer { public boolean triggerAbility(TriggeredAbility source, Game game) { Ability ability = source.copy(); List options = getPlayableOptions(ability, game); - if (options.size() == 0) { + if (options.isEmpty()) { logger.debug("simulating -- triggered ability:" + ability); game.getStack().push(new StackAbility(ability, playerId)); ability.activate(game, false); diff --git a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java index eea3de3612e..fa2d05990fd 100644 --- a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java @@ -235,8 +235,6 @@ public class ComputerPlayer> extends PlayerImpl i return true; } } - if (!target.isRequired()) - return false; return false; } if (target instanceof TargetDiscard || target instanceof TargetCardInHand) { @@ -266,8 +264,6 @@ public class ComputerPlayer> extends PlayerImpl i } } } - if (!target.isRequired()) - return false; return false; } if (target instanceof TargetControlledPermanent) { @@ -281,8 +277,6 @@ public class ComputerPlayer> extends PlayerImpl i return true; } } - if (!target.isRequired()) - return false; return false; } if (target instanceof TargetPermanent) { @@ -299,8 +293,6 @@ public class ComputerPlayer> extends PlayerImpl i return true; } } - if (!target.isRequired()) - return false; return false; } if (target instanceof TargetCreatureOrPlayer) { @@ -333,8 +325,6 @@ public class ComputerPlayer> extends PlayerImpl i return true; } } - if (!target.isRequired()) - return false; return false; } if (target instanceof TargetCardInGraveyard) { @@ -357,8 +347,6 @@ public class ComputerPlayer> extends PlayerImpl i target.addTarget(card.getId(), source, game); return true; } - if (!target.isRequired()) - return false; return false; } if (target instanceof TargetCardInYourGraveyard) { @@ -368,8 +356,6 @@ public class ComputerPlayer> extends PlayerImpl i target.addTarget(card.getId(), source, game); return true; } - if (!target.isRequired()) - return false; return false; } throw new IllegalStateException("Target wasn't handled. class:" + target.getClass().toString()); @@ -641,13 +627,14 @@ public class ComputerPlayer> extends PlayerImpl i log.debug("findPlayables: " + playableInstant.toString() + "---" + playableNonInstant.toString() + "---" + playableAbilities.toString() ); } - @Override - protected ManaOptions getManaAvailable(Game game) { - return super.getManaAvailable(game); - } +// @Override +// protected ManaOptions getManaAvailable(Game game) { +// return super.getManaAvailable(game); +// } @Override public boolean playMana(ManaCost unpaid, Game game) { +// log.info("paying for " + unpaid.getText()); ManaCost cost; List producers; if (unpaid instanceof ManaCosts) { @@ -657,10 +644,11 @@ public class ComputerPlayer> extends PlayerImpl i else { cost = unpaid; producers = this.getAvailableManaProducers(game); + producers.addAll(this.getAvailableManaProducersWithCost(game)); } for (Permanent perm: producers) { // pay all colored costs first - for (ManaAbility ability: perm.getAbilities().getManaAbilities(Zone.BATTLEFIELD)) { + for (ManaAbility ability: perm.getAbilities().getAvailableManaAbilities(Zone.BATTLEFIELD, game)) { if (cost instanceof ColoredManaCost) { if (cost.testPay(ability.getNetMana(game))) { if (activateAbility(ability, game)) @@ -669,7 +657,7 @@ public class ComputerPlayer> extends PlayerImpl i } } // then pay hybrid - for (ManaAbility ability: perm.getAbilities().getManaAbilities(Zone.BATTLEFIELD)) { + for (ManaAbility ability: perm.getAbilities().getAvailableManaAbilities(Zone.BATTLEFIELD, game)) { if (cost instanceof HybridManaCost) { if (cost.testPay(ability.getNetMana(game))) { if (activateAbility(ability, game)) @@ -678,7 +666,7 @@ public class ComputerPlayer> extends PlayerImpl i } } // then pay mono hybrid - for (ManaAbility ability: perm.getAbilities().getManaAbilities(Zone.BATTLEFIELD)) { + for (ManaAbility ability: perm.getAbilities().getAvailableManaAbilities(Zone.BATTLEFIELD, game)) { if (cost instanceof MonoHybridManaCost) { if (cost.testPay(ability.getNetMana(game))) { if (activateAbility(ability, game)) @@ -687,7 +675,7 @@ public class ComputerPlayer> extends PlayerImpl i } } // finally pay generic - for (ManaAbility ability: perm.getAbilities().getManaAbilities(Zone.BATTLEFIELD)) { + for (ManaAbility ability: perm.getAbilities().getAvailableManaAbilities(Zone.BATTLEFIELD, game)) { if (cost instanceof GenericManaCost) { if (cost.testPay(ability.getNetMana(game))) { if (activateAbility(ability, game)) @@ -713,11 +701,12 @@ public class ComputerPlayer> extends PlayerImpl i */ private List getSortedProducers(ManaCosts unpaid, Game game) { List unsorted = this.getAvailableManaProducers(game); + unsorted.addAll(this.getAvailableManaProducersWithCost(game)); Map scored = new HashMap(); for (Permanent permanent: unsorted) { int score = 0; for (ManaCost cost: unpaid) { - for (ManaAbility ability: permanent.getAbilities().getManaAbilities(Zone.BATTLEFIELD)) { + for (ManaAbility ability: permanent.getAbilities().getAvailableManaAbilities(Zone.BATTLEFIELD, game)) { if (cost.testPay(ability.getNetMana(game))) { score++; break; @@ -725,7 +714,7 @@ public class ComputerPlayer> extends PlayerImpl i } } if (score > 0) { // score mana producers that produce other mana types and have other uses higher - score += permanent.getAbilities().getManaAbilities(Zone.BATTLEFIELD).size(); + score += permanent.getAbilities().getAvailableManaAbilities(Zone.BATTLEFIELD, game).size(); score += permanent.getAbilities().getActivatedAbilities(Zone.BATTLEFIELD).size(); if (!permanent.getCardType().contains(CardType.LAND)) score+=2; @@ -758,7 +747,7 @@ public class ComputerPlayer> extends PlayerImpl i log.debug("playXMana"); //put everything into X for (Permanent perm: this.getAvailableManaProducers(game)) { - for (ManaAbility ability: perm.getAbilities().getManaAbilities(Zone.BATTLEFIELD)) { + for (ManaAbility ability: perm.getAbilities().getAvailableManaAbilities(Zone.BATTLEFIELD, game)) { activateAbility(ability, game); } } diff --git a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer2.java b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer2.java index d1bfa4e69ed..080567c5777 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer2.java +++ b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer2.java @@ -93,19 +93,19 @@ import org.apache.log4j.Logger; public class ComputerPlayer2 extends ComputerPlayer implements Player { private static final transient Logger logger = Logger.getLogger(ComputerPlayer2.class); - private static final ExecutorService pool = Executors.newFixedThreadPool(1); + private static final transient ExecutorService pool = Executors.newFixedThreadPool(1); protected int maxDepth; protected int maxNodes; protected int maxThink; protected int nodeCount = 0; protected long thinkTime = 0; - protected LinkedList actions = new LinkedList(); - protected List targets = new ArrayList(); - protected List choices = new ArrayList(); - protected Combat combat; + protected transient LinkedList actions = new LinkedList(); + protected transient List targets = new ArrayList(); + protected transient List choices = new ArrayList(); + protected transient Combat combat; protected int currentScore; - protected SimulationNode root; + protected transient SimulationNode root; public ComputerPlayer2(String name, RangeOfInfluence range, int skill) { super(name, range); @@ -192,9 +192,9 @@ public class ComputerPlayer2 extends ComputerPlayer implements root = new SimulationNode(null, sim, playerId); logger.debug("simulating actions"); if (!isTestMode) - addActionsTimed(new FilterAbility()); + addActionsTimed(); else - addActions(root, new FilterAbility(), Integer.MIN_VALUE, Integer.MAX_VALUE); + addActions(root, Integer.MIN_VALUE, Integer.MAX_VALUE); logger.info(name + " simulated " + nodeCount + " nodes in " + thinkTime/1000000000.0 + "s - average " + nodeCount/(thinkTime/1000000000.0) + " nodes/s"); if (root.children.size() > 0) { root = root.children.get(0); @@ -230,7 +230,7 @@ public class ComputerPlayer2 extends ComputerPlayer implements return false; } - protected int minimaxAB(SimulationNode node, FilterAbility filter, int alpha, int beta) { + protected int minimaxAB(SimulationNode node, int alpha, int beta) { UUID currentPlayerId = node.getGame().getPlayerList().get(); SimulationNode bestChild = null; boolean isSimulatedPlayer = currentPlayerId.equals(playerId); @@ -243,7 +243,7 @@ public class ComputerPlayer2 extends ComputerPlayer implements // logger.debug(indent(node.depth) + "simulating -- reached end-state"); // break; // } - int val = addActions(child, filter, alpha, beta); + int val = addActions(child, alpha, beta); if (!isSimulatedPlayer) { if (val < beta) { beta = val; @@ -318,12 +318,12 @@ public class ComputerPlayer2 extends ComputerPlayer implements game.getPlayerList().setCurrent(game.getActivePlayerId()); } - protected void addActionsTimed(final FilterAbility filter) { + protected void addActionsTimed() { FutureTask task = new FutureTask(new Callable() { @Override public Integer call() throws Exception { - return addActions(root, filter, Integer.MIN_VALUE, Integer.MAX_VALUE); + return addActions(root, Integer.MIN_VALUE, Integer.MAX_VALUE); } }); long startTime = System.nanoTime(); @@ -358,7 +358,7 @@ public class ComputerPlayer2 extends ComputerPlayer implements } } - protected int addActions(SimulationNode node, FilterAbility filter, int alpha, int beta) { + protected int addActions(SimulationNode node, int alpha, int beta) { Game game = node.getGame(); if (Thread.interrupted()) { Thread.currentThread().interrupt(); @@ -372,7 +372,7 @@ public class ComputerPlayer2 extends ComputerPlayer implements } else if (node.getChildren().size() > 0) { logger.debug(indent(node.depth) + "simulating -- somthing added children:" + node.getChildren().size()); - val = minimaxAB(node, filter, alpha, beta); + val = minimaxAB(node, alpha, beta); } else { if (logger.isDebugEnabled()) @@ -399,10 +399,10 @@ public class ComputerPlayer2 extends ComputerPlayer implements else if (node.getChildren().size() > 0) { //declared attackers or blockers or triggered abilities logger.debug(indent(node.depth) + "simulating -- attack/block/trigger added children:" + node.getChildren().size()); - val = minimaxAB(node, filter, alpha, beta); + val = minimaxAB(node, alpha, beta); } else { - val = simulatePriority(node, game, filter, alpha, beta); + val = simulatePriority(node, game, alpha, beta); } } @@ -412,7 +412,7 @@ public class ComputerPlayer2 extends ComputerPlayer implements } - protected int simulatePriority(SimulationNode node, Game game, FilterAbility filter, int alpha, int beta) { + protected int simulatePriority(SimulationNode node, Game game, int alpha, int beta) { if (Thread.interrupted()) { Thread.currentThread().interrupt(); logger.debug(indent(node.depth) + "interrupted"); @@ -423,7 +423,7 @@ public class ComputerPlayer2 extends ComputerPlayer implements boolean isSimulatedPlayer = currentPlayer.getId().equals(playerId); logger.debug(indent(node.depth) + "simulating priority -- player " + currentPlayer.getName()); SimulationNode bestNode = null; - List allActions = currentPlayer.simulatePriority(game, filter); + List allActions = currentPlayer.simulatePriority(game); if (logger.isDebugEnabled()) logger.debug(indent(node.depth) + "simulating -- adding " + allActions.size() + " children:" + allActions); for (Ability action: allActions) { @@ -448,7 +448,7 @@ public class ComputerPlayer2 extends ComputerPlayer implements if (logger.isDebugEnabled()) logger.debug(indent(newNode.depth) + "simulating -- node #:" + SimulationNode.getCount() + " actions:" + action); sim.checkStateAndTriggered(); - int val = addActions(newNode, filter, alpha, beta); + int val = addActions(newNode, alpha, beta); if (!isSimulatedPlayer) { if (val < beta) { beta = val; diff --git a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer3.java b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer3.java index ad38ef95df3..f44232a1d8b 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer3.java +++ b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/ComputerPlayer3.java @@ -161,9 +161,9 @@ public class ComputerPlayer3 extends ComputerPlayer2 implements Player { logger.debug("simulating pre combat actions -----------------------------------------------------------------------------------------"); if (!isTestMode) - addActionsTimed(new FilterAbility()); + addActionsTimed(); else - addActions(root, new FilterAbility(), Integer.MIN_VALUE, Integer.MAX_VALUE); + addActions(root, Integer.MIN_VALUE, Integer.MAX_VALUE); logger.info(name + " simulated " + nodeCount + " nodes in " + thinkTime/1000000000.0 + "s - average " + nodeCount/(thinkTime/1000000000.0) + " nodes/s"); if (root.children.size() > 0) { root = root.children.get(0); @@ -185,9 +185,9 @@ public class ComputerPlayer3 extends ComputerPlayer2 implements Player { root = new SimulationNode(null, sim, playerId); logger.debug("simulating post combat actions ----------------------------------------------------------------------------------------"); if (!isTestMode) - addActionsTimed(new FilterAbility()); + addActionsTimed(); else - addActions(root, new FilterAbility(), Integer.MIN_VALUE, Integer.MAX_VALUE); + addActions(root, Integer.MIN_VALUE, Integer.MAX_VALUE); logger.info(name + " simulated " + nodeCount + " nodes in " + thinkTime/1000000000.0 + "s - average " + nodeCount/(thinkTime/1000000000.0) + " nodes/s"); if (root.children.size() > 0) { root = root.children.get(0); @@ -202,7 +202,7 @@ public class ComputerPlayer3 extends ComputerPlayer2 implements Player { } @Override - protected int addActions(SimulationNode node, FilterAbility filter, int alpha, int beta) { + protected int addActions(SimulationNode node, int alpha, int beta) { boolean stepFinished = false; int val; Game game = node.getGame(); @@ -217,7 +217,7 @@ public class ComputerPlayer3 extends ComputerPlayer2 implements Player { } else if (node.getChildren().size() > 0) { logger.debug(indent(node.depth) + "simulating -- somthing added children:" + node.getChildren().size()); - val = minimaxAB(node, filter, alpha, beta); + val = minimaxAB(node, alpha, beta); } else { if (logger.isDebugEnabled()) @@ -266,10 +266,10 @@ public class ComputerPlayer3 extends ComputerPlayer2 implements Player { } else if (node.getChildren().size() > 0) { logger.debug(indent(node.depth) + "simulating -- trigger added children:" + node.getChildren().size()); - val = minimaxAB(node, filter, alpha, beta); + val = minimaxAB(node, alpha, beta); } else { - val = simulatePriority(node, game, filter, alpha, beta); + val = simulatePriority(node, game, alpha, beta); } } @@ -535,7 +535,7 @@ public class ComputerPlayer3 extends ComputerPlayer2 implements Player { game.getPhase().setStep(new PostCombatMainStep()); game.getStep().beginStep(game, playerId); game.getPlayers().resetPassed(); - return addActions(node, new FilterAbility(), alpha, beta); + return addActions(node, alpha, beta); } return simulateCounterAttack(game, node, alpha, beta); } diff --git a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/SimulatedPlayer.java b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/SimulatedPlayer.java index 7dc1a557f53..e9bb049c604 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/SimulatedPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/SimulatedPlayer.java @@ -44,9 +44,7 @@ import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.costs.mana.ManaCost; import mage.abilities.costs.mana.ManaCosts; import mage.abilities.costs.mana.VariableManaCost; -import mage.abilities.mana.ManaOptions; import mage.choices.Choice; -import mage.filter.FilterAbility; import mage.game.Game; import mage.game.combat.Combat; import mage.game.events.GameEvent; @@ -63,7 +61,6 @@ public class SimulatedPlayer extends ComputerPlayer { private final static transient Logger logger = Logger.getLogger(SimulatedPlayer.class); private boolean isSimulatedPlayer; - private FilterAbility filter; private transient ConcurrentLinkedQueue allActions; private static PassAbility pass = new PassAbility(); protected int maxDepth; @@ -78,8 +75,6 @@ public class SimulatedPlayer extends ComputerPlayer { public SimulatedPlayer(final SimulatedPlayer player) { super(player); this.isSimulatedPlayer = player.isSimulatedPlayer; - if (player.filter != null) - this.filter = player.filter.copy(); } @Override @@ -87,10 +82,9 @@ public class SimulatedPlayer extends ComputerPlayer { return new SimulatedPlayer(this); } - public List simulatePriority(Game game, FilterAbility filter) { + public List simulatePriority(Game game) { allActions = new ConcurrentLinkedQueue(); Game sim = game.copy(); - this.filter = filter; simulateOptions(sim, pass); @@ -102,12 +96,10 @@ public class SimulatedPlayer extends ComputerPlayer { protected void simulateOptions(Game game, Ability previousActions) { allActions.add(previousActions); - ManaOptions available = getManaAvailable(game); - available.addMana(manaPool.getMana()); - List playables = game.getPlayer(playerId).getPlayable(game, filter, available, isSimulatedPlayer); + List playables = game.getPlayer(playerId).getPlayable(game, isSimulatedPlayer); for (Ability ability: playables) { List options = game.getPlayer(playerId).getPlayableOptions(ability, game); - if (options.size() == 0) { + if (options.isEmpty()) { if (ability.getManaCosts().getVariableCosts().size() > 0) { simulateVariableCosts(ability, game); } @@ -147,7 +139,7 @@ public class SimulatedPlayer extends ComputerPlayer { //add a generic mana cost for each amount possible protected void simulateVariableCosts(Ability ability, Game game) { - int numAvailable = getAvailableManaProducers(game).size(); + int numAvailable = getAvailableManaProducers(game).size() - ability.getManaCosts().convertedManaCost(); int start = 0; if (!(ability instanceof SpellAbility)) { //only use x=0 on spell abilities @@ -158,7 +150,7 @@ public class SimulatedPlayer extends ComputerPlayer { } for (int i = start; i < numAvailable; i++) { Ability newAbility = ability.copy(); - newAbility.addManaCost(new GenericManaCost(i)); + newAbility.addCost(new GenericManaCost(i)); allActions.add(newAbility); } } @@ -223,7 +215,7 @@ public class SimulatedPlayer extends ComputerPlayer { } protected void addBlocker(Game game, List blockers, Map engagements) { - if (blockers.size() == 0) + if (blockers.isEmpty()) return; int numGroups = game.getCombat().getGroups().size(); //try to block each attacker with each potential blocker @@ -247,7 +239,7 @@ public class SimulatedPlayer extends ComputerPlayer { public boolean triggerAbility(TriggeredAbility source, Game game) { Ability ability = source.copy(); List options = getPlayableOptions(ability, game); - if (options.size() == 0) { + if (options.isEmpty()) { if (logger.isDebugEnabled()) logger.debug("simulating -- triggered ability:" + ability); game.getStack().push(new StackAbility(ability, playerId)); diff --git a/Mage.Server/plugins/mage-player-ai-ma.jar b/Mage.Server/plugins/mage-player-ai-ma.jar index 0e4bd9abc17b6090391833a1c6684d3ed8bcf3d1..906117badc13bf66e2f5377ffc0ca103499f57f0 100644 GIT binary patch delta 29548 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 heEo51^N}@P8!~b-n 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

G`q|p|zMEw>CNq|1X&fI>>mqQc-#SY|(s42HK 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%0A#v5ZWc7y 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 delta 23350 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 We1;0o8w3Oz_%{;13bj3dr2hjlo_o~* diff --git a/Mage.Server/plugins/mage-player-aiminimax.jar b/Mage.Server/plugins/mage-player-aiminimax.jar index 5dfb2d61573d48548e8371b67433ebc5be265a9e..a88f33c3daeea0cd089a13aa0c417f33fec5fac0 100644 GIT binary patch delta 28357 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 o|F!bZjL!Z8j2(*LRXe^rX7?*IS* diff --git a/Mage.Server/src/main/java/mage/server/TableController.java b/Mage.Server/src/main/java/mage/server/TableController.java index 83408474ce3..43513551518 100644 --- a/Mage.Server/src/main/java/mage/server/TableController.java +++ b/Mage.Server/src/main/java/mage/server/TableController.java @@ -406,7 +406,8 @@ public class TableController { UUID choosingPlayerId = match.getChooser(); match.endGame(); table.endGame(); - GameManager.getInstance().saveGame(match.getGame().getId()); + if (!match.getGame().isSimulation()) + GameManager.getInstance().saveGame(match.getGame().getId()); GameManager.getInstance().removeGame(match.getGame().getId()); try { if (!match.isMatchOver()) { diff --git a/Mage.Sets/src/mage/sets/eventide/CascadeBluffs.java b/Mage.Sets/src/mage/sets/eventide/CascadeBluffs.java index f22c16cb00f..e95c4095eba 100644 --- a/Mage.Sets/src/mage/sets/eventide/CascadeBluffs.java +++ b/Mage.Sets/src/mage/sets/eventide/CascadeBluffs.java @@ -67,7 +67,7 @@ class CascadeBluffsFirstManaAbility extends BasicManaAbility extends List, Serializable { public Abilities getManaAbilities(Zone zone); /** + * Retrieves all {@link ManaAbility mana abilities} in the given {@link Zone} that can be used. + * + * @param zone The {@link Zone} to search for {@link ManaAbility mana abilities}. + * @return All {@link ManaAbility mana abilities} for the given {@link Zone} that can be used. + * + * @see mage.cards.CardImpl#getMana() + * @see mage.players.PlayerImpl#getManaAvailable(mage.game.Game) + * @see mage.players.PlayerImpl#getAvailableManaProducers(mage.game.Game) + */ + public Abilities getAvailableManaAbilities(Zone zone, Game game); + + /** * Retrieves all {@link StaticAbility static abilities} in the given {@link Zone}. * * @param zone The {@link Zone} to search for {@link StaticAbility} @@ -241,4 +257,6 @@ public interface Abilities extends List, Serializable { * @return */ public Abilities copy(); + + public Map getReplacementEffects(Zone zone); } diff --git a/Mage/src/mage/abilities/AbilitiesImpl.java b/Mage/src/mage/abilities/AbilitiesImpl.java index f05952d47db..0a674be8c97 100644 --- a/Mage/src/mage/abilities/AbilitiesImpl.java +++ b/Mage/src/mage/abilities/AbilitiesImpl.java @@ -29,14 +29,20 @@ package mage.abilities; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.UUID; +import mage.Constants.EffectType; import mage.Constants.Zone; import mage.abilities.common.ZoneChangeTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.ReplacementEffect; import mage.abilities.keyword.KickerAbility; import mage.abilities.keyword.ProtectionAbility; import mage.abilities.mana.ManaAbility; import mage.filter.FilterAbility; +import mage.game.Game; /** * @@ -103,6 +109,18 @@ public class AbilitiesImpl extends ArrayList implements Ab } @Override + public Abilities getAvailableManaAbilities(Zone zone, Game game) { + Abilities abilities = new AbilitiesImpl(); + for (T ability: this) { + if (ability instanceof ManaAbility && ability.getZone().match(zone)) { + if ((((ManaAbility)ability).canActivate(ability.getControllerId(), game))) + abilities.add((ManaAbility)ability); + } + } + return abilities; + } + + @Override public Abilities getEvasionAbilities() { Abilities abilities = new AbilitiesImpl(); for (T ability: this) { @@ -140,7 +158,22 @@ public class AbilitiesImpl extends ArrayList implements Ab } return zonedAbilities; } - + + @Override + public Map getReplacementEffects(Zone zone) { + Map effects = new HashMap(); + for (T ability: this) { + if (ability instanceof StaticAbility && ability.getZone().match(zone)) { + for (Effect effect: ability.getEffects()) { + if (effect.getEffectType() == EffectType.REPLACEMENT || effect.getEffectType() == EffectType.PREVENTION) { + effects.put((ReplacementEffect)effect, ability); + } + } + } + } + return effects; + } + @Override public Abilities getProtectionAbilities() { Abilities abilities = new AbilitiesImpl(); diff --git a/Mage/src/mage/abilities/AbilityImpl.java b/Mage/src/mage/abilities/AbilityImpl.java index 922e5a21d80..2a04e6aa0e8 100644 --- a/Mage/src/mage/abilities/AbilityImpl.java +++ b/Mage/src/mage/abilities/AbilityImpl.java @@ -46,6 +46,7 @@ import mage.abilities.effects.Effect; import mage.abilities.effects.Effects; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.PostResolveEffect; +import mage.abilities.mana.ManaAbility; import mage.choices.Choice; import mage.choices.Choices; import mage.game.Game; @@ -194,6 +195,12 @@ public abstract class AbilityImpl> implements Ability { } } + // this is a hack to prevent mana abilities with mana costs from causing endless loops - pay other costs first + if (this instanceof ManaAbility && !costs.pay(this, game, sourceId, controllerId, noMana)) { + logger.debug("activate mana ability failed - non mana costs"); + return false; + } + if (!useAlternativeCost(game)) { //20101001 - 601.2e game.getContinuousEffects().costModification(this, game); diff --git a/Mage/src/mage/abilities/effects/ContinuousEffects.java b/Mage/src/mage/abilities/effects/ContinuousEffects.java index 2fe0e8c6875..27ec0be04c8 100644 --- a/Mage/src/mage/abilities/effects/ContinuousEffects.java +++ b/Mage/src/mage/abilities/effects/ContinuousEffects.java @@ -209,8 +209,9 @@ public class ContinuousEffects implements Serializable { private List getLayeredEffects(Game game) { List layerEffects = new ArrayList(layeredEffects); for (Card card: game.getCards()) { - if (game.getZone(card.getId()) == Zone.HAND || game.getZone(card.getId()) == Zone.GRAVEYARD) { - for (Ability ability: card.getAbilities().getStaticAbilities(game.getZone(card.getId()))) { + Zone zone = game.getZone(card.getId()); + if (zone == Zone.HAND || zone == Zone.GRAVEYARD) { + for (Ability ability: card.getAbilities().getStaticAbilities(zone)) { for (Effect effect: ability.getEffects(game, EffectType.CONTINUOUS)) { layerEffects.add((ContinuousEffect) effect); abilityMap.put(effect.getId(), ability); @@ -291,62 +292,33 @@ public class ContinuousEffects implements Serializable { replaceEffects.add(planeswalkerRedirectionEffect); //get all applicable Replacement effects in each players hand and graveyard for (Card card: game.getCards()) { - if (game.getZone(card.getId()) == Zone.HAND || game.getZone(card.getId()) == Zone.GRAVEYARD) { - for (Ability ability: card.getAbilities().getStaticAbilities(game.getZone(card.getId()))) { - for (Effect effect: ability.getEffects(game, EffectType.REPLACEMENT)) { - ReplacementEffect rEffect = (ReplacementEffect) effect; - if (rEffect.applies(event, ability, game)) { - replaceEffects.add(rEffect); - abilityMap.put(rEffect.getId(), ability); - } - } - for (Effect effect: ability.getEffects(game, EffectType.PREVENTION)) { - ReplacementEffect rEffect = (ReplacementEffect) effect; - if (rEffect.applies(event, ability, game)) { - replaceEffects.add(rEffect); - abilityMap.put(rEffect.getId(), ability); - } - } - } + Zone zone = game.getZone(card.getId()); + if (zone == Zone.HAND || zone == Zone.GRAVEYARD) { + for (Entry entry: card.getAbilities().getReplacementEffects(zone).entrySet()) { + if (entry.getKey().applies(event, entry.getValue(), game)) { + replaceEffects.add(entry.getKey()); + abilityMap.put(entry.getKey().getId(), entry.getValue()); + } + } } } //get all applicable Replacement effects on the battlefield for (Permanent permanent: game.getBattlefield().getAllPermanents()) { - for (Ability ability: permanent.getAbilities().getStaticAbilities(Zone.BATTLEFIELD)) { - for (Effect effect: ability.getEffects(game, EffectType.REPLACEMENT)) { - ReplacementEffect rEffect = (ReplacementEffect) effect; - if (rEffect.applies(event, ability, game)) { - replaceEffects.add(rEffect); - abilityMap.put(rEffect.getId(), ability); - } - } - for (Effect effect: ability.getEffects(game, EffectType.PREVENTION)) { - ReplacementEffect rEffect = (ReplacementEffect) effect; - if (rEffect.applies(event, ability, game)) { - replaceEffects.add(rEffect); - abilityMap.put(rEffect.getId(), ability); - } - } - } + for (Entry entry: permanent.getAbilities().getReplacementEffects(Zone.BATTLEFIELD).entrySet()) { + if (entry.getKey().applies(event, entry.getValue(), game)) { + replaceEffects.add(entry.getKey()); + abilityMap.put(entry.getKey().getId(), entry.getValue()); + } + } } //get all applicable Replacement effects on players for (Player player: game.getPlayers().values()) { - for (Ability ability: player.getAbilities().getStaticAbilities(Zone.BATTLEFIELD)) { - for (Effect effect: ability.getEffects(game, EffectType.REPLACEMENT)) { - ReplacementEffect rEffect = (ReplacementEffect) effect; - if (rEffect.applies(event, ability, game)) { - replaceEffects.add(rEffect); - abilityMap.put(rEffect.getId(), ability); - } - } - for (Effect effect: ability.getEffects(game, EffectType.PREVENTION)) { - ReplacementEffect rEffect = (ReplacementEffect) effect; - if (rEffect.applies(event, ability, game)) { - replaceEffects.add(rEffect); - abilityMap.put(rEffect.getId(), ability); - } - } - } + for (Entry entry: player.getAbilities().getReplacementEffects(Zone.BATTLEFIELD).entrySet()) { + if (entry.getKey().applies(event, entry.getValue(), game)) { + replaceEffects.add(entry.getKey()); + abilityMap.put(entry.getKey().getId(), entry.getValue()); + } + } } //get all applicable transient Replacement effects for (ReplacementEffect effect: replacementEffects) { diff --git a/Mage/src/mage/abilities/effects/common/PassEffect.java b/Mage/src/mage/abilities/effects/common/PassEffect.java index 175897c1c0e..5963330a012 100644 --- a/Mage/src/mage/abilities/effects/common/PassEffect.java +++ b/Mage/src/mage/abilities/effects/common/PassEffect.java @@ -32,6 +32,7 @@ import mage.Constants.Outcome; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.game.Game; +import mage.players.Player; /** * @@ -49,6 +50,8 @@ public class PassEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + player.pass(); return true; } diff --git a/Mage/src/mage/abilities/keyword/SplitSecondAbility.java b/Mage/src/mage/abilities/keyword/SplitSecondAbility.java index a011052c73b..a00174fd218 100644 --- a/Mage/src/mage/abilities/keyword/SplitSecondAbility.java +++ b/Mage/src/mage/abilities/keyword/SplitSecondAbility.java @@ -9,7 +9,7 @@ import mage.game.events.GameEvent; /** * Split Second - * As long as this spell is on the stack, players can’t cast other spells or activate abilities that aren’t mana abilities. + * As long as this spell is on the stack, players can't cast other spells or activate abilities that aren't mana abilities. */ public class SplitSecondAbility extends SimpleStaticAbility { private static final SplitSecondAbility ability = new SplitSecondAbility(); diff --git a/Mage/src/mage/abilities/mana/ManaOptions.java b/Mage/src/mage/abilities/mana/ManaOptions.java index 6ed9e882ed1..7994ef0f7b9 100644 --- a/Mage/src/mage/abilities/mana/ManaOptions.java +++ b/Mage/src/mage/abilities/mana/ManaOptions.java @@ -76,6 +76,49 @@ public class ManaOptions extends ArrayList { } } + public void addManaWithCost(List abilities, Game game) { + if (isEmpty()) + this.add(new Mana()); + if (!abilities.isEmpty()) { + if (abilities.size() == 1) { + //if there is only one mana option available add it to all the existing options + ManaAbility ability = abilities.get(0); + if (ability.getManaCosts().isEmpty()) { + addMana(ability.getNetMana(game)); + } + else { + addMana(ability.getManaCosts().getMana(), ability.getNetMana(game)); + } + } + else if (abilities.size() > 1) { + //perform a union of all existing options and the new options + List copy = copy(); + this.clear(); + for (ManaAbility ability: abilities) { + if (ability.getManaCosts().isEmpty()) { + for (Mana mana: copy) { + Mana newMana = new Mana(); + newMana.add(mana); + newMana.add(ability.getNetMana(game)); + this.add(newMana); + } + } + else { + for (Mana mana: copy) { + Mana newMana = new Mana(); + newMana.add(mana); + if (mana.contains(ability.getManaCosts().getMana())) { + newMana.subtract(ability.getManaCosts().getMana()); + newMana.add(ability.getNetMana(game)); + } + this.add(newMana); + } + } + } + } + } + } + public void addMana(Mana addMana) { if (isEmpty()) this.add(new Mana()); @@ -112,4 +155,15 @@ public class ManaOptions extends ArrayList { return new ManaOptions(this); } + public void addMana(Mana cost, Mana addMana) { + if (isEmpty()) + this.add(new Mana()); + for (Mana mana: this) { + if (mana.contains(cost)) { + mana.subtract(cost); + mana.add(addMana); + } + } + } + } \ No newline at end of file diff --git a/Mage/src/mage/cards/CardsImpl.java b/Mage/src/mage/cards/CardsImpl.java index bfad6acdc7f..055109ce10d 100644 --- a/Mage/src/mage/cards/CardsImpl.java +++ b/Mage/src/mage/cards/CardsImpl.java @@ -170,9 +170,10 @@ public class CardsImpl extends LinkedHashSet implements Cards, Serializabl @Override public Collection getUniqueCards(Game game) { Map cards = new HashMap(); - for(UUID card: this) { - if (!cards.containsKey(game.getCard(card).getName())) { - cards.put(game.getCard(card).getName(), game.getCard(card)); + for(UUID cardId: this) { + Card card = game.getCard(cardId); + if (!cards.containsKey(card.getName())) { + cards.put(card.getName(), card); } } return cards.values(); diff --git a/Mage/src/mage/game/Game.java b/Mage/src/mage/game/Game.java index 643664733b1..0f80469ae1f 100644 --- a/Mage/src/mage/game/Game.java +++ b/Mage/src/mage/game/Game.java @@ -144,6 +144,7 @@ public interface Game extends MageItem, Serializable { //game play methods public void start(UUID choosingPlayerId); public void start(UUID choosingPlayerId, GameOptions options); + public void resume(); public void end(); public void mulligan(UUID playerId); public void quit(UUID playerId); diff --git a/Mage/src/mage/game/GameImpl.java b/Mage/src/mage/game/GameImpl.java index 99d313f1652..de4f196f364 100644 --- a/Mage/src/mage/game/GameImpl.java +++ b/Mage/src/mage/game/GameImpl.java @@ -124,6 +124,7 @@ public abstract class GameImpl> implements Game, Serializa this.state = game.state.copy(); this.gameCards = game.gameCards; this.simulation = game.simulation; + this.gameOptions = game.gameOptions; } @Override @@ -235,8 +236,6 @@ public abstract class GameImpl> implements Game, Serializa @Override public Permanent getPermanent(UUID permanentId) { - if (permanentId == null) - return null; return state.getPermanent(permanentId); } @@ -249,8 +248,6 @@ public abstract class GameImpl> implements Game, Serializa @Override public Zone getZone(UUID objectId) { - if (objectId == null) - return null; return state.getZone(objectId); } @@ -271,7 +268,7 @@ public abstract class GameImpl> implements Game, Serializa @Override public void saveState() { - if (gameStates != null) + if (!simulation && gameStates != null) gameStates.save(state); } @@ -350,13 +347,26 @@ public abstract class GameImpl> implements Game, Serializa @Override public void start(UUID choosingPlayerId, GameOptions options) { startTime = new Date(); + this.gameOptions = options; init(choosingPlayerId, options.testMode); - PlayerList players = state.getPlayerList(startingPlayerId); + play(startingPlayerId); + saveState(); + } + + @Override + public void resume() { + play(state.getActivePlayerId()); + } + + protected void play(UUID nextPlayerId) { + PlayerList players = state.getPlayerList(nextPlayerId); Player player = getPlayer(players.get()); while (!isGameOver()) { state.setTurnNum(state.getTurnNum() + 1); + if (simulation) + logger.info("Turn " + Integer.toString(state.getTurnNum())); fireInformEvent("Turn " + Integer.toString(state.getTurnNum())); - if (checkStopOnTurnOption(options)) return; + if (checkStopOnTurnOption()) return; state.setActivePlayerId(player.getId()); state.getTurn().play(this, player.getId()); if (isGameOver()) @@ -366,13 +376,11 @@ public abstract class GameImpl> implements Game, Serializa } winnerId = findWinnersAndLosers(); - - saveState(); - } - - private boolean checkStopOnTurnOption(GameOptions options) { - if (options.stopOnTurn != null) { - if (options.stopOnTurn.equals(state.getTurnNum())) { + } + + private boolean checkStopOnTurnOption() { + if (gameOptions.stopOnTurn != null) { + if (gameOptions.stopOnTurn.equals(state.getTurnNum())) { winnerId = null; //DRAW saveState(); return true; @@ -852,6 +860,7 @@ public abstract class GameImpl> implements Game, Serializa @Override public synchronized void firePriorityEvent(UUID playerId) { + if (simulation) return; String message = this.state.getTurn().getStepType().toString(); if (this.canPlaySorcery(playerId)) message += " - play spells and abilities."; @@ -863,71 +872,85 @@ public abstract class GameImpl> implements Game, Serializa @Override public synchronized void fireSelectEvent(UUID playerId, String message) { + if (simulation) return; playerQueryEventSource.select(playerId, message); } @Override public void firePlayManaEvent(UUID playerId, String message) { + if (simulation) return; playerQueryEventSource.playMana(playerId, message); } @Override public void firePlayXManaEvent(UUID playerId, String message) { + if (simulation) return; playerQueryEventSource.playXMana(playerId, message); } @Override public void fireAskPlayerEvent(UUID playerId, String message) { + if (simulation) return; playerQueryEventSource.ask(playerId, message); } @Override public void fireGetChoiceEvent(UUID playerId, String message, Collection choices) { + if (simulation) return; playerQueryEventSource.chooseAbility(playerId, message, choices); } @Override public void fireGetModeEvent(UUID playerId, String message, Map modes) { + if (simulation) return; playerQueryEventSource.chooseMode(playerId, message, modes); } @Override public void fireSelectTargetEvent(UUID playerId, String message, Set targets, boolean required, Map options) { + if (simulation) return; playerQueryEventSource.target(playerId, message, targets, required, options); } @Override public void fireSelectTargetEvent(UUID playerId, String message, Cards cards, boolean required, Map options) { + if (simulation) return; playerQueryEventSource.target(playerId, message, cards, required, options); } @Override public void fireSelectTargetEvent(UUID playerId, String message, TriggeredAbilities abilities, boolean required) { + if (simulation) return; playerQueryEventSource.target(playerId, message, abilities, required); } @Override public void fireSelectTargetEvent(UUID playerId, String message, List perms, boolean required) { + if (simulation) return; playerQueryEventSource.target(playerId, message, perms, required); } @Override public void fireLookAtCardsEvent(UUID playerId, String message, Cards cards) { + if (simulation) return; playerQueryEventSource.target(playerId, message, cards); } @Override public void fireGetAmountEvent(UUID playerId, String message, int min, int max) { + if (simulation) return; playerQueryEventSource.amount(playerId, message, min, max); } @Override public void fireChooseEvent(UUID playerId, Choice choice) { + if (simulation) return; playerQueryEventSource.choose(playerId, choice.getMessage(), choice.getChoices()); } @Override public void informPlayers(String message) { + if (simulation) return; // state.addMessage(message); fireInformEvent(message); } @@ -939,11 +962,13 @@ public abstract class GameImpl> implements Game, Serializa @Override public void fireInformEvent(String message) { + if (simulation) return; tableEventSource.fireTableEvent(EventType.INFO, message, this); } @Override public void fireUpdatePlayersEvent() { + if (simulation) return; tableEventSource.fireTableEvent(EventType.UPDATE, null, this); } @@ -1054,13 +1079,11 @@ public abstract class GameImpl> implements Game, Serializa @Override public void fireEvent(GameEvent event) { - applyEffects(); state.handleEvent(event, this); } @Override public boolean replaceEvent(GameEvent event) { - applyEffects(); return state.replaceEvent(event, this); } diff --git a/Mage/src/mage/game/GameOptions.java b/Mage/src/mage/game/GameOptions.java index c4fe621afa1..07cb50b0198 100644 --- a/Mage/src/mage/game/GameOptions.java +++ b/Mage/src/mage/game/GameOptions.java @@ -1,12 +1,14 @@ package mage.game; +import java.io.Serializable; + /** * Game options for Mage game. * Mainly used in tests to configure {@link GameImpl} with specific params. * * @author ayratn */ -public class GameOptions { +public class GameOptions implements Serializable { private static GameOptions defInstance = new GameOptions(); diff --git a/Mage/src/mage/game/GameState.java b/Mage/src/mage/game/GameState.java index 262bc50ee0e..49ed499527e 100644 --- a/Mage/src/mage/game/GameState.java +++ b/Mage/src/mage/game/GameState.java @@ -314,17 +314,16 @@ public class GameState implements Serializable, Copyable { } public Permanent getPermanent(UUID permanentId) { - Permanent permanent; - if (battlefield.containsPermanent(permanentId)) { - permanent = battlefield.getPermanent(permanentId); - setZone(permanent.getId(), Zone.BATTLEFIELD); - return permanent; - } + if (permanentId != null && battlefield.containsPermanent(permanentId)) { + Permanent permanent = battlefield.getPermanent(permanentId); + setZone(permanent.getId(), Zone.BATTLEFIELD); + return permanent; + } return null; } public Zone getZone(UUID id) { - if (zones.containsKey(id)) + if (id != null && zones.containsKey(id)) return zones.get(id); return null; } diff --git a/Mage/src/mage/game/permanent/PermanentCard.java b/Mage/src/mage/game/permanent/PermanentCard.java index 689a7dabf2a..68de9720162 100644 --- a/Mage/src/mage/game/permanent/PermanentCard.java +++ b/Mage/src/mage/game/permanent/PermanentCard.java @@ -50,16 +50,18 @@ import mage.players.Player; */ public class PermanentCard extends PermanentImpl { - protected String art; protected List levelerRules; + protected Card card; public PermanentCard(Card card, UUID controllerId) { super(card.getId(), card.getOwnerId(), controllerId, card.getName()); + this.card = card.copy(); init(card); } protected PermanentCard(UUID id, Card card, UUID controllerId) { super(card.getId(), card.getOwnerId(), controllerId, card.getName()); + this.card = card.copy(); init(card); } @@ -75,27 +77,28 @@ public class PermanentCard extends PermanentImpl { public PermanentCard(final PermanentCard permanent) { super(permanent); - this.art = permanent.art; + this.card = permanent.card; } @Override public void reset(Game game) { // when the permanent is reset copy all original values from the card // must copy card each reset so that the original values don't get modified - Card copy = game.getCard(objectId).copy(); - copyFromCard(copy); + copyFromCard(card); super.reset(game); } protected void copyFromCard(Card card) { this.name = card.getName(); - this.abilities = card.getAbilities(); + this.abilities.clear(); + this.abilities.addAll(card.getAbilities()); this.abilities.setControllerId(this.controllerId); - this.cardType = card.getCardType(); - this.color = card.getColor(); - this.manaCost = card.getManaCost(); - this.power = card.getPower(); - this.toughness = card.getToughness(); + this.cardType.clear(); + this.cardType.addAll(card.getCardType()); + this.color = card.getColor().copy(); + this.manaCost = card.getManaCost().copy(); + this.power = card.getPower().copy(); + this.toughness = card.getToughness().copy(); if (card instanceof LevelerCard) { LevelAbility level = ((LevelerCard)card).getLevel(this.getCounters().getCount(CounterType.LEVEL)); if (level != null) { @@ -106,8 +109,10 @@ public class PermanentCard extends PermanentImpl { } } } - this.subtype = card.getSubtype(); - this.supertype = card.getSupertype(); + this.subtype.clear(); + this.subtype.addAll(card.getSubtype()); + this.supertype.clear(); + this.supertype.addAll(card.getSupertype()); this.expansionSetCode = card.getExpansionSetCode(); this.rarity = card.getRarity(); this.cardNumber = card.getCardNumber(); @@ -124,7 +129,6 @@ public class PermanentCard extends PermanentImpl { // or we want to trigger abilities that only trigger on leaving the battlefield // card abilities will get triggered later when the card hits the new zone List triggered = new ArrayList(); - Card card = game.getCard(objectId).copy(); for (TriggeredAbility ability: abilities.getTriggeredAbilities(event.getFromZone())) { if (!card.getAbilities().containsKey(ability.getId())) { if (ability.checkTrigger(event, game)) { @@ -158,7 +162,6 @@ public class PermanentCard extends PermanentImpl { if (controller != null && controller.removeFromBattlefield(this, game)) { ZoneChangeEvent event = new ZoneChangeEvent(this, sourceId, controllerId, fromZone, toZone); if (!game.replaceEvent(event)) { - Card card = game.getCard(objectId); Player owner = game.getPlayer(ownerId); game.rememberLKI(objectId, Zone.BATTLEFIELD, this); if (owner != null) { @@ -199,7 +202,6 @@ public class PermanentCard extends PermanentImpl { if (controller != null && controller.removeFromBattlefield(this, game)) { ZoneChangeEvent event = new ZoneChangeEvent(this, sourceId, ownerId, fromZone, Zone.EXILED); if (!game.replaceEvent(event)) { - Card card = game.getCard(this.objectId); if (exileId == null) { game.getExile().getPermanentExile().add(card); } diff --git a/Mage/src/mage/players/Player.java b/Mage/src/mage/players/Player.java index df7c5fbcba4..fe564978c96 100644 --- a/Mage/src/mage/players/Player.java +++ b/Mage/src/mage/players/Player.java @@ -34,6 +34,7 @@ import java.util.Map; import java.util.Set; import java.util.UUID; import mage.Constants.Outcome; +import mage.Constants.RangeOfInfluence; import mage.MageItem; import mage.MageObject; import mage.abilities.Abilities; @@ -77,7 +78,8 @@ public interface Player extends MageItem, Copyable { public boolean isHuman(); public String getName(); - public Library getLibrary(); + public RangeOfInfluence getRange(); + public Library getLibrary(); public Cards getGraveyard(); public Abilities getAbilities(); public void addAbility(Ability ability); @@ -240,7 +242,7 @@ public interface Player extends MageItem, Copyable { public void phasing(Game game); public void untap(Game game); - public List getPlayable(Game game, FilterAbility filter, ManaOptions available, boolean hidden); + public List getPlayable(Game game, boolean hidden); public List getPlayableOptions(Ability ability, Game game); public void addCounters(Counter counter, Game game); diff --git a/Mage/src/mage/players/PlayerImpl.java b/Mage/src/mage/players/PlayerImpl.java index 76afaca509e..43f08988a73 100644 --- a/Mage/src/mage/players/PlayerImpl.java +++ b/Mage/src/mage/players/PlayerImpl.java @@ -211,6 +211,11 @@ public abstract class PlayerImpl> implements Player, Ser findRange(game); } + @Override + public RangeOfInfluence getRange() { + return range; + } + protected void findRange(Game game) { //20100423 - 801.2c inRange.clear(); @@ -615,6 +620,7 @@ public abstract class PlayerImpl> implements Player, Ser return false; if (ability instanceof PassAbility) { + pass(); return true; } else if (ability instanceof PlayLandAbility) { @@ -968,6 +974,7 @@ public abstract class PlayerImpl> implements Player, Ser this.inRange = player.getInRange(); this.landsPlayed = player.getLandsPlayed(); this.name = player.getName(); + this.range = player.getRange(); this.passed = player.isPassed(); } @@ -1129,20 +1136,46 @@ public abstract class PlayerImpl> implements Player, Ser } protected ManaOptions getManaAvailable(Game game) { - List manaPerms = this.getAvailableManaProducers(game); - ManaOptions available = new ManaOptions(); + + List manaPerms = this.getAvailableManaProducers(game); for (Permanent perm: manaPerms) { - available.addMana(perm.getAbilities().getManaAbilities(Zone.BATTLEFIELD), game); + available.addMana(perm.getAbilities().getAvailableManaAbilities(Zone.BATTLEFIELD, game), game); + } + + List manaPermsWithCost = this.getAvailableManaProducersWithCost(game); + for (Permanent perm: manaPermsWithCost) { + available.addManaWithCost(perm.getAbilities().getAvailableManaAbilities(Zone.BATTLEFIELD, game), game); } return available; } + // returns only mana producers that don't require mana payment protected List getAvailableManaProducers(Game game) { List result = new ArrayList(); for (Permanent permanent: game.getBattlefield().getAllActivePermanents(playerId)) { + boolean canAdd = false; for (ManaAbility ability: permanent.getAbilities().getManaAbilities(Zone.BATTLEFIELD)) { if (ability.canActivate(playerId, game)) { + canAdd = true; + } + if (!ability.getManaCosts().isEmpty()) { + canAdd = false; + break; + } + } + if (canAdd) + result.add(permanent); + } + return result; + } + + // returns only mana producers that require mana payment + protected List getAvailableManaProducersWithCost(Game game) { + List result = new ArrayList(); + for (Permanent permanent: game.getBattlefield().getAllActivePermanents(playerId)) { + for (ManaAbility ability: permanent.getAbilities().getManaAbilities(Zone.BATTLEFIELD)) { + if (ability.canActivate(playerId, game) && !ability.getManaCosts().isEmpty()) { result.add(permanent); break; } @@ -1150,7 +1183,7 @@ public abstract class PlayerImpl> implements Player, Ser } return result; } - + protected boolean canPlay(ActivatedAbility ability, ManaOptions available, Game game) { if (!(ability instanceof ManaAbility) && ability.canActivate(playerId, game)) { ManaOptions abilityOptions = ability.getManaCosts().getOptions(); @@ -1172,28 +1205,28 @@ public abstract class PlayerImpl> implements Player, Ser } @Override - public List getPlayable(Game game, FilterAbility filter, ManaOptions available, boolean hidden) { + public List getPlayable(Game game, boolean hidden) { List playable = new ArrayList(); -// ManaOptions available = getManaAvailable(game); -// available.addMana(manaPool.getMana()); + ManaOptions available = getManaAvailable(game); + available.addMana(manaPool.getMana()); if (hidden) { for (Card card: hand.getUniqueCards(game)) { - for (ActivatedAbility ability: card.getAbilities().getActivatedAbilities(Zone.HAND, filter)) { + for (ActivatedAbility ability: card.getAbilities().getActivatedAbilities(Zone.HAND)) { if (canPlay(ability, available, game)) playable.add(ability); } } } for (Card card: graveyard.getUniqueCards(game)) { - for (ActivatedAbility ability: card.getAbilities().getActivatedAbilities(Zone.GRAVEYARD, filter)) { + for (ActivatedAbility ability: card.getAbilities().getActivatedAbilities(Zone.GRAVEYARD)) { if (canPlay(ability, available, game)) playable.add(ability); } } for (Permanent permanent: game.getBattlefield().getAllActivePermanents(playerId)) { - for (ActivatedAbility ability: permanent.getAbilities().getActivatedAbilities(Zone.BATTLEFIELD, filter)) { + for (ActivatedAbility ability: permanent.getAbilities().getActivatedAbilities(Zone.BATTLEFIELD)) { if (canPlay(ability, available, game)) playable.add(ability); }