/////////////////////////////////////////////////////////////////////// // STANFORD LOGIC GROUP // // General Game Playing Project // // // // Sample Player Implementation // // // // (c) 2007. See LICENSE and CONTRIBUTORS. // /////////////////////////////////////////////////////////////////////// /** * */ package stanfordlogic.jocular.game; import java.util.List; import java.util.Random; import java.util.logging.Level; import java.util.logging.Logger; import stanfordlogic.game.Gamer; import stanfordlogic.gdl.Parser; import stanfordlogic.prover.GroundFact; import stanfordlogic.prover.Term; import stanfordlogic.util.Triple; /** * */ public class RandomGamer extends Gamer { private static final Logger logger_ = Logger.getLogger("stanfordlogic.game"); private final Random random_; public RandomGamer(String gameId, Parser p) { super(gameId, p); random_ = new Random(); // Seed the random generator if you so desire: // (Currently not seeded for debugging) //random_.setSeed(System.currentTimeMillis()); } @Override protected Triple<Term, String, String> moveThink() { List<GroundFact> moves = getAllAnswers(currentContext_, "legal", myRole_.toString(), "?x"); if (moves.size() == 0) { logger_.severe("No legal moves"); return null; } if (logger_.isLoggable(Level.FINE)) { logger_.fine("My legal moves: "); StringBuilder sb = new StringBuilder(); sb.append(" "); for (GroundFact move: moves) { sb.append(move); sb.append(" "); } logger_.fine(sb.toString()); } GroundFact move; move = moves.get(random_.nextInt(moves.size())); // term 0 is the player, term 1 is the actual move Term action = move.getTerm(1); return new Triple<Term, String, String>(action, "I'm a silly random player", "I hope you can beat me"); } @Override public void stopIt() { // Nothing to do. } }