将字符串值分配给按钮 - JavaFx



我试图设置一个井字游戏,我为每个按钮创建了 9 个字符串值。 按下按钮后,它会根据它是 X 还是 O 为其分配一个字符串值。 最后,我连接了所有字符串以向 consol 输出一条获胜消息,但它似乎不起作用。

按钮的代码

            // Create a Button
    Button TopLeft = new Button("");
    root.getChildren().add(TopLeft);
    // Move the Button
    TopLeft.setTranslateX(-150);
    TopLeft.setTranslateY(-150);
    // Action for the Button
    // Code from: https://docs.oracle.com/javafx/2/ui_controls/button.htm
    TopLeft.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent e) {
            if (playerX == true) {
                TopLeft.setText("X");
                 tl = "X";
            } else {
                TopLeft.setText("O");
                 tl = "O";
            }
            playerX = !playerX;
            TopLeft.setDisable(true);
        }
    });

获胜条件

//WIN CONDITION, r1 = row 1, c1 = column 1, d1 = diagonal 1, etc        
     r1 = tl + tm + tr;
     r2 = l + m + r;
     r3 = bl + bm + br;
     c1 = tl + l + bl;
     c2 = tm + m + bm;
     c3 = tr + r + br;
     d1 = tl + m + br;
     d2 = tr + m + bl;

    if((r1.equals("XXX") || r2.equals("XXX") || r3.equals("XXX") || c1.equals("XXX") || c2.equals("XXX") || c3.equals("XXX") || d1.equals("XXX") || d2.equals("XXX")) == true){
        System.out.println("Player X Wins");
    } else {
        System.out.println("Player O Wins");
    }

将这样的操作命令添加到引用的按钮中:

    TopLeft.setActionCommand("ButtonX");

在您的句柄方法中

    String action = e.getActionCommand();
    if (action.equals("ButtonX") {
           // code here
    }  

尝试检查玩家是否在点击按钮后立即获胜。您可能需要创建一个方法来检查玩家是否获胜,如下所示:

private boolean playerWon(){
     r1 = tl + tm + tr;
     r2 = l + m + r;
     r3 = bl + bm + br;
     c1 = tl + l + bl;
     c2 = tm + m + bm;
     c3 = tr + r + br;
     d1 = tl + m + br;
     d2 = tr + m + bl;

     return ((r1.equals("XXX") || r2.equals("XXX") || r3.equals("XXX") || 
              c1.equals("XXX") || c2.equals("XXX") || c3.equals("XXX") || 
              d1.equals("XXX") || d2.equals("XXX") ||
              r1.equals("OOO") || r2.equals("OOO") || r3.equals("OOO") || 
              c1.equals("OOO") || c2.equals("OOO") || c3.equals("OOO") || 
              d1.equals("OOO") || d2.equals("OOO")))
}

然后在切换转弯之前调用此方法。那是在playerX = !playerX;之前.你可以做这样的事情

TopLeft.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent e) {
            if (playerX == true) {
                TopLeft.setText("X");
                 tl = "X";
            } else {
                TopLeft.setText("O");
                 tl = "O";
            }
            if(playerWon()){
               if(playerX) System.out.println("Player X Wins");
               else System.out.println("Player O Wins");
            }
            playerX = !playerX;
            TopLeft.setDisable(true);
        }
});

最新更新