我正在编写“谁想成为百万富翁”游戏,并且我已经完成所有设置,这只是计时器的问题。
游戏的工作方式如下:如果用户正确回答了问题,他/她便会继续前进。如果不是,则游戏结束,他们可以选择再次玩。
游戏首次运行时,一切正常,计时器执行应做的事情-从30秒开始,倒计时,显示秒数。
但是,当用户单击“再次播放”按钮时,先前的计时器将继续使用新的计时器。像这样:
-timerA在用户迷路之前还剩20秒(由a表示)。
-timerB在下次玩游戏时开始(由b表示)。
输出:20a 29b 19a 28b 18a 27b 17a 26b ....... 2a 11b 1a 10b 9b 8b 7b 6b 5b 4b 3b
2b 1b
所以这是我的计时器类CountDown:
import java.util.Timer;
import java.util.TimerTask;
public class CountDown {
static Timer timer;
public static int seconds = 30;
public CountDown() {
timer = new Timer();
timer.schedule(new DisplayCountdown(), 0, 1000);
}
class DisplayCountdown extends TimerTask {
int seconds = 30;
public void run() {
if (seconds == 0) {
timer.cancel();
timer.purge();
return;
}
if (seconds > 0) {
PlayFrame.timer.setText("" + seconds); //jLabel used to display seconds
seconds--;
if (seconds < 30) {
if (PlayFrame.right == true) { //check if question was answered correctly
System.out.print("true"); //testing purposes
PlayFrame.right = false;
PlayFrame.showQuestion();
PlayFrame.startTimer();
seconds = 0;
//break;
}
else if (PlayFrame.right == false) {
//break;
}
}
else if (seconds == 0) { //if time runs out its automatic wrong answer
PlayFrame.wrong();
//break;
}
else {
PlayFrame.wrong();
PlayFrame.timer.setText(null);
timer = new Timer();
//break;
}
}
System.out.println(seconds); // for testing purposes only
}
}
}
这是我的一些PlayFrame:
import java.awt.Color;
import java.util.Timer;
public class PlayFrame extends javax.swing.JFrame {
public static void wrong() {
//determines which losing frame to show
if (count <= 2){
LossLevel0 L0 = new LossLevel0();
L0.setVisible(true);
}
else if (count > 2 && count <= 6 && count != 6){
LossLevel1 L1 = new LossLevel1();
L1.setVisible(true);
}
else {
LossLevel1 L1 = new LossLevel1();
L1.setVisible(true);
}
//"supposed" to stop the timer
CountDown.timer.cancel();
CountDown.timer.purge();
}
public static void startTimer() {
//creates new CountDown object and timer, also resets seconds
CountDown countdown = new CountDown();
CountDown.timer = new Timer();
CountDown.seconds = 30;
}
我认为问题可能出在我重新启动游戏时。唯一的代码是我在游戏开始之前将所有变量重置为原始状态。像这样:
// Reset Everything
PlayFrame.count = 0;
PlayFrame.answer = new String();
PlayFrame.count = 0;
PlayFrame.right = false;
PlayFrame.winnings = 0;
CountDown.seconds = 30;
CountDown.timer = new Timer();
CountDown.timer.cancel();
CountDown.timer.purge();
请帮忙,如果您需要更多信息,请询问!
解决了,谢谢链接sage88!http://albertattard.blogspot.com/2008/09/practical-example-of-
swing-timer.html
并提供有关摆动计时器的更多帮助(以供将来对此主题进行搜索)http://www.asjava.com/swing/java-timer-
tutorial/
public static void startTimer() {
listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
System.out.print("action");
timerLabel.setText("" + seconds);
seconds--;
System.out.println(seconds);
if (seconds < 0){
System.out.print("zero");
wrong();
}
}
};
displayTimer = new Timer(1000, listener);
displayTimer.setInitialDelay(1);
displayTimer.start();
if (right == true){
System.out.print("true");
displayTimer.stop();
right = false;
seconds = 30;
displayTimer = new Timer(10000, listener);
displayTimer.setDelay(10000);
displayTimer.setInitialDelay(1);
displayTimer.start();
}
else if (right == null){
System.out.print("null");
displayTimer.stop();
seconds = 30;
displayTimer = new Timer(10000, listener);
displayTimer.setInitialDelay(1);
displayTimer.setDelay(10000);
displayTimer.start();
}
}
我正在做一个游戏,但是我在使用“相交”功能时遇到了一个问题。塞纳里奥看起来像这样;我做了一个游戏,玩家是一个长方形,目标是杀死敌人。敌人的“老板”矩形有两个“模拟”,模拟一个运动和一个攻击。这些模拟是由向量驱动的。移动是水平来回的,攻击是垂直的,一种冲锋式的交易。boss也有一个矩形的目标区域,如果被截断,“boss”将在屏幕上冲锋。现在问题来了,当我试图让它,如果球员与矩形目标区域相交,“老板”
我有一个简单的文件格式,我想用jison解析器生成器解析。这个文件可以由任意顺序和数量的多个表达式组成。这是解析器的jison文件: 为了简单起见,我将文件缩短为只有字符串和文件id表达式。 我的问题是,如果第二个表达式只包含一个类似令牌的字符串,那么生成的解析器似乎只能识别一个或两个完整的表达式。例如: 文件版本: 1.0 将被解析,或者 文件版本:1.0“我的字符串” 也将被解析,但对于 文件
我正在使用“pcregrep”在UNIX中实现多行搜索。我希望匹配在第一次出现时停止。 例如,如果我在文件中有以下文本: 我想打印,直到'ain'在'name'之后第一次出现。所以我只需要打印: 我正在执行: 但是,我得到的输出为:
当试图弄清楚如何使某些jasmine期望语句依赖于先前的期望语句时,我发现在Jasmine 2.3.0之前,没有办法。(请参阅第一次期望失败后停止jasmine测试)但是,Jasmine 2.3.0添加了一个选项,当设置为true时将停止对第一次失败的测试。 对这个前景感到兴奋,我修改了我的conf.js以包括以下选项: 但是这对我不起作用。 在我的测试中,我有: 在上面的代码中,将尝试两个期望语
问题内容: 我已将一个WAR文件部署到Tomcat服务器,该类之一将在启动时调用,然后init()方法将安排一个计时器,每5小时触发一次以执行一些任务。 我的init()代码如下所示: 我的应用程序运行没有问题,但是当我使用 /etc/init.d/tomcat7 stop 关闭Tomcat时,我检查了日志(catalina.out),它具有以下条目: 严重:Web应用程序[/ MyApplica
我有一个Swing计时器(javax.swing.Timer),用于在自定义Swing组件中执行一些动画。 然而,这会导致问题——特别是,即使在所有窗口都关闭后,它似乎也会阻止应用程序终止,因为实时计时器线程。此外,当看不到动画时,最好避免计时器在隐藏对象上运行的开销。 理想情况下,我希望做到以下几点: < li >当组件隐藏时停止计时器 < li >每当组件变得可见时,重新启动计时器 这是可能的