Кто подскажет, все уровни прошел, игра корректно не отображается... где я наплужил?)
public class MinesweeperGame extends Game {

    private static final int SIDE = 9;
    private int countMinesOnField;
    private int countFlags;
    private int countClosedTiles = SIDE * SIDE;
    private int score = 0;
    private boolean isGameStopped;
    private final static String MINE = "\uD83D\uDCA3";
    private final static String FLAG = "\uD83D\uDEA9";

    private GameObject[][] gameField = new GameObject[SIDE][SIDE];

    private void createGame() {

        for (int i = 0; i < SIDE; i++) {
            for (int j = 0; j < SIDE; j++) {
                if (getRandomNumber(10) == 1) {
                    gameField[j][i] = new GameObject(i, j, true);
                    countMinesOnField++;
                } else {
                    gameField[j][i] = new GameObject(i, j, false);
                }
                setCellColor(i, j, Color.BLUE);
                setCellValue(i, j, "");
            }
        }
        countMineNeighbors();
        countFlags = countMinesOnField;
    }

    private List<GameObject> getNeighbors(GameObject gameObject) {
        List<GameObject> countOfNeighbours = new ArrayList<>();
        try {
            countOfNeighbours.add(gameField[gameObject.y][gameObject.x + 1]);
            countOfNeighbours.add(gameField[gameObject.y + 1][gameObject.x + 1]);
            countOfNeighbours.add(gameField[gameObject.y + 1][gameObject.x]);
            countOfNeighbours.add(gameField[gameObject.y + 1][gameObject.x - 1]);
            countOfNeighbours.add(gameField[gameObject.y][gameObject.x - 1]);
            countOfNeighbours.add(gameField[gameObject.y - 1][gameObject.x - 1]);
            countOfNeighbours.add(gameField[gameObject.y - 1][gameObject.x]);
            countOfNeighbours.add(gameField[gameObject.y - 1][gameObject.x + 1]);
        } catch (IndexOutOfBoundsException e) {
        }

        return countOfNeighbours;
    }

    private void countMineNeighbors() {

        for (int i = 0; i < SIDE; i++) {
            for (int j = 0; j < SIDE; j++) {
                if (!gameField[j][i].isMine) {
                    List<GameObject> neighbours = getNeighbors(gameField[j][i]);
                    for (GameObject object : neighbours) {
                        if (object.isMine) {
                            gameField[j][i].countMineNeighbors++;
                        }
                    }
                }
            }
        }
    }

    private void openTile(int x, int y) {
        if (!gameField[y][x].isOpen || !gameField[y][x].isFlag || !isGameStopped) {
            gameField[y][x].isOpen = true;
            countClosedTiles--;
            setCellColor(x, y, Color.GREEN);
            if (gameField[y][x].isOpen && !gameField[y][x].isMine) {
                score += 5;
            }
            if (gameField[y][x].isMine) {
                setCellValueEx(x, y, Color.RED, MINE);
                gameOver();
            } else if (gameField[y][x].countMineNeighbors == 0) {
                setCellValue(x, y, "");
                for (GameObject neighbour : getNeighbors(gameField[y][x])) {
                    if (!neighbour.isOpen) {
                        openTile(neighbour.x, neighbour.y);
                    }
                }
            } else if (gameField[y][x].countMineNeighbors != 0) {
                setCellNumber(x, y, gameField[y][x].countMineNeighbors);
            }
            if (countClosedTiles == countMinesOnField && !gameField[y][x].isMine) {
                win();
            }
        }
        setScore(score);
    }

    private void markTile(int x, int y) {
        while (!isGameStopped) {
            if (gameField[y][x].isOpen) {
            } else if (!gameField[y][x].isFlag && countFlags == 0) {
            } else if (!gameField[y][x].isFlag) {
                gameField[y][x].isFlag = true;
                countFlags -= 1;
                setCellValue(x, y, FLAG);
                setCellColor(x, y, Color.YELLOW);
            } else {
                gameField[y][x].isFlag = false;
                countFlags += 1;
                setCellValue(x, y, "");
                setCellColor(x, y, Color.BLUE);
            }
        }
    }

    private void gameOver() {
        isGameStopped = true;
        showMessageDialog(Color.WHITE, "LOOSER", Color.BLACK, 10);
    }

    private void win() {
        isGameStopped = true;
        showMessageDialog(Color.WHITE, "CONGRATS! YOU ARE WINNER!", Color.BLACK, 10);
    }

    private void restart() {
        isGameStopped = false;
        countClosedTiles = SIDE*SIDE;
        score = 0;
        countMinesOnField = countFlags;
        setScore(score);
        createGame();
    }

    @Override
    public void initialize() {
        setScreenSize(SIDE, SIDE);
        createGame();
    }

    @Override
    public void onMouseLeftClick(int x, int y) {
        if (isGameStopped) {
            restart();
        } else {
            openTile(x, y);
        }
    }

    @Override
    public void onMouseRightClick(int x, int y) {
        markTile(x, y);
    }

}