public Move chooseMove(State s) {
	// remember who we are (evalState likes to know that)
	me = s.whoseTurn();

	// get a list of possible moves
	MyList moves = s.findMoves();

	// return if there are no moves
	if (moves.size() == 0)
	    return null;
	
	// introduce some randomness
	Collections.shuffle(moves);

	// Iterate over all moves
	Iterator it = moves.iterator();

	// We already know there is at least one move, so use it to
	// initialize max and bestMove.
	Move bestMove = (Move) it.next();
	int max = evalState(s.tryMove(bestMove));

	// now the rest of the moves
	while (it.hasNext()) {
	    Move move = (Move) it.next();
	    int eval = evalState(s.tryMove(move));
	    // if we found a better move, remember it
	    if (eval > max) {
		max = eval;
		bestMove = move;
	    }
	}

	return bestMove;
    }