我在做这项作业上遇到麻烦。我想实现一种方法,其中代码显示//call method to check for winner,以便在每回合之后检查赢家。
我不确定该怎么做。我尝试了各种不同的方式。然后,我想在井字游戏板上显示获胜者的名字“ X赢”或“ O赢”。

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;
    }

最佳答案

有几种方法可以做到这一点。为了将其保留为您自己的工作,我不会为您发布代码,而只会引用您可以使用的潜在解决方案和算法。

您需要做的第一件事是创建一种存储板state的方法。由于板子很小,所以我只用一个简单的(3x3)。可能有三个integer array,我会说Empty是states,X是0,O是1。我将2分配为顶部的0-2,将3分配为中间,并且将3-5分配给底部。为了简化起见,我可以为此6-8编写一个getset函数,以便可以,

例如,编写array可以将该正方形设置为该状态或获取该状态。一旦我建立了这个系统,我将需要设计一种方法让我自己找出某人是否拥有该系统。为此,我将编写一个循环来检查每个正方形。如果正方形为空,则什么也不做,但是如果正方形为set(X,Y,State)x,则将坐标存储为o,然后检查所有相邻的正方形。如果任何相邻的正方形具有相同的状态,则将坐标存储为x1,y1,否则仅移至下一个正方形。

最后,检查板上是否存在以下任一坐标对:x2,y2(2*x2-x1,2*y2-y1)。如果是,请检查该正方形的状态是否与前两个相同。如果是,那么那个正方形的状态对应于获胜的玩家。

09-10 02:36
查看更多