Package org.ggp.base.player.gamer.statemachine.random

Source Code of org.ggp.base.player.gamer.statemachine.random.RandomGamer

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<Move> moves = getStateMachine().getLegalMoves(getCurrentState(), getRole());
    Move selection = (moves.get(new Random().nextInt(moves.size())));

    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();
  }
}
TOP

Related Classes of org.ggp.base.player.gamer.statemachine.random.RandomGamer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.