我正在做一个奥赛罗游戏,我做了一个Ai,这是一个简单的代码。但是当我运行我的代码时,Ai在我点击后运行,我想要一些延迟,我真的不知道该怎么做,正如我所说,它运行得太快了,我想让Ai在2秒后运行。
board.artificialIntelligence();
我的方法Ai是存储在板类,我想在我的面板类,顺便说一句,我使用NetBeans。
如果你使用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);
}
}
希望这对你有帮助。欢呼。
如果您正在使用Swing,您可以使用Swing Timer在预定义的延迟之后调用该方法
Timer timer = new Timer(2000, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
board.artificialIntelligence();
}
});
timer.setRepeats(false);
timer.start();
int numberOfMillisecondsInTheFuture = 2000;
Date timeToRun = new Date(System.currentTimeMillis()+numberOfMillisecondsInTheFuture);
timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
board.artificialIntelligence();
}
}, timeToRun);
使用Thread.sleep(2000)
等待2秒
线程。休眠导致当前线程暂停执行指定的时期。
在你的例子中:
Thread.sleep(2000); // will wait for 2 seconds
在代码调用之前
try {
Thread.sleep(2000);
} catch(InterruptedException e) {}
使用下面的代码等待2秒:
long t0,t1;
t0=System.currentTimeMillis();
do{
t1=System.currentTimeMillis();
}while (t1-t0<2000);
如果你不想让主线程阻塞,启动一个等待2秒然后调用(然后死亡)的新线程,像这样:
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(2000);
} (catch InterruptedException e) {}
board.artificialIntelligence();
}
}).start();