public Move chooseMove(State s) {
		// remember who we are so we can correctly evaluate states
		me = s.whoseTurn();
		int myBoundary = -10000;
		// The rest of this function looks a lot like evalMove, except
		// that it doesn't just track the minimaxvalue, but also the
		// best move itself.

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

		Collections.shuffle(moves);
		// shuffle so we don't always take the same maximum

		// return if there are no moves
		if (moves.size() == 0)
			return null;

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

		// We already know there is at least one move, so use it to
		// initialize minimaxvalue
		Move bestMove = (Move) it.next();
		long startTime = System.currentTimeMillis();
		int minimaxvalue = evalMove(bestMove, s, maxdepth, myBoundary);

		// now the rest of the moves
		while (it.hasNext()) {
			Move move = (Move) it.next();
			int eval = evalMove(move, s, maxdepth, myBoundary);
			if ( eval > myBoundary){
				myBoundary = eval;
			}
			// if we found a better move, remember it
			if (eval > minimaxvalue) {
				minimaxvalue = eval;
				bestMove = move;
			}
		}
		long estimatedTime = System.currentTimeMillis() - startTime;
		System.out.println("MickAI:" + estimatedTime);
		return bestMove;
	}