0

私はコンソールの Boggle ゲームを書いていますが、gameLoop のロジックは、本来あるべきだと思っているものではありません。

私の基本的なゲームループ方法は次のとおりです。

    public void gameStart() {
        timer.schedule(new BoggleTimerTask(1),0);
        gameActive = true;
        System.out.println(boggle.getBoggleTrayAsString());
        while (gameActive) {
            String word = scanner.next();
            boggle.addGuess(word);
        }
        scanner.close();
        timer.cancel();
        postGame();
    }

私のタイマー タスク クラスの run メソッドは次のようになります。

    public void run() {
        if (minutesRemaining == 4 || minutesRemaining == 3 || 
                minutesRemaining == 2)
            minutesRemaining--;
        else if (minutesRemaining == 1 || minutesRemaining == .5)
            minutesRemaining -= .5;
        if (minutesRemaining == 3) {
            System.out.println("3 minutes remaining.");
            timer.schedule(new BoggleTimerTask(minutesRemaining),60000);
        }
        else if (minutesRemaining == 2) {
            System.out.println("2 minutes remaining.");
            timer.schedule(new BoggleTimerTask(minutesRemaining),60000);
        }
        else if (minutesRemaining == 1) {
            System.out.println("1 minute remaining.");
            timer.schedule(new BoggleTimerTask(minutesRemaining),
                    30000);
        }
        else if (minutesRemaining == .5) {
            System.out.println("30 seconds remaining.");
            timer.schedule(new BoggleTimerTask(minutesRemaining),
                    30000);
        }
        else {
            System.out.println("Time's Up!");
            gameActive = false;
        }

タイマーは、私が思うように正確にカウントダウンします。"時間切れ!" 同様に出力されますが、postGame() は呼び出されません。私は当初、問題はメイン スレッドが scanner.next() を待機していることだと考えていたので、Robot クラスを使用し、VK_ENTER でキーを押してキーを離すことを呼び出す解決策を見つけましたが、それは機能しませんでした。

次に、gameLoop に単語のチェックを追加してみました。(word.compareTo("quit") == 0) gameActive = false の場合のチェックを追加しました。それは、私が個人的に quit を単語として入力したとき、またはロボットで quit と入力したときに postGame() を呼び出します。

だから私はこれを推測しました:gameLoopは終了し、gameActive = falseで「Time's Up!」の場合、プログラムをpostGame()に送信します。印刷されているため、最後のelseブロックがタイマーで適切にキャッチされています。これら 2 つが連携して適切に実行されない理由 (または、少なくともどのように実行する必要があるか) はわかりません。

誰かが提供できるどんな助けも大歓迎です。前もって感謝します。

4

1 に答える 1