001 package ai; 002 003 import java.util.ArrayList; 004 import java.util.List; 005 import java.util.Random; 006 007 import rules.GameState; 008 009 import core.Color; 010 import core.Game; 011 import core.Move; 012 import core.Player; 013 014 015 /** 016 * An ai player that makes random moves. 017 * 018 * @specfield state : game state // the current state of the came according to 019 * the ai 020 */ 021 public class RandomPlayer extends Player 022 { 023 private GameState state; 024 private Random r; 025 026 /** 027 * Creates a new random player of the given color 028 * 029 * @param c 030 * color of the player 031 * 032 * @requires c not null 033 */ 034 public RandomPlayer(Color c) 035 { 036 super(c); 037 state = new GameState(); 038 r = new Random(); 039 } 040 041 /** 042 * @see Player 043 */ 044 public Move askForMove(Move opponentsMove) 045 { 046 // If this is not the game's very first move 047 if (state.getMoveNum() > 0 || this.getColor() == Color.BLACK) 048 { 049 // Update the board with the opponent's move 050 state.makeMove(opponentsMove); 051 } 052 List<Move> l = new ArrayList<Move>(state.legalMoves()); 053 Move m = l.get(r.nextInt(l.size())); 054 state.makeMove(m); 055 return m; 056 } 057 058 /** 059 * Has the player make a series of moves. Used to get the AI player up to 060 * speed on a newly loaded game 061 * 062 * @param game 063 * the new game 064 * 065 * @modifies state 066 * 067 * @requires game not null 068 */ 069 public void update(Game game) 070 { 071 state = new GameState(); 072 for (int i = 0; i < game.getMoveHistory().size() - 1; i++) 073 { 074 state.makeMove(game.getMoveHistory().get(i)); 075 } 076 077 if (this.getColor() != game.getCurrentPlayer().getColor()) 078 { 079 state.makeMove(game.getMoveHistory().get( 080 game.getMoveHistory().size() - 1)); 081 } 082 } 083 }