如果我写了与我的问题无关或错误的任何内容,请原谅我,因为这实际上是我第一次在这个网站上提出问题,我也只是最近刚开始使用Java编程,所以请为我提供一些我无法完全掌握的术语和概念。
所以我们的任务是创建一个基本的Text Twist游戏,我们的目标之一是创建一个计时器,它将在完成后终止当前级别,但是,我们还需要在播放器定时器时询问播放器的答案运行。
所以我和我的小组决定将玩家的尝试限制在30并且我们允许玩家回答300秒(5分钟)。
如果满足上述要求之一,则当前等级将终止。
所以我们在这种情况下使用 FOR循环,我们的代码在下面。 请注意,我们在下面使用的所有变量都已在程序开头正确初始化,并且下面的代码只是我们冗长代码的一小部分。
顺便说一下,下面的代码只是循环语句的缩短(非常短)版本。我只是粘贴在那里给你们一个关于我们如何完成这个程序的预览。
for (tries=1; tries<=30; tries++)
{
System.out.println();
System.out.println("====================");
System.out.println("Again, the twist is: " + twistlaptop);
System.out.println();
System.out.println("You have found " + guesslaptop + " words.");
System.out.println("Try #" + tries + ".");
System.out.println();
System.out.println("Current score: " + disp.format(score));
System.out.println();
System.out.print("Enter your answer: ");
guess=input.next();
guess=guess.toLowerCase();
System.out.println();
}
我们使用了&#34; LAPTOP,&#34;对于第一级中的源词。所以留给我们的只是计时器。请记住,上面的代码需要在同时作为计时器运行,并且当其中一个(30次尝试完成或300秒已经过)完成时,级别1终止并且级别2启动。
我非常愿意在此处粘贴整个代码,但代码中包含2,277行,包括程序中不必要的注释,如果您要求我这样做,我将不得不删除不相关的注释。
同样,我会强调玩家可以在计时器倒计时的同时回答的部分。
答案 0 :(得分:1)
根据您对待加班的方式,有两种不同的答案:
对于第一种方法,只需执行以下操作:
long now = System.currentTimeMillis();
// Your code to post the question
long after = System.currentTimeMillis();
if (after - long > MAX_WAIT_MILLISECONDS) {
System.out.println("Response not accepted time exceeded");
} else {
// Accept the answer
}
第二种方法更复杂,因为您需要启动第二个线程(例如在计时器中),在MAX_WAIT_MILLISECONDS显示消息并更改共享变量之后(您需要使用同步或至少是volatile,在多线程上搜索信息)知道如何做到这一点)当用户尝试回答时检查。
第二种方法的可能替代方案:
第一个帖子
第二个线程(计时器)
// Run method of TimerTask
public void run() {
if (!answered) {
System.out.println("Time exceeded");
timeExceed = true;
}
}
// Main thread
// Print the question
startTimer(); // Use Timer and TimerTask
guess = input.next();
if (timeExceed) {
System.out.println("Time exceeded your answer is not accepted");
} else {
answered = true;
// Handle answer
}
注意: timeExceed
和answered
是两个线程之间的共享变量。您需要同步对这些变量的访问。这只是一个伪代码,您需要为那些可能存在于另一个类中的变量添加正确的可见性或getter和setter。