Boggle游戏循环逻辑



我正在写一个控制台Boggle游戏,但gameRoop逻辑并不是我认为的那样。

我的基本游戏循环方法是:

    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();
    }

我的计时器任务类运行方法如下:

    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调用按键和按键释放,但没有成功。

然后我试着在gameRoop中添加一个单词检查。我添加了check if(word.compareTo("quit")==0)gameActive=false。无论是当我亲自输入quit作为单词时,还是当我拼写出quit并用Robot输入时,它都会调用postGame()。

所以我推测了这么多:当gameActive=false并且"Time's Up!"正在打印时,gameRoop确实会终止并将程序发送到postGame(),因此最后一个其他块会在计时器中正确捕获。我不知道为什么这两者不能协同工作以正确执行(或者至少我认为它应该如何执行)。

如果有人能提供任何帮助,我们将不胜感激。提前谢谢。

我认为需要运行两个线程才能完成这样的操作(比robot更好)。

public static void main(String[] args) {
    new Thread() {
        public void run() {
            while(true) {
                String input = new Scanner(System.in).nextLine();
                doSomethingWithInput(input);
            }
        }
    }.start();
    new Thread() {
        public void run() {
            int time = 4;
            while(time > 0) {
                System.out.println(time + " seconds left.");
                printGameBoard();
                time--;
                Thread.sleep(1000);                    
            }
            printScore();
            System.exit(0);
        }
    }.start();
}

只要定义函数,你就有了自己的游戏。

相关内容

  • 没有找到相关文章

最新更新