【问题标题】:How do I implement java tic tac toe game features如何实现 java tic tac toe 游戏功能
【发布时间】:2020-04-24 03:22:03
【问题描述】:

我在完成这项学校作业时遇到了问题。我想实现一个方法,其中代码为//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;
    }

【问题讨论】:

标签: java javafx


【解决方案1】:

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

您需要做的第一件事是创建一种方法来存储板的state。由于电路板很小(3x3),我将只使用一个简单的integer array。有三种可能的states,我会说Empty 是0,X 是1,O 是2。我会指定0-2 为顶部33-5 为中间,6-8 为底部。为了让事情更简单,我可能会为此 array 编写一个 getset 函数,这样我就可以了,

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    相关资源
    最近更新 更多