「ミリオネアになりたい人」ゲームを書いていて、すべてをセットアップしましたが、タイマーの問題です。
ゲームは次のように機能します。ユーザーが質問に正解すると、次に進みます。そうでない場合、ゲームは終了し、再びプレイすることを選択できます。
ゲームが最初に実行されたときは問題なく、タイマーは本来の動作を行います。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();
助けてください。さらに情報が必要な場合は、お尋ねください。