我正在编写一个控制台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调用按键和键释放,但是没有用。
然后我尝试在gameLoop中添加对单词的检查。我添加了检查if(word.compareTo(“quit”)== 0)gameActive = false。当我个人输入退出单词或者拼出退出并进入机器人时,这确实会调用postGame()。
所以我猜测了这一点:gameLoop终止并在gameActive = false和“Time's Up!”时将程序发送到postGame()。正在打印所以最后一个其他块正在计时器中正确捕获。为什么这两个不能正常工作(或者至少我认为它应该如何执行)我不知道。
非常感谢任何人提供的帮助。提前谢谢。
答案 0 :(得分:0)
我认为你需要运行两个线程来做这样的事情(比机器人更好)。
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();
}
只需定义功能即可获得游戏。