public static int evaluateBoard(Board b, Move m, int color, int numberOfSuccessors) {
		int sum = 0;
		int opponentColor = Board.opponentColor(color);

		try {
			boolean isCapture = Board.isCaptureMove(b, m, color);
			if (isCapture) {
				sum += bounty(b, m.end.rank, m.end.file, opponentColor);
			}
			b.handleMove(m);
			// Handle kings
			sum += 200 * (b.numberOfPieces(6 * color) - b.numberOfPieces(6 * opponentColor));
			// Handle queens
			sum += 9 * (b.numberOfPieces(5 * color) - b.numberOfPieces(5 * opponentColor));
			// Handle rooks
			sum += 5 * (b.numberOfPieces(4 * color) - b.numberOfPieces(4 * opponentColor));
			// Handle Bishops and Knights
			sum += 3 * (
					(b.numberOfPieces(3 * color) - b.numberOfPieces(3 * opponentColor) +
					(b.numberOfPieces(2 * color) - b.numberOfPieces(2 * opponentColor))));
			// Handle pawns
			sum += 1 * (b.numberOfPieces(1 * color) - b.numberOfPieces(1 * opponentColor));
			// Handle doubled, blocked, and isolated pawns
			sum -= 0.5 * ((numberOfDoubledPawns(b, color) - numberOfDoubledPawns(b, opponentColor) +
					(numberOfBlockedPawns(b, color) - numberOfBlockedPawns(b, opponentColor)) +
					(numberOfIsolatedPawns(b, color) - numberOfIsolatedPawns(b, opponentColor))));
			// Handle number of legal successors for opponent
			ArrayList<Move> actions = GenerateSuccessors.allPossibleSuccessors(b, opponentColor);
			sum += 0.1 * (numberOfSuccessors - actions.size());
			// Adjust for the color
			if (b.color == Board.white && color == Board.black) {
				sum *= -1;
			} else if (b.color == Board.black && color == Board.white) {
				sum *= -1;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return sum;
	}