我正在编写“谁想成为百万富翁”游戏,并且我已经完成所有设置,这只是计时器的问题。
游戏的工作方式如下:如果用户正确回答了问题,他/她便会继续前进。如果不是,则游戏结束,他们可以选择再次玩。
游戏首次运行时,一切正常,计时器执行应做的事情-从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(); } }