added toString to game and print it out when assert fails

master
melvin 2011-06-19 21:54:58 +08:00
parent d1ff534860
commit 168dd68b07
5 changed files with 31 additions and 17 deletions

View File

@ -346,11 +346,11 @@ public class MCTSAI implements MagicAI {
assert choices.size() > 0 : "ERROR! No choice at start of genNewTreeNode";
assert !curr.hasDetails() || curr.getMaxChildren() == choices.size() :
"ERROR! Capacity of node is " + curr.getMaxChildren() + ", number of choices is " + choices.size()
+ printPath(path) + printNode(curr, choices);
"ERROR! Capacity of node is " + curr.getMaxChildren() + ", number of choices is " + choices.size() +
"\n" + game + printPath(path) + printNode(curr, choices);
assert !curr.hasDetails() || checkNode(curr, choices) :
"ERROR! Inconsistent node found" +
"ERROR! Inconsistent node found" + "\n" + game +
printPath(path) + printNode(curr, choices);
final MagicEvent event = game.getNextEvent();

View File

@ -2258,25 +2258,29 @@ public class TriggerDefinitions {
}
};
private static final MagicTrigger SUTURE_PRIEST=new MagicTrigger(MagicTriggerType.WhenOtherComesIntoPlay,"Suture Priest") {
private static final MagicTrigger SUTURE_PRIEST=new MagicTrigger(
MagicTriggerType.WhenOtherComesIntoPlay,
"Suture Priest") {
@Override
public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final Object data) {
final MagicPermanent otherPermanent=(MagicPermanent)data;
if (otherPermanent!=permanent&&otherPermanent.isCreature()) {
final MagicPlayer player=permanent.getController();
final MagicPlayer controller=otherPermanent.getController();
final boolean same=controller==player;
return new MagicEvent(permanent,player,new Object[]{controller,same?1:-1},this,
controller.getName()+(same?" gains 1 life.":" loses 1 life."));
return new MagicEvent(
permanent,
player,
new Object[]{controller,same?1:-1},
this,
controller.getName()+(same?" gains 1 life.":" loses 1 life."));
}
return null;
}
@Override
public void executeEvent(final MagicGame game,final MagicEvent event,final Object data[],final Object[] choiceResults) {
public void executeEvent(final MagicGame game,final MagicEvent event,
final Object data[],final Object[] choiceResults) {
game.doAction(new MagicChangeLifeAction((MagicPlayer)data[0],(Integer)data[1]));
}
};

View File

@ -206,6 +206,20 @@ public class MagicGame {
};
return magic.MurmurHash3.hash(keys);
}
public String toString() {
return "t=" + turn + " " +
"p=" + phase.getType() + " " +
"s=" + step + " " +
"tp=" + turnPlayer.getIndex() + " " +
"lp=" + landPlayed + " " +
"ppc=" + priorityPassedCount + " " +
"pp=" + priorityPassed + " " +
"sc=" + stateCheckRequired + " " +
"x=" + getPayedCost().getX() + " " +
"e=" + events.size() + " " +
"s=" + stack.size();
}
public String getIdString() {
StringBuffer sb = new StringBuffer();

View File

@ -173,7 +173,6 @@ public class MagicDeclareBlockersResultBuilder {
}
public Collection<Object> buildResults() {
// Caching for better speed and immediate mode for triggers.
game.setImmediate(true);
attackingPlayer.setCached(game,true);
@ -183,6 +182,6 @@ public class MagicDeclareBlockersResultBuilder {
game.setImmediate(false);
attackingPlayer.setCached(game,false);
defendingPlayer.setCached(game,false);
return results==null?EMPTY_RESULT:results.getResults();
return results == null ? EMPTY_RESULT : results.getResults();
}
}
}

View File

@ -7,18 +7,15 @@ public class MagicBeginOfCombatPhase extends MagicPhase {
private static final MagicPhase INSTANCE=new MagicBeginOfCombatPhase();
private MagicBeginOfCombatPhase() {
super(MagicPhaseType.BeginOfCombat);
}
public static MagicPhase getInstance() {
return INSTANCE;
}
@Override
public void executeBeginStep(final MagicGame game) {
game.setStep(MagicStep.ActivePlayer);
}
}
}