私はJavaFXでTicTacToeゲーム用にこのコードを作成しようとしています。しかし、勝者(誰かが3つのXまたはOを行/列/対角線に置くことを意味する)があるときでさえ、プログラムは依然として他のプレイヤーが彼のサインをボードに置くことを可能にする。その後、勝利ボタンが変更され、ボタンが無効に設定されます。それをどうやって変えるの?TicTacToeゲームで1回は不要です。
package tictactoe;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.MenuItem;
import javafx.scene.layout.GridPane;
public class TicTacToeController {
private boolean isFirstPlayer = true;
public void buttonClickHandler(ActionEvent evt) {
this.find3InARow();
Button clickedButton = (Button) evt.getTarget();
String buttonLabel = clickedButton.getText();
if ("".equals(buttonLabel) && isFirstPlayer){
clickedButton.setText("X");
isFirstPlayer = false;
} else if("".equals(buttonLabel) && !isFirstPlayer) {
clickedButton.setText("O");
isFirstPlayer = true;
}
}
@FXML Button b1;
@FXML Button b2;
@FXML Button b3;
@FXML Button b4;
@FXML Button b5;
@FXML Button b6;
@FXML Button b7;
@FXML Button b8;
@FXML Button b9;
@FXML GridPane gameBoard;
@FXML MenuItem Play;
private boolean find3InARow() {
if (""!=b1.getText() && b1.getText() == b2.getText()
&& b2.getText() == b3.getText()){
highlightWinningCombo(b1,b2,b3);
return true;
}
if (""!=b4.getText() && b4.getText() == b5.getText()
&& b5.getText() == b6.getText()){
highlightWinningCombo(b4,b5,b6);
return true;
}
if (""!=b7.getText() && b7.getText() == b8.getText()
&& b8.getText() == b9.getText()){
highlightWinningCombo(b7,b8,b9);
return true;
}
if (""!=b1.getText() && b1.getText() == b4.getText()
&& b4.getText() == b7.getText()){
highlightWinningCombo(b1,b4,b7);
return true;
}
if (""!=b2.getText() && b2.getText() == b5.getText()
&& b5.getText() == b8.getText()){
highlightWinningCombo(b2,b5,b8);
return true;
}
if (""!=b3.getText() && b3.getText() == b6.getText()
&& b6.getText() == b9.getText()){
highlightWinningCombo(b3,b6,b9);
return true;
}
if (""!=b1.getText() && b1.getText() == b5.getText()
&& b5.getText() == b9.getText()){
highlightWinningCombo(b1,b5,b9);
return true;
}
if (""!=b3.getText() && b3.getText() == b5.getText()
&& b5.getText() == b7.getText()){
highlightWinningCombo(b3,b5,b7);
return true;
}
return false;
}
private void highlightWinningCombo(Button first, Button second, Button third) {
gameBoard.setDisable(true);
first.getStyleClass().add("winning-button");
second.getStyleClass().add("winning-button");
third.getStyleClass().add("winning-button");
}
public void menuClickHandler(ActionEvent evt){
MenuItem clickedMenu = (MenuItem) evt.getTarget();
String menuLabel = clickedMenu.getText();
if ("Play".equals(menuLabel)){
ObservableList<Node> buttons = gameBoard.getChildren();
gameBoard.setDisable(false);
buttons.forEach(btn -> {
((Button) btn).setText("");
btn.getStyleClass().remove("winning-button");
});
isFirstPlayer = true;
}
else if("Quit".equals(menuLabel)) {
System.exit(0);
}
}
}
デバッガでプログラムを実行して、どこが間違っているかを確認します。 – Henry