48 lines
1.5 KiB
Java
48 lines
1.5 KiB
Java
package magic.ai;
|
|
|
|
import magic.model.MagicGame;
|
|
import magic.model.event.MagicEvent;
|
|
|
|
public class VegasWorker implements Runnable {
|
|
|
|
private static final int MAIN_PHASES=6;
|
|
|
|
private final MagicGame sourceGame;
|
|
private final VegasScore score;
|
|
private final Object[] choiceResults;
|
|
private final long slice;
|
|
private final boolean CHEAT;
|
|
|
|
VegasWorker(final boolean cheat, final MagicGame sourceGame, final VegasScore score,final long slice) {
|
|
this.CHEAT = cheat;
|
|
this.sourceGame=sourceGame;
|
|
this.score=score;
|
|
this.choiceResults=score.getChoiceResults();
|
|
this.slice=slice;
|
|
}
|
|
|
|
/** Play game until number of main phases are completed or until the game is finished. */
|
|
private void runGame(final MagicGame game) {
|
|
while (game.advanceToNextEventWithChoice()) {
|
|
final MagicEvent event = game.getNextEvent();
|
|
final Object[] result = event.getSimulationChoiceResult(game);
|
|
game.executeNextEvent(result);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void run() {
|
|
final long endTime = System.nanoTime() + slice;
|
|
while (System.nanoTime() < endTime) {
|
|
final MagicGame game = new MagicGame(sourceGame, sourceGame.getScorePlayer());
|
|
if (!CHEAT) {
|
|
game.showRandomizedHiddenCards();
|
|
}
|
|
game.setMainPhases(MAIN_PHASES);
|
|
game.executeNextEvent(game.map(choiceResults));
|
|
runGame(game);
|
|
score.incrementScore(game.getScore());
|
|
}
|
|
}
|
|
}
|