org.ggp.base.player.gamer.statemachine.random.RandomGamer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of alloy-ggp-base Show documentation
Show all versions of alloy-ggp-base Show documentation
A modified version of the GGP-Base library for Alloy.
package org.ggp.base.player.gamer.statemachine.random;
import java.util.List;
import java.util.Random;
import org.ggp.base.apps.player.detail.DetailPanel;
import org.ggp.base.apps.player.detail.SimpleDetailPanel;
import org.ggp.base.player.gamer.event.GamerSelectedMoveEvent;
import org.ggp.base.player.gamer.exception.GamePreviewException;
import org.ggp.base.player.gamer.statemachine.StateMachineGamer;
import org.ggp.base.util.game.Game;
import org.ggp.base.util.statemachine.Move;
import org.ggp.base.util.statemachine.StateMachine;
import org.ggp.base.util.statemachine.cache.CachedStateMachine;
import org.ggp.base.util.statemachine.exceptions.GoalDefinitionException;
import org.ggp.base.util.statemachine.exceptions.MoveDefinitionException;
import org.ggp.base.util.statemachine.exceptions.TransitionDefinitionException;
import org.ggp.base.util.statemachine.implementation.prover.ProverStateMachine;
/**
* RandomGamer is a very simple state-machine-based Gamer that will always
* pick randomly from the legal moves it finds at any state in the game.
*/
public final class RandomGamer extends StateMachineGamer
{
@Override
public String getName() {
return "Random";
}
@Override
public Move stateMachineSelectMove(long timeout) throws TransitionDefinitionException, MoveDefinitionException, GoalDefinitionException
{
long start = System.currentTimeMillis();
List moves = getStateMachine().getLegalMoves(getCurrentState(), getRole());
Move selection = (moves.get(new Random().nextInt(moves.size())));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
long stop = System.currentTimeMillis();
notifyObservers(new GamerSelectedMoveEvent(moves, selection, stop - start));
return selection;
}
@Override
public StateMachine getInitialStateMachine() {
return new CachedStateMachine(new ProverStateMachine());
}
@Override
public void preview(Game g, long timeout) throws GamePreviewException {
// Random gamer does no game previewing.
}
@Override
public void stateMachineMetaGame(long timeout) throws TransitionDefinitionException, MoveDefinitionException, GoalDefinitionException
{
// Random gamer does no metagaming at the beginning of the match.
}
@Override
public void stateMachineStop() {
// Random gamer does no special cleanup when the match ends normally.
}
@Override
public void stateMachineAbort() {
// Random gamer does no special cleanup when the match ends abruptly.
}
@Override
public DetailPanel getDetailPanel() {
return new SimpleDetailPanel();
}
}