如何在计时器下运行命令?以下

时间:2015-10-06 14:26:03

标签: java timer

如果我写了与我的问题无关或错误的任何内容,请原谅我,因为这实际上是我第一次在这个网站上提出问题,我也只是最近刚开始使用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行,包括程序中不必要的注释,如果您要求我这样做,我将不得不删除不相关的注释。

同样,我会强调玩家可以在计时器倒计时的同时回答的部分。

1 个答案:

答案 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
}

注意: timeExceedanswered是两个线程之间的共享变量。您需要同步对这些变量的访问。这只是一个伪代码,您需要为那些可能存在于另一个类中的变量添加正确的可见性或getter和setter。