Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何实现java tic-tac-toe游戏功能_Java_Javafx - Fatal编程技术网

如何实现java tic-tac-toe游戏功能

如何实现java tic-tac-toe游戏功能,java,javafx,Java,Javafx,我在学校的作业上遇到了麻烦。我想实现一个方法,其中代码显示//调用方法检查获胜者,在每个回合后检查获胜者 我不知道怎么做。我试过各种不同的方法。然后我想把获胜者的名字“X赢”或“O赢”显示在tic tac趾板上 import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Scene; import java

我在学校的作业上遇到了麻烦。我想实现一个方法,其中代码显示
//调用方法检查获胜者
,在每个回合后检查获胜者
我不知道怎么做。我试过各种不同的方法。然后我想把获胜者的名字“X赢”或“O赢”显示在tic tac趾板上

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
import javafx.scene.layout.GridPane;
import javafx.geometry.*;

public class Main extends Application {
    public static int turn = 1;
    public static void main(String[] args) {
        launch(args);
    } //end main

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Play Tic Tac Toe!");

        GridPane grid = new GridPane();
        grid.setAlignment(Pos.CENTER);
        grid.setHgap(10);
        grid.setVgap(10);
        grid.setPadding(new Insets(25, 25, 25, 25));

        Scene scene = new Scene(grid, 300, 275);
        primaryStage.setScene(scene);

        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                grid.add(createButton(), i, j);
            }
        }
        primaryStage.show();
    }

    private static Button createButton() {
        //instantiates button objects with the same properties
        Button b = new Button(" ");
        b.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                //implemennt Tic Tac Toe logic
                if(turn % 2 != 0) {
                    b.setText("X");
                }
                else  {
                    b.setText("O");
                }

                int row = GridPane.getRowIndex(b);
                int col = GridPane.getColumnIndex(b);
                //outputs to the terminal
                System.out.println("Turn = " + turn + " Row = " + row + " Col = " + col);
                b.setDisable(true); //after button is clicked, disable it
                // call method to check for winner
                turn++;
            }
        });
        return b;
    }
导入javafx.application.application;
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.stage.stage;
导入javafx.scene.layout.GridPane;
导入javafx.geometry.*;
公共类主扩展应用程序{
公共静态整数匝数=1;
公共静态void main(字符串[]args){
发射(args);
}//末端总管
@凌驾
公共无效开始(阶段primaryStage){
初级阶段。设置标题(“玩井字游戏!”);
GridPane grid=新建GridPane();
网格设置对齐(位置中心);
网格。setHgap(10);
网格设置间隙(10);
网格设置填充(新插图(25,25,25,25));
场景=新场景(网格,300275);
初级阶段。场景(场景);
对于(int i=0;i<3;i++){
对于(int j=0;j<3;j++){
add(createButton(),i,j);
}
}
primaryStage.show();
}
私有静态按钮createButton(){
//实例化具有相同属性的按钮对象
按钮b=新按钮(“”);
b、 setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
//实现Tic-Tac-Toe逻辑
如果(转动%2!=0){
b、 setText(“X”);
}
否则{
b、 setText(“O”);
}
int row=GridPane.getRowIndex(b);
int col=GridPane.getColumnIndex(b);
//输出到终端
系统输出打印项次(“Turn=“+Turn+”行=“+Row+”列=“+Col”);
b、 setDisable(true);//单击按钮后,将其禁用
//调用方法来检查赢家
turn++;
}
});
返回b;
}

有几种方法可以做到这一点。为了让这成为您自己的工作,我将不为您发布代码,只参考您可以使用的潜在解决方案和算法

您需要做的第一件事是创建一种方法来存储电路板的
状态
,我只会使用一个简单的
整数数组
。有三种可能的
状态
,我会说空是
0
,X是
1
,O是
2
。我会指定
0-2
为顶部
3
3-5
为中间,而
6-8
为底部。为了让事情更简单一些我可以为这个
数组
编写
get
set
函数,以便

例如,写入
set(X,Y,State)
将该方格设置为该状态或检索该状态。一旦设置了该系统,我需要为自己设计一种方法,以确定是否有人有一个方格。为此,我将编写一个循环来检查每个方格。如果方格为空,则不执行任何操作,但如果它有一个
x
o
,则存储坐标按
x1,y1
进行Nate,然后检查所有相邻的方块。如果任何相邻方块具有相同的状态,则将坐标存储为
x2,y2
,否则只需移动到下一个方块

最后,检查电路板上是否存在以下坐标对:
(2*x2-x1,2*y2-y1)
(2*x1-x2,2*y1-y2)
。如果是,则检查该方块的状态是否与前两个相同。如果是,则无论该方块的状态如何,都对应于获胜的玩家。

网页上的一句话,询问堆栈溢出问题应该是找到答案的过程中的最后一步。您没有尝试搜索Interne吗t表示javafx tic tac toe术语?