我正在编写一个游戏," Memo-Test":
成对的小块,混合,面朝下,每转一圈,玩家变成两件:如果它们是相同的,它们被移除(面朝上),如果它们不同,程序等待1第二,让玩家记住他们的位置,然后将他们面朝下。
我为大学作业编程。一般来说,订购,混合件,点击并使它们转动,工作正常。
一切都很好,直到我必须实施"一秒等待" (void espera(int i,我将定义等待的秒数):
public void espera(int i) {
try {
TimeUnit.SECONDS.sleep(i);
} catch (InterruptedException ex) {
Logger.getLogger(PRO2PracticaFinal.class.getName()).log(Level.SEVERE, null, ex);
}
}
起初,我做了它" TimeUnit.SECONDS.sleep(1)"在同一方法中,在" joc.espera(1)"行,等等:
joc.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
if (!jugada) {
mouse_x1 = e.getX() / 150;
mouse_y1 = e.getY() / 150;
id_1 = joc.getID(mouse_x1, mouse_y1);
joc.click(mouse_x1, mouse_y1);
jugada = true;
joc.inicia(true);
} else {
mouse_x2 = e.getX() / 150;
mouse_y2 = e.getY() / 150;
id_2 = joc.getID(mouse_x2, mouse_y2);
joc.click(mouse_x2, mouse_y2);
jugada = false;
joc.torn++;
joc.imprimir_matriu();
if (id_1 == id_2) {
joc.set_trobades(mouse_x1, mouse_y1, mouse_x2, mouse_y2);
}
joc.espera(1);
joc.tapa_jugada();
}
}
});
想法是click()方法转动棋子(面朝上),一旦面朝上(并增加转弯等),开始等待1秒并再次覆盖所有。
问题出现在这里:
在卡面朝上转动之前等待开始,导致两种情况:
**案例1 **:两个芯片是相同的,当转动第一个时,没有问题。但是当转动第二个时:单击,开始等待,然后转动选项卡,并调用覆盖除找到的对之外的所有内容的方法(tapa_jugada)。它应该在转动标签后运行等待。
**案例2 **:两张卡不同,转第一张时没有问题。当转动第二个时:点击,开始等待,当等待结束时,快速将面朝上的卡片(甚至没有注意到)执行覆盖所有转动面朝下的方法(不允许玩家看到它) )。
为什么会这样?为什么不按代码的顺序执行?我试过就像我在这里提到的那样,在同一个类中调用一个方法,甚至在另一个类中调用方法(做同样的事情,等待)。但我总能得到相同的结果。为什么它不遵循代码顺序?