【发布时间】:2013-08-01 02:00:49
【问题描述】:
我正在编写一个控制台 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();
}
我的定时器任务类运行方法如下:
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 调用按键和按键释放的解决方案,但没有奏效。
然后我尝试在游戏循环中添加对单词的检查。我添加了检查 if (word.compareTo("quit") == 0) gameActive = false。当我个人输入 quit 作为单词或拼写 quit 并使用 Robot 输入时,这都会调用 postGame()。
所以我推测了这么多:当 gameActive = false 和“时间到了!”时,gameLoop 确实终止并将程序发送到 postGame()。正在打印,因此最后一个 else 块正在计时器中适当地捕获。为什么这两者不能协同工作以正确执行(或者至少我认为它应该如何执行)我不知道。
如果有人能提供任何帮助,我们将不胜感激。提前致谢。
【问题讨论】:
标签: timer timertask game-loop boggle