Piszę gierkę Memory. Ma ona działać następująco: Gracz klika - odkrywa dwie karty na planszy i jeśli są one identyczne, pozostają odkryte a gracz zdobywa punkt. Jeśli natomiast są różne, zakrywają się ponownie.
Za klikanie i okrywanie kart odpowiada metoda setOnAction na buttonie.
W pierwszym ifie danej tury: (w metodzie setOnAction)
1.Klikniętemu przyciskowi kasowana jest klasa(StyleClass) odpowiadająca za wygląd karty nieodkrytej i dodawana jest klasa odpowiadająca za wygląd karty odkrytej
2.W polach obiektów gracz1 lub gracz2 zapisywane są potrzebne parametry wybranej pierwszej karty(buttona) oraz w przypadku gracza 2, którym jest komputer, uruchamiana jest metoda odpowiedzialna za 2 ruch - odkrycie drugiej karty.
W drugim ifie:
1.Klikniętemu przyciskowi kasowana jest klasa(StyleClass) odpowiadająca za wygląd karty nieodkrytej i dodawana jest klasa odpowiadająca za wygląd karty odkrytej
2.Do kolejnych pól obiektów gracz1 lub gracz2 zapisywane są potrzebne parametry wybranej drugiej karty
3.Uruchamiana jest metoda Tura(), która sprawdza czy karty są identyczne i w zależności od wyniku dolicza graczowi punkt lub nie i zakrywa ponownie karty lub pozostawia odkryte.
I właśnie w punkcie 3 jest problem. Metoda Tura(); uruchamiana jest przez timer(ponowne zakrywanie kart musi być uruchamiane z opóźnieniem, inaczej zakrywane są szybciej niż zdążą się wyświetlić odkryte). W przypadku gracza - człowieka działa prawidłowo, ale w przypadku komputera działa prawidłowo TYLKO w pierwszej kolejce a w kolejnych wygląda jakby ten Timer się wyłączył, przestał działać - ruch wykonywany jest poprawnie, o czym świadczą komunikaty w konsoli, ale odkryte karty się nie wyświetlają, co sugeruje sytuację opisaną w poprzednim zdaniu - karty zakrywane są szybciej niż zdążą się wyświetlić odkryte, więc z Timerem jest coś nie tak.
Proszę o pomoc
private Button getButtonFromGridPane(GridPane gridPane, int col, int row) {
for (Node node : gridPane.getChildren()) {
if (node instanceof Button
&& GridPane.getColumnIndex(node) == col
&& GridPane.getRowIndex(node) == row) {
return (Button) node;
}
}
return null;
}
Tura
public void Tura(String w1, String w2, int w1_col, int w1_row, int w2_col, int w2_row, String w1_id, String w2_id) {
boolean sprawdzenie = nowagra.Sprawdz(w1, w2);
boolean enabled = false;
boolean disabled = true;
int wynik = gracz1.getWynik();
String styleClass_close = "btnRev";
String styleClass_open = "btn_open";
if(tura == "g1") {
if(sprawdzenie == true) {
System.out.println("Gracz1 -> Identyczne!" + "\n");
wynik++;
gracz1.setWynik(wynik);
gridPane2.getChildren().remove(getButtonFromGridPane(gridPane2, w1_col, w1_row));
GPaddButton(gridPane2,w1_col,w1_row,styleClass_open,w1_id, disabled);
gridPane2.getChildren().remove(getButtonFromGridPane(gridPane2, w2_col, w2_row));
GPaddButton(gridPane2,w2_col,w2_row,styleClass_open,w2_id, disabled);
gracz1.setWybor1("");
gracz1.setWybor2("");
System.out.print("Gracz 1: " + gracz1.getNazwa() + " Wynik: " + gracz1.getWynik() + "\n" + "\n");
// timer.cancel();
}
if(sprawdzenie == false) {
System.out.println("Gracz1 -> Różne!" + "\n" /*+"Col1: " + w1_col + " Row1: " + w1_row + "\n" + "Col2: " + w2_col + " Row2: " + w2_row */ + "\n");
/* gridPane2.getChildren().remove(getButtonFromGridPane(gridPane2, w1_col, w1_row));
GPaddButton(gridPane2,w1_col,w1_row,styleClass_close,w1_id, enabled);
gridPane2.getChildren().remove(getButtonFromGridPane(gridPane2, w2_col, w2_row));
GPaddButton(gridPane2,w2_col,w2_row,styleClass_close,w2_id, enabled);*/
getButtonFromGridPane(gridPane2, gracz1.getWybor1_col(), gracz1.getWybor1_row()).getStyleClass().removeAll(styleClass_open);
getButtonFromGridPane(gridPane2, gracz1.getWybor2_col(), gracz1.getWybor2_row()).getStyleClass().removeAll(styleClass_open);
getButtonFromGridPane(gridPane2, gracz1.getWybor1_col(), gracz1.getWybor1_row()).getStyleClass().add(styleClass_close);
getButtonFromGridPane(gridPane2, gracz1.getWybor2_col(), gracz1.getWybor2_row()).getStyleClass().add(styleClass_close);
//gracz1.setWybor1("");
//gracz1.setWybor2("");
System.out.print("Gracz 1: " + gracz1.getNazwa() + " Wynik: " + gracz1.getWynik() + "\n" + "\n");
timer.cancel();
tura = "g2";
Ruch_Gracz2();
}
}
if(tura == "g2") {
if(sprawdzenie == true) {
System.out.println("Gracz 2 -> Identyczne!" + "\n");
wynik++;
gracz2.setWynik(wynik);
gridPane2.getChildren().remove(getButtonFromGridPane(gridPane2, w1_col, w1_row));
GPaddButton(gridPane2,w1_col,w1_row,styleClass_open,w1_id, disabled);
gridPane2.getChildren().remove(getButtonFromGridPane(gridPane2, w2_col, w2_row));
GPaddButton(gridPane2,w2_col,w2_row,styleClass_open,w2_id, disabled);
gracz2.setWybor1("");
gracz2.setWybor2("");
System.out.print("Gracz 2: " + gracz2.getNazwa() + " Wynik: " + gracz2.getWynik() + "\n" + "\n");
// timer.cancel();
Ruch_Gracz2();
}
if(sprawdzenie == false) {
System.out.println("Gracz 2 -> Różne!" + "\n" /*+ "Col1: " + w1_col + " Row1: " + w1_row + "\n" + "Col2: " + w2_col + " Row2: " + w2_row */);
System.out.print("Gracz 2 -> Wybor 1 Col: "+ w1_col + " Wybor 1 Row: " + w1_row + "\n");
System.out.print("Gracz 2 -> Wybor 2 Col: "+ w2_col + " Wybor 2 Row: " + w2_col + "\n");
System.out.print("Gracz 2 -> Wybór 2 id: " + getButtonFromGridPane(gridPane2, gracz2.getWybor1_col(), gracz2.getWybor1_row()).getId() + "\n");
// getButtonFromGridPane(gridPane2, gracz2.getWybor1_col(), gracz2.getWybor1_row()).getStyleClass().removeAll(styleClass_open);
// getButtonFromGridPane(gridPane2, gracz2.getWybor2_col(), gracz2.getWybor2_row()).getStyleClass().removeAll(styleClass_open);
getButtonFromGridPane(gridPane2, gracz2.getWybor1_col(), gracz2.getWybor1_row()).getStyleClass().add(styleClass_close);
getButtonFromGridPane(gridPane2, gracz2.getWybor2_col(), gracz2.getWybor2_row()).getStyleClass().add(styleClass_close);
gracz2.setTemp1(gracz1.getWybor1());
gracz2.setTemp2(gracz1.getWybor2());
gracz2.setTemp1_col(gracz1.getWybor1_col());
gracz2.setTemp1_row(gracz1.getWybor1_row());
gracz2.setTemp2_col(gracz1.getWybor2_col());
gracz2.setTemp2_row(gracz1.getWybor2_row());
gracz2.setWybor1("");
gracz2.setWybor2("");
gracz1.setWybor1("");
gracz1.setWybor2("");
tura = "g1";
System.out.print("Gracz 2: " + gracz2.getNazwa() + " Wynik: " + gracz2.getWynik() + "\n" + "\n");
timer2.cancel();
// timer2.purge();
// timer2 = null;
}
}
}
Button.setOnAction
button.setOnAction(e -> {
System.out.printf("Mouse enetered cell [%d, %d]%n", colIndex, rowIndex);
if(tura == "g1" ) {
if(gracz1.getWybor1() == "" && gracz1.getWybor2() == "") {
button.getStyleClass().removeAll("btnRev");
button.getStyleClass().add("btn_open");
Label centeredNode = (Label) getCenteredNodeGridPane(gridPane2, colIndex, rowIndex);
gracz1.setWybor1(centeredNode.getText());
gracz1.setWybor1_col(colIndex);
gracz1.setWybor1_row(rowIndex);
gracz1.setWybor1_id(button.getId());
System.out.print("Gracz 1 -> Clicked Label1: " + centeredNode.getText() + "\n");
System.out.print("Gracz 1 -> Wybor1: "+gracz1.getWybor1() + "\n");
}
else if(gracz1.getWybor1() != "" && gracz1.getWybor2() == "") {
button.getStyleClass().removeAll("btnRev");
button.getStyleClass().add("btn_open");
Label centeredNode = (Label) getCenteredNodeGridPane(gridPane2, colIndex, rowIndex);
gracz1.setWybor2(centeredNode.getText());
gracz1.setWybor2_col(colIndex);
gracz1.setWybor2_row(rowIndex);
gracz1.setWybor2_id(button.getId());
System.out.print("Gracz1 -> Clicked Label2: " + centeredNode.getText() + "\n");
System.out.print("Gracz1 -> Wybór 1: " + gracz1.getWybor1() + " Wybór 2: "+gracz1.getWybor2() +"\n");
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
Platform.runLater(new Runnable() {
@Override
public void run() {
Tura(gracz1.getWybor1(), gracz1.getWybor2(), gracz1.getWybor1_col(), gracz1.getWybor1_row(), gracz1.getWybor2_col(),gracz1.getWybor2_row(),gracz1.getWybor1_id(), gracz1.getWybor2_id());
}
});
}
}, 3000);
}
}
if(tura == "g2") {
if(gracz2.getWybor1() == "" && gracz2.getWybor2() == "") {
// System.out.println("Gracz 2 -> Ekran: ["+colIndex+"]"+"["+rowIndex+"]"+" X:" +x + " Y: "+y);
button.getStyleClass().removeAll("btnRev");
button.getStyleClass().add("btn_open");
Label centeredNode = (Label) getCenteredNodeGridPane(gridPane2, colIndex, rowIndex);
gracz2.setWybor1(centeredNode.getText());
gracz2.setWybor1_col(colIndex);
gracz2.setWybor1_row(rowIndex);
gracz2.setWybor1_id(button.getId());
System.out.print("Gracz 2 -> Clicked Label1: " + centeredNode.getText() + "\n");
System.out.print("Gracz 2 -> Wybor1: "+gracz2.getWybor1() + "\n");
Ruch2_Gracz2();
}
else if(gracz2.getWybor1() != "" && gracz2.getWybor2() == "") {
//System.out.println("Gracz 2 -> Ekran: ["+colIndex+"]"+"["+rowIndex+"]"+" X:" +x + " Y: "+y);
button.getStyleClass().removeAll("btnRev");
button.getStyleClass().add("btn_open");
Label centeredNode = (Label) getCenteredNodeGridPane(gridPane2, colIndex, rowIndex);
gracz2.setWybor2(centeredNode.getText());
gracz2.setWybor2_col(colIndex);
gracz2.setWybor2_row(rowIndex);
gracz2.setWybor2_id(button.getId());
System.out.print("Gracz 2 -> Clicked Label2: " + centeredNode.getText() + "\n");
System.out.print("Gracz 2 -> Wybór 1: " + gracz2.getWybor1() + " Wybór 2: "+gracz2.getWybor2() +"\n");
timer2 = new Timer();
timer2.schedule(new TimerTask() {
@Override
public void run() {
Platform.runLater(new Runnable() {
@Override
public void run() {
Tura(gracz2.getWybor1(), gracz2.getWybor2(), gracz2.getWybor1_col(), gracz2.getWybor1_row(), gracz2.getWybor2_col(),gracz2.getWybor2_row(),gracz2.getWybor1_id(), gracz2.getWybor2_id());
}
});
}
}, 4000);
}
}
});