java - 如何通过避免重复来缩短 Tic Tac Toe 代码

标签 java user-interface intellij-idea javafx redundancy

这是我的第一个 JavaFX 项目。

我使用 JavaFx 创建了一个 Tic Tac Toe 游戏。该游戏适用于玩家对玩家模式,非常完美,但我使用的代码太长。

以下是一些明显重复的内容,但它们完全不同:

Tic-tac-toe code help improve

Code Golf: Tic Tac Toe

这是我的按钮一的代码,我必须为另外八个按钮重复该代码:

one.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent actionEvent) {
        System.out.println(1);
        System.out.println("my state is " + state[0]);
        if (state[0] == 0){
            state[0]  = 1 ;
            for (int a: state ) {
            System.out.print(a);}
            if(i%2==0){
                one.setText("X"); i+= 1;
                System.out.println(i+"recorded");
                turn.setText("O turn");
                result[0] = 'x';
                win() ;
            }
            else{
                one.setText("O"); i+= 1 ;
                System.out.println(i+"recorded");
                turn.setText("X turn");
                result[0] = 'o';
                win() ;
            }
        }
    }
});

屏幕截图:

enter image description here

是否可以选择避免为另外 8 个按钮重复代码?

您可以在屏幕截图中看到也有重复的 for 循环。

这是我的第一个 GUI 项目,但我不打算继续当初学者。

编辑

After I don't see any for-loop in the code. Perhaps you meant if-statements? – NiVeR

是的,我的意思是 if 语句。

最佳答案

尝试这样做:

void makeMove(Button button, JLabel turn, int cell){
    System.out.println(cell);
    System.out.println("my state is " + state[cell-1]);
    if (state[cell-1] == 0){
        state[cell-1]  = 1 ;
        for (int a: state ) {
        System.out.print(a);}
        if(i%2==0){
            button.setText("X"); i+= 1;
            System.out.println(i+"recorded");
            turn.setText("O turn");
            result[cell-1] = 'x';
            win() ;
        }
        else{
            button.setText("O"); i+= 1 ;
            System.out.println(i+"recorded");
            turn.setText("X turn");
            result[cell-1] = 'o';
            win() ;
        }
    }
}

one.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent actionEvent) {
        makeMove(one,turn,1);
    }
);

并对其他按钮重复此操作,将 1 更改为 2...9

该代码实际上仍然可以改进,但是,既然您说过您正在开始,那么这是开始考虑模块化代码的好方法。

我不确定 turn 是什么,所以我在 makeMove 的定义中将其设为一个标签,将其更改为实际情况。

关于java - 如何通过避免重复来缩短 Tic Tac Toe 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56698389/

相关文章:

java - JAXB JSON JAR 运行时列表阅读器不可用

java - 我能不能把 'bounce'一个文件上传到一台服务器直接发到另一台服务器?

java - 如何在 JAXB 中设置返回集合的 WrapperElement 名称?

java - Mockito:在 void 方法上填充不同的值

r - 对Docker容器使用X11转发

java - 如何在 Swing 中做出好的 gui 设计

java - Intellij 想法 : Importing Gradle project - getting JAVA_HOME not defined yet

java - 将 Hibernate 实体重构为子类

css - 为什么 'filter: invert(1) hue-rotate(180deg)' 将红色变成桃红色?

scala - 类型安全配置库在 Intellij Scala 工作表中不可用