我怎样才能结束我的Javafx tic-tac-toe?

时间:2017-04-05 16:06:11

标签: java user-interface javafx

我使用javafx制作了tic-tac-toe游戏。我是java的新手,我试图在获胜或抽奖后让位于结束游戏。没有必要检查是输赢还是其他任何东西。当你无法继续玩时,我想把这个文字结束。我尝试使用数组,但我不知道该怎么做。

这是我的代码:

  import java.util.ArrayList;
  import javafx.application.Application;
  import javafx.scene.Scene;
  import javafx.scene.control.Button;
  import javafx.scene.control.Label;
  import javafx.scene.layout.BorderPane;
  import javafx.scene.layout.GridPane;
  import javafx.scene.text.Font;
  import javafx.stage.Stage;

  public class ticTacToe extends Application {

private boolean turn;
private int[][] locations;

public RistinollaSovellus() {
    turn = true;
    locations = new int[3][3];

}

public static void main(String[] args) {
    launch(ticTacToe.class);
}

@Override
public void start(Stage window) throws Exception {
    boolean endGame = false;

    BorderPane layout = new BorderPane();

    Label text = new Label("Turn: X");
    text.setFont(Font.font("Monospaced", 40));
    layout.setTop(text);

    GridPane array = new GridPane();
    if (!endGame) {

        for (int x = 1; x <= 3; x++) {
            for (int y = 1; y <= 3; y++) {
                Button btn = new Button(" ");
                btn.setFont(Font.font("Monospaced", 40));
                array.add(nappi, x, y);
                locations[x][y] = 0;

                btn.setOnAction((event) -> {
                    if (btn.getText().equals(" ")) {

                        if (turn) {
                            btn.setText("X");
                            text.setText("Turn: O");
                            turn = false;

                        } else if (!turn) {
                            btn.setText("O");
                            text.setText("Turn: X");
                            turn = true;
                        }

                    }
                });
            }
        }
    }

    layout.setCenter(array);

    Scene showing = new Scene(layout);

    window.setScene(showing);
    window.show();
}

  }

2 个答案:

答案 0 :(得分:0)

传递给btn.setOnAction()的参数是一个事件监听器,每次用户单击按钮时都会执行其逻辑。

https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/ButtonBase.html#setOnAction-javafx.event.EventHandler-

在按钮上单击,您要检查网格是否包含有效的井字游戏配置。为此,您需要展开侦听器并使用location数组来检查网格上所有按钮的当前状态。

找到有效的单元格组合后,您可以调用Platform.exit()来停止该应用程序。

编辑: xy循环变量应从0开始并最多为2,否则抛出ArrayIndexOutOfBoundsException。数组的第一个索引是0,而不是1。

答案 1 :(得分:-1)

我不确定你的意思,但我认为如果你实现了这个游戏,就好像它的工作应该那样,那么你很容易想出如何结束它。

如果有任何玩家获胜,你可以在这里做很多事情你可以只显示玩家x赢得的警告,并提供退出或重新启动应用程序的选项,如果出现平局,你也可以这样做。 / p>

从技术上讲,调用stop()方法停止所有进程并结束游戏