JavaFX按钮单击并下一步移动

JavaFX按钮单击并下一步移动,java,javafx,Java,Javafx,我会用JavaFX做一个游戏:tic-tac-toe。 我创建了带有按钮的board 3x3 第一个玩家单击其中一个按钮,所选按钮文本更改为O或X 我会做一个循环,像这样: while(true){ player1.move("x"); player2.move("O"); } 移动中: public void move(String a){ board[0][0].setOnAction(new EventHandler<ActionEvent>() {

我会用JavaFX做一个游戏:tic-tac-toe。 我创建了带有按钮的board 3x3 第一个玩家单击其中一个按钮,所选按钮文本更改为O或X 我会做一个循环,像这样:

while(true){
  player1.move("x");
  player2.move("O");
}
移动中:

public void move(String a){
      board[0][0].setOnAction(new EventHandler<ActionEvent>() {
           @Override
           public void handle(ActionEvent event) {
                   board[0][0].setText(a);
                   board[0][0].setDisable(true);
               }
           });
       board[0][1].setOnAction(new EventHandler<ActionEvent>() {
           @Override
           public void handle(ActionEvent event) {
                   board[0][1].setText(a);
                   board[0][1].setDisable(true);
               }
           });
          [...]
}
但是应用程序由于循环而无法工作 我不知道怎么做,第一个玩家有一个移动,当他选择并点击按钮,玩家2有一个下一个移动

我不知道怎么做,第一个玩家有一个移动,当他选择并点击按钮,玩家2有一个下一个移动


您必须添加一个控制游戏的游戏管理器。你必须管理游戏的回合数,并检查每一回合是否有一名玩家获胜。当然,还有其他事情,比如移动

您不需要任何主游戏循环,以下是您需要的逻辑:

int player = 0;
String [] symbol = {"X", "O"};

for(int i = 0; i < 3; i++) {
    for(int j = 0; j < 3; j++) {
        board[i][j].setOnAction(action -> {
            plansza[i][j].setText(symbol[player]);

            checkIfPlayerWon();

            player = (player + 1) % 2;
        });
    }
}

根据需要调整它

事件处理程序几乎不应该处于循环中。在这种情况下,每次移动时都要创建一个事件处理程序。您只需创建一次事件处理程序。board节点是按钮,因此如果您使用fxml,您只需要一个方法来处理按钮。如果您没有使用fxml,请在游戏开始前设置按钮上的处理程序。意思是不在while循环中。应该有初始化、播放和结束三个阶段。在初始化阶段,您将执行按钮处理程序。播放是循环的开始。显示更多代码,您可以获得更好的帮助。我如何做到这一点?它看起来怎么样?你可以用谷歌搜索它或者在stackoverflow上搜索,你可以从这里开始。我们无法为您编写代码,如果您提出更具体的问题,我们可能会更有帮助。链接: