import java.util.*;

class Player 
{
	BoardNode boardNode;
	int depth, player;

	Player(int depth, Board board)
	{
		this.depth = depth;
		this.boardNode = new BoardNode(board);
		this.player = board.playerTurn();
	}

	public Move getPreferredMove()
	{
		/* Make and analyze the tree */
		boardNode.createTree(depth, player);
		int results[] = boardNode.considerTree(player);

		/* Find the best move */
		int bestScore = results[0];
		Move bestMove = boardNode.child(0).getMove();
		Random random = new Random();
		int factor = 2;

		for(int i = 1; i < results.length; i++)
		{
			if(results[i] > bestScore)
			{
				bestScore = results[i];
				bestMove = boardNode.child(i).getMove();
				factor = 2;
			}
			else if(results[i] == bestScore)
			{
				if(random.nextInt() % factor++ == 0)
				{
					bestScore = results[i];
					bestMove = boardNode.child(i).getMove();
				}
			}
		}

		return bestMove;
	}		
}

