【发布时间】:2016-02-10 12:35:58
【问题描述】:
我正在用 java 编程记忆游戏。一切正常,但是当我想转第二张卡时它什么也没做。我需要至少看到这张卡一秒钟,但睡眠命令不起作用。有谁知道该怎么做?
package MatchJavaFX;
import javafx.collections.ObservableList;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.control.Label;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
public class TheHandler implements EventHandler<MouseEvent> {
int player1Score;
int player2Score;
boolean player1 = true;
ObservableList<Node> selectedPane_1_Label;
ObservableList<Node> selectedPane_2_Label;
Pane selectedPane1;
Pane selectedPane2;
int count = 0;
@Override
public void handle(MouseEvent t) {
Node selected = (Node) t.getTarget();
if (selected instanceof Pane) {
count++;
if (count %2==1) { //prvni klik
selectedPane1 = (Pane) selected; // vybere policko
selectedPane_1_Label = selectedPane1.getChildren(); //vezme info z policka
if (selectedPane_1_Label.get(0) instanceof Label)
{
((Label) selectedPane_1_Label.get(0)).setVisible(true); // "otoci kartu"
}
} else if (count %2== 0) { // druhy klik
selectedPane2 = (Pane) selected; // vybere policko
selectedPane_2_Label = selectedPane2.getChildren(); //vezme info z policka
if (selectedPane_2_Label.get(0) instanceof Label)
{
((Label) selectedPane_2_Label.get(0)).setVisible(true); // melo by otocit druhou kartu ?? --- THIS DOESNT WORK ?
}
// pokud se policka rovnaji tak :
if (((Label) selectedPane_1_Label.get(0)).getId().equals(((Label) selectedPane_2_Label.get(0)).getId())) {
((Label) selectedPane_1_Label.get(0)).setVisible(true); // ponecha viditelnou kartu
((Label) selectedPane_2_Label.get(0)).setVisible(true); // ponecha viditelnou kartu
if (player1) { // hraje hrac 1
player1Score++; // ricteni k jeho skore (pokud otoci dve stejne karty)
player1 = false;
MainJavaFX.score.setText("HRAC1 = " + player1Score + " - HRAC2 = " + player2Score);
MainJavaFX.status.setText("Hraje HRAC2:"); // change to player 2
checkWinner(); // konec hry ?
} else { // else hraje hrac 1
player2Score++; // pricteni k jeho skore (pokud otoci dve stejne karty)
player1 = true;
MainJavaFX.score.setText("HRAC1 = " + player1Score + " - HRAC2 = " + player2Score);
MainJavaFX.status.setText("Hraje HRAC1:"); // change to player 1
checkWinner();// konec hry ?
}
} else { // else pokud se ty 2 karty nerovnaji
/*try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}*/
((Label) selectedPane_1_Label.get(0)).setVisible(false); // schova kartu
((Label) selectedPane_2_Label.get(0)).setVisible(false);
if (player1) { // hraje hrac 1
player1 = false;
MainJavaFX.status.setText("Hraje HRAC2:"); // prepne na hrace 2
checkWinner(); // konec hry ?
} else { // hrac 2 hraje
player1 = true;
MainJavaFX.status.setText("Hraje HRAC1:"); // prepne na hrace 1
checkWinner(); //konec hry ?
}
}
MainJavaFX.status.setAlignment(Pos.CENTER);
}
}
}
void checkWinner() { // pokud hra skonci
if (player1Score + player2Score == MainJavaFX.gridSize * 2) { // if score = number of labels
if (player1Score > player2Score) // porovnani skore
{
MainJavaFX.status.setText("Vyhral HRAC1");
} else if (player1Score < player2Score) // porovnani skore
{
MainJavaFX.status.setText("Vyhral HRAC2");
} else if (player1Score == player2Score) // stejne skore
{
MainJavaFX.status.setText("Nerozhodne");
}
}
}
}
【问题讨论】:
-
这不是最小、完整和可验证的示例。
-
我不明白。我还需要做什么?
-
而且你的 Code cmets 没用。因为它们不是英文的,所以更难阅读您的代码。
-
您需要创建一个minimal reproducible example。它应该是 minimal (即足以显示问题,但仅此而已)和 complete (这意味着我们应该能够编译并按原样运行它)。
-
感谢您让我知道。我尝试再次提出问题,但更好。
标签: java windows multithreading intellij-idea javafx