1

私は、オセロ ゲームをやっていて、簡単なコードである Ai をしました。しかし、コードを実行すると、クリックした直後に Ai が実行されます。遅延が必要です。どうすればよいかわかりません。前述のように、実行速度が速く、Ai を次のように実行したい2秒。

board.artificialIntelligence();

私のメソッド Ai はボード クラスに保存されており、それをパネル クラスに入れたいのですが、NetBeans を使用しています。

4

8 に答える 8

5

これを行うとThread.sleep(TIME_IN_MILLIS)、ゲームが 2 秒間応答しなくなります (このコードが別のスレッドで実行されている場合を除く)。

私が見ることができる最善のアプローチはScheduledExecutorService、あなたのクラスに を持ち、AI タスクをそれに提出することです。何かのようなもの:

public class AI {

    private final ScheduledExecutorService execService;

    public AI() {
        this.execService = Executors.newSingleThreadScheduledExecutor();
    }

    public void startBackgroundIntelligence() {
        this.execService.schedule(new Runnable() {
            @Override
            public void run() {
                // YOUR AI CODE
            }
        }, 2, TimeUnit.SECONDS);
    }
}

お役に立てれば。乾杯。

于 2013-04-10T14:04:24.727 に答える
4

Swing を使用している場合は、Swing タイマーを使用して、定義済みの遅延の後にメソッドを呼び出すことができます。

Timer timer = new Timer(2000, new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
         board.artificialIntelligence();
      }
   });
timer.setRepeats(false);
timer.start();
于 2013-04-10T13:54:16.047 に答える
2
int numberOfMillisecondsInTheFuture = 2000;
    Date timeToRun = new Date(System.currentTimeMillis()+numberOfMillisecondsInTheFuture);
    timer = new Timer();
    timer.schedule(new TimerTask() {
        public void run() {
                     board.artificialIntelligence();
        }
    }, timeToRun);
于 2013-04-10T14:01:49.393 に答える
0

メイン スレッドをブロックしたくない場合は、次のように、2 秒待機してから呼び出しを行う (その後終了する) 新しいスレッドを開始します。

new Thread(new Runnable() {
    public void run() {
        try {
            Thread.sleep(2000);
        } (catch InterruptedException e) {}
        board.artificialIntelligence();
    }
}).start();
于 2013-04-10T13:58:29.933 に答える
0

を使用Thread.sleep(2000)して 2 秒間待ちます

于 2013-04-10T13:53:53.893 に答える
0

Thread.sleep は、指定された期間、現在のスレッドの実行を中断させます。

あなたの場合:

Thread.sleep(2000); // will wait for 2 seconds
于 2013-04-10T13:54:07.927 に答える
0

コード呼び出しの前に

try {    
    Thread.sleep(2000);

} catch(InterruptedException e) {}
于 2013-04-10T13:54:39.140 に答える
0

次のコードを使用して 2 秒間待ちます。

long t0,t1;
t0=System.currentTimeMillis();
do{
   t1=System.currentTimeMillis();
}while (t1-t0<2000);
于 2013-04-10T13:57:12.910 に答える