From 7e00b5cc25a6319407f87e984789b198fa0e446f Mon Sep 17 00:00:00 2001 From: BetaSteward Date: Fri, 4 Mar 2011 21:54:45 -0500 Subject: [PATCH] AI fix - better time out support --- .../src/mage/player/ai/ComputerPlayer2.java | 5 ++++ Mage.Server/plugins/mage-player-aiminimax.jar | Bin 38411 -> 38416 bytes Mage.Tests/plugins/mage-player-aiminimax.jar | Bin 38392 -> 38416 bytes .../mage/test/serverside/PlayGameTest.java | 24 ++++++++---------- .../src/test/resources/log4j.properties | 4 +-- Mage/src/mage/game/Game.java | 3 ++- Mage/src/mage/game/GameImpl.java | 17 ++++++++----- 7 files changed, 30 insertions(+), 23 deletions(-) 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 641079d53c..b5e0f68f5a 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 @@ -394,6 +394,11 @@ public class ComputerPlayer2 extends ComputerPlayer implements if (logger.isDebugEnabled()) logger.debug("simulating -- adding " + allActions.size() + " children:" + allActions); for (Ability action: allActions) { + if (Thread.interrupted()) { + Thread.currentThread().interrupt(); + logger.debug("interrupted"); + break; + } Game sim = game.copy(); if (sim.getPlayer(currentPlayer.getId()).activateAbility((ActivatedAbility) action.copy(), sim)) { sim.applyEffects(); diff --git a/Mage.Server/plugins/mage-player-aiminimax.jar b/Mage.Server/plugins/mage-player-aiminimax.jar index e14b7728368ebd69a9482b35e578f37d610370b6..e72f7fc42346c748545743fe696ba40e8c47aebb 100644 GIT binary patch delta 12670 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 delta 12578 zcmZ8{byOYCvNi7R?(R--hv1NdySuv|-2EWI{oody;1c9u!5xA_fZzcFocYGdr~o=CKwAT|*fb4h8C;A#G=rhE9hrWoIOg6Vm78_y-D06Srga zkE6G*5E9DqkHh+kXWW?Kl!|W?fN&jc(__?Q1ogl9e-hImRIvY;OU8c;hzOeHAKM}a zy$AExVS)Ps^LK&bm?$6=EEH4%1~TZerO(JM7_?6c+?z8vAE;_PL$4kTI588@KE@| zNhIGbxCxD~ShkZ`ku4VJt%f6v?Si0D^eFG`YLj z?<$m;He@+=da*2gT28GbzVVVMV4b~M5V}#Z+0)m*aq`CiCP2D!ZbbdXeT~e|DXDJRi6Q-}tI5c#A&;7WHg1x?W9q zi+2@b_kLw`y_v}C`b7ZV)8W|qlClx(0o(uMYC?qg1~a+`qW*K7p{OTsr}Ao_qNrzu z@rPyg>UjAB@EH52XEh`40~BV^93$n;L=16`su6I6k@9|GT6}HFXf>U_<3`?TUn=F= zQbdBn_QH=wS)93OZw#YBe7dLMXr9+7KtNf1jJ8PdV1_L~u5UM+b22;V#yX_zCjNys z+vG6H^cJ#mNE-444oaYOCA}e+=tVr0z5N{h0xEg~vON&ph)D#GByAo1ihdbTFY?$g zdc7m=m$+Lvet8>LH@*2~DG@ySL;dA0=_P{_$bDcN@|;Zi`>fLV$6KsTO}LZ#9y%OfM365;1_5DP96vqbGey?Ev*svY^xcK{clK-(v4GHe7DYt#7f zSql+dmzM1^-xHeiiVjIpN=6x9i|Q^W@d@|N&F|~?po>8N^z2U zTt2tS_}w!zeM_0nhB{%AYL~=O>9puilK`2eB=oPV=NeAlox*T_J2ku2`!e_F5coKj zTA(ny!7zk)@GRPmFZ@Gx`2;wUmQ{uyFm#Q8Hj_`@kOW6cVo5EfP!3PRZLQrTphaLr z(ts)$DRcdaySugB0xy~reNfN23Yyi+j$dzfi?hOB_CxUHX3h07+7hI!7?v09J*Ej^ z;$qgcOKcQvTR>=saJPefQ<#4hb}f1X3NTaO*?RvDRT4biu(qTLp2AI#=Ppg*FYV*# z6u@IejfU97=<+Ya=O|2Z7Y50`!*L<9uIekcBhbN6HPyk_*I6No*Rm`$k8*bZbVPn3$xGFUu@LG&sXohG_T>L=4MZBa08aDjqtt=Z{}LLkXIkR0df(2 zNR8(huXS}o8nrpeqGn^o)|hQ+l~UG_Pvpj4{8>zda%Sq+)b|fyt|DNFWky6 zw0K4_P(MmPJXMcCTiK|_!2ps#fUvF4j>4p8hcsEZg;i%F#IM HB9!@ha)%-AeK9 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 g#|>q(Jzd{Lk$F17E4S^8f$< diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/PlayGameTest.java b/Mage.Tests/src/test/java/org/mage/test/serverside/PlayGameTest.java index d8e2df7e79..4f1fcfb776 100644 --- a/Mage.Tests/src/test/java/org/mage/test/serverside/PlayGameTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/PlayGameTest.java @@ -2,14 +2,11 @@ package org.mage.test.serverside; import mage.Constants; import mage.cards.Card; -import mage.cards.ExpansionSet; import mage.cards.decks.Deck; import mage.game.Game; import mage.game.GameException; import mage.game.TwoPlayerDuel; -import mage.game.permanent.Permanent; import mage.game.permanent.PermanentCard; -import mage.game.permanent.PermanentImpl; import mage.players.Player; import mage.server.game.PlayerFactory; import mage.sets.Sets; @@ -28,8 +25,8 @@ public class PlayGameTest extends MageTestBase { private List handCardsA = new ArrayList(); private List handCardsB = new ArrayList(); - private List battlefieldCardsA = new ArrayList(); - private List battlefieldCardsB = new ArrayList(); + private List battlefieldCardsA = new ArrayList(); + private List battlefieldCardsB = new ArrayList(); private List graveyardCardsA = new ArrayList(); private List graveyardCardsB = new ArrayList(); private List libraryCardsA = new ArrayList(); @@ -42,8 +39,8 @@ public class PlayGameTest extends MageTestBase { public void playOneGame() throws GameException, FileNotFoundException, IllegalArgumentException { Game game = new TwoPlayerDuel(Constants.MultiplayerAttackOption.LEFT, Constants.RangeOfInfluence.ALL); - //Player computerA = createPlayer("ComputerA", "Computer - minimax hybrid"); - Player computerA = createPlayer("ComputerA", "Computer - mad"); + Player computerA = createPlayer("ComputerA", "Computer - minimax hybrid"); +// Player computerA = createPlayer("ComputerA", "Computer - mad"); Deck deck = Deck.load(Sets.loadDeck("RB Aggro.dck")); if (deck.getCards().size() < 40) { @@ -52,8 +49,8 @@ public class PlayGameTest extends MageTestBase { game.addPlayer(computerA, deck); game.loadCards(deck.getCards(), computerA.getId()); - //Player computerB = createPlayer("ComputerB", "Computer - minimax hybrid"); - Player computerB = createPlayer("ComputerB", "Computer - mad"); + Player computerB = createPlayer("ComputerB", "Computer - minimax hybrid"); +// Player computerB = createPlayer("ComputerB", "Computer - mad"); Deck deck2 = Deck.load(Sets.loadDeck("RB Aggro.dck")); if (deck2.getCards().size() < 40) { throw new IllegalArgumentException("Couldn't load deck, deck size=" + deck2.getCards().size()); @@ -61,7 +58,7 @@ public class PlayGameTest extends MageTestBase { game.addPlayer(computerB, deck2); game.loadCards(deck2.getCards(), computerB.getId()); - parseScenario("tests/Burn the Impure.test"); + parseScenario("scenario8.txt"); game.cheat(computerA.getId(), commandsA); game.cheat(computerA.getId(), libraryCardsA, handCardsA, battlefieldCardsA, graveyardCardsA); game.cheat(computerB.getId(), commandsB); @@ -105,14 +102,15 @@ public class PlayGameTest extends MageTestBase { String nickname = m.group(2); if (nickname.equals("ComputerA") || nickname.equals("ComputerB")) { - List cards; + List cards = null; + List perms = null; Constants.Zone gameZone; if ("hand".equalsIgnoreCase(zone)) { gameZone = Constants.Zone.HAND; cards = nickname.equals("ComputerA") ? handCardsA : handCardsB; } else if ("battlefield".equalsIgnoreCase(zone)) { gameZone = Constants.Zone.BATTLEFIELD; - cards = nickname.equals("ComputerA") ? battlefieldCardsA : battlefieldCardsB; + perms = nickname.equals("ComputerA") ? battlefieldCardsA : battlefieldCardsB; } else if ("graveyard".equalsIgnoreCase(zone)) { gameZone = Constants.Zone.GRAVEYARD; cards = nickname.equals("ComputerA") ? graveyardCardsA : graveyardCardsB; @@ -150,7 +148,7 @@ public class PlayGameTest extends MageTestBase { if (gameZone.equals(Constants.Zone.BATTLEFIELD)) { PermanentCard p = new PermanentCard(card, null); p.setTapped(tapped); - cards.add(p); + perms.add(p); } else { cards.add(card); } diff --git a/Mage.Tests/src/test/resources/log4j.properties b/Mage.Tests/src/test/resources/log4j.properties index 4e87c90cf2..605efa2a5e 100644 --- a/Mage.Tests/src/test/resources/log4j.properties +++ b/Mage.Tests/src/test/resources/log4j.properties @@ -1,11 +1,11 @@ #default levels -log4j.rootLogger=info, console, file, watchdog +log4j.rootLogger=debug, console, file, watchdog #console log log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%-5p [%d{yyyy-MM-dd HH:mm [ss:SSS]}] %C{1}[%t]: %m%n -log4j.appender.console.Threshold=INFO +log4j.appender.console.Threshold=DEBUG #file log log4j.appender.file=org.apache.log4j.FileAppender diff --git a/Mage/src/mage/game/Game.java b/Mage/src/mage/game/Game.java index b0b18e30d3..147e876934 100644 --- a/Mage/src/mage/game/Game.java +++ b/Mage/src/mage/game/Game.java @@ -57,6 +57,7 @@ import mage.game.events.Listener; import mage.game.events.PlayerQueryEvent; import mage.game.permanent.Battlefield; import mage.game.permanent.Permanent; +import mage.game.permanent.PermanentCard; import mage.game.turn.Phase; import mage.game.turn.Step; import mage.game.turn.Turn; @@ -159,5 +160,5 @@ public interface Game extends MageItem, Serializable { // game cheats (for tests only) public void cheat(UUID ownerId, Map commands); - public void cheat(UUID ownerId, List library, List hand, List battlefield, List graveyard); + public void cheat(UUID ownerId, List library, List hand, List battlefield, List graveyard); } diff --git a/Mage/src/mage/game/GameImpl.java b/Mage/src/mage/game/GameImpl.java index 1e841bbc0f..b0ba80c387 100644 --- a/Mage/src/mage/game/GameImpl.java +++ b/Mage/src/mage/game/GameImpl.java @@ -911,6 +911,7 @@ public abstract class GameImpl> implements Game, Serializa * @param zone * @return */ + @Override public Card getLastKnownInformation(UUID objectId, Zone zone) { return lki.get(objectId); } @@ -922,6 +923,7 @@ public abstract class GameImpl> implements Game, Serializa * @param zone * @param card */ + @Override public void rememberLKI(UUID objectId, Zone zone, Card card) { Card copy = card.copy(); lki.put(objectId, copy); @@ -930,10 +932,12 @@ public abstract class GameImpl> implements Game, Serializa /** * Reset objects stored for Last Known Information. */ + @Override public void resetLKI() { lki.clear(); } + @Override public void cheat(UUID ownerId, Map commands) { if (commands != null) { Player player = getPlayer(ownerId); @@ -982,7 +986,8 @@ public abstract class GameImpl> implements Game, Serializa cards.clear(); } - public void cheat(UUID ownerId, List library, List hand, List battlefield, List graveyard) { + @Override + public void cheat(UUID ownerId, List library, List hand, List battlefield, List graveyard) { Player player = getPlayer(ownerId); if (player != null) { loadCards(ownerId, library); @@ -1002,23 +1007,21 @@ public abstract class GameImpl> implements Game, Serializa setZone(card.getId(), Zone.GRAVEYARD); player.getGraveyard().add(card); } - for (Card card : battlefield) { + for (PermanentCard card : battlefield) { card.setOwnerId(ownerId); PermanentCard permanent = new PermanentCard(card, ownerId); + permanent.setTapped(card.isTapped()); getBattlefield().addPermanent(permanent); } applyEffects(); } } - private void loadCards(UUID ownerId, List cards) { + private void loadCards(UUID ownerId, List cards) { if (cards == null) { return; } - Set set = new HashSet(); - for (Card card : cards) { - set.add(card); - } + Set set = new HashSet(cards); loadCards(set, ownerId); }