6

基本的に、私はテキスト ベースの「ゲーム」を作成しています (ゲームというよりは、Java の基本的なスキルとロジックを向上させるための方法です)。ただし、その一部として、タイマーが必要です。変数から 0 までの時間をカウントダウンします。今、GUI を使用してこれを行う方法をいくつか見てきましたが、GUI/jframe などを使用せずにこれを行う方法はありますか?

それで、私が疑問に思っているのは。gui/jframe を使用せずに x から 0 までカウントダウンできますか。もしそうなら、あなたはこれについてどうしますか?

ありがとう、いくつかのアイデアがあれば、進行中に編集します。

編集

// Start timer
Runnable r = new TimerEg(gameLength);
new Thread(r).start();

上記は、スレッド/タイマーを呼び出す方法です

public static void main(int count) {

これを TimerEg クラスに含めると、タイマーは準拠します。ただし、他のスレッドでメインをコンパイルすると、取得されます。

エラー

さて、私はスレッドを完全に理解していませんか?これがどのように機能するのでしょうか? または、私が見逃しているものがありますか?

エラー:

constructor TimerEg in class TimerEg cannot be applied to given types;
required: no arguments; found int; reason: actual and formal arguments differ in length

オンラインで発見Runnable r = new TimerEg(gameLength);

4

3 に答える 3

9

GUI と同じようにタイマーを使用しますが、ここでは Swing タイマーを使用する代わりに、java.util.Timer を使用します。詳細については、Timer APIを参照してください。これをタイマーと組み合わせて使用​​ するため、TimerTask APIもご覧ください。

例えば:

import java.util.Timer;
import java.util.TimerTask;

public class TimerEg {
   private static TimerTask myTask = null;
   public static void main(String[] args) {
      Timer timer = new Timer("My Timer", false);
      int count = 10;
      myTask = new MyTimerTask(count, new Runnable() {
         public void run() {
            System.exit(0);
         }
      });

      long delay = 1000L;
      timer.scheduleAtFixedRate(myTask, delay, delay);
   }
}

class MyTimerTask extends TimerTask {
   private int count;
   private Runnable doWhenDone;

   public MyTimerTask(int count, Runnable doWhenDone) {
      this.count = count;
      this.doWhenDone = doWhenDone;
   }

   @Override
   public void run() {
      count--;
      System.out.println("Count is: " + count);
      if (count == 0) {
         cancel();
         doWhenDone.run();
      }
   }

}
于 2012-09-23T21:00:56.610 に答える
5

次のように、独自のカウントダウンタイマーを作成できます。

public class CountDown {
    //Counts down from x to 0 in approximately
    //(little more than) s * x seconds. 
    static void countDown(int x, int s) {
        while (x > 0 ) { 
            System.out.println("x = " + x); 
            try {
                Thread.sleep(s*1000);
            } catch (Exception e) {}
            x--;
        }   
    }

    public static void main(String[] args) {
        countDown(5, 1); 
    }   
}

または、 JavaタイマーAPIを使用できます

于 2012-09-23T21:10:13.343 に答える
0

Javaでカウントダウンするのは簡単です..

      int minute=10,second=60; // 10 min countdown
      int delay = 1000; //milliseconds
  ActionListener taskPerformer = new ActionListener() {
  public void actionPerformed(ActionEvent evt) {
      second--;
      // do something with second and minute. put them where you want.
      if (second==0) {
          second=59;
          minute--;

          if (minute<0) {
              minute=9;
          }
      }
  }
};
new Timer(delay, taskPerformer).start();
于 2014-07-14T12:03:37.263 に答える