private static Node maxValue(Node n, int color, int depth, int alpha, int beta) {
		// Test if we have hit the max depth, or if the node has a state of solved
		if (depth <= 0 || n.b.gameIsOver()) {
			return n;
		}

		Node a = new Node();
		a.evaluation = alpha;
		int opponentColor = Board.opponentColor(color);

		ArrayList<Move> actions = GenerateSuccessors.allPossibleSuccessors(n.b, color);
		int numberOfSuccessors = actions.size();
		for (Move m : actions) {
			Board tempBoard = new Board(n.b);
			//tempBoard.handleMove(m);
			Node tempNode = new Node(tempBoard, m, Evaluator.evaluateBoard(tempBoard, m, color, numberOfSuccessors));
			Node minNode = minValue(tempNode, opponentColor, depth - 1, a.evaluation, beta);
			if (minNode.compareTo(a) > 0) {
				a = tempNode;
			}
			if (beta <= a.evaluation) {
				break;
			}
		}
		return a;
	}