Проблемы объявления

Значит разрабатываю игру с помощью библиотеки javaFX. Возникла потребность оптимизации кода, чтобы развить некоторую идею функционала. Решил, чтобы код был более удобным для чтения покидать некоторые вещи в функции, которые изначально просто весели и повторялись, однако как бы не пытался исправить проблему приходил к одному - ошибкам синтаксиса.

Вот код для вывода окна победы:

if (gameLogic.checkWin(currentPlayer)) {
        showGameResult(primaryStage, "Победитель: игрок " + currentPlayer);
    } else if (gameLogic.allCellsFilled()) {
        showGameResult(primaryStage, "Ничья!");
    }

    if(currentPlayer == player1.getId())
        currentPlayer = player2.getId();
    else
        currentPlayer = player1.getId();

Он представляет собой простое взятие информации из отдельного класса и все работает хорошо, если оно помещено в сам код хода:

if(playWithBot){

    }
    else {
        Click();
        if (gameLogic.checkWin(currentPlayer)) {
            showGameResult(primaryStage, "Победитель: игрок " + currentPlayer);
        } else if (gameLogic.allCellsFilled()) {
            showGameResult(primaryStage, "Ничья!");
        }

        if(currentPlayer == player1.getId())
            currentPlayer = player2.getId();
        else
            currentPlayer = player1.getId();
    }

Однако если я добавлю еще логику игры с ботом и будет две такие повторяющиеся конструкции висеть, то это будет перегрузка кода. Поэтому пришел к выводу, что надо выносить, однако если вынести этот код в функцию и за стартовую функцию(start), то идет жалоба на primaryStage:

private void check(){
    if (gameLogic.checkWin(currentPlayer)) {
        showGameResult(primaryStage, "Победитель: игрок " + currentPlayer);
    } else if (gameLogic.allCellsFilled()) {
        showGameResult(primaryStage, "Ничья!");
    }

    if(currentPlayer == player1.getId())
        currentPlayer = player2.getId();
    else
        currentPlayer = player1.getId();
}

В чем проблема моего кода?(даже если в стартовой функции это делать, то он жалуется)


Ответы (1 шт):

Автор решения: doflare

Оказалось все не так сложно, просто в эту функцию надо было предавать primaryStage:

public  void Check(Stage primaryStage) {
    if (gameLogic.checkWin(currentPlayer))
        showGameResult(primaryStage, "Победитель: игрок " + currentPlayer);
    else if (gameLogic.allCellsFilled())
        showGameResult(primaryStage, "Ничья!");
}
→ Ссылка