Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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 tictac-Toe赢家_Java - Fatal编程技术网

Java tictac-Toe赢家

Java tictac-Toe赢家,java,Java,我已经用GUI创建了一个x-o游戏,并且几乎完成了它,但是我很难宣布胜利者,我设法手动完成了它,但是它花费了很多代码行,看起来很混乱,下面是我所做的: if((buttons[0].getText()=="X" && buttons[1].getText()=="X" && buttons[2].getText()=="X") || (buttons[0].getText()=="X" && buttons[3].g

我已经用GUI创建了一个x-o游戏,并且几乎完成了它,但是我很难宣布胜利者,我设法手动完成了它,但是它花费了很多代码行,看起来很混乱,下面是我所做的:

if((buttons[0].getText()=="X" && buttons[1].getText()=="X" && buttons[2].getText()=="X") ||
                (buttons[0].getText()=="X" && buttons[3].getText()=="X" && buttons[6].getText()=="X") ||
                (buttons[4].getText()=="X" && buttons[8].getText()=="X" && buttons[2].getText()=="X") ||
                (buttons[0].getText()=="O" && buttons[1].getText()=="O" && buttons[2].getText()=="O") ||
                (buttons[0].getText()=="O" && buttons[3].getText()=="O" && buttons[6].getText()=="O") ||
                (buttons[4].getText()=="O" && buttons[8].getText()=="O" && buttons[2].getText()=="O") ||
                (buttons[2].getText()=="X" && buttons[5].getText()=="X" && buttons[8].getText()=="X") ||
                (buttons[1].getText()=="X" && buttons[4].getText()=="X" && buttons[7].getText()=="X") ||
                (buttons[6].getText()=="X" && buttons[7].getText()=="X" && buttons[8].getText()=="X") ||
                (buttons[2].getText()=="O" && buttons[5].getText()=="O" && buttons[8].getText()=="O") ||
                (buttons[1].getText()=="O" && buttons[4].getText()=="O" && buttons[7].getText()=="O") ||
                (buttons[6].getText()=="O" && buttons[7].getText()=="O" && buttons[8].getText()=="O") ||    
                (buttons[3].getText()=="X" && buttons[4].getText()=="X" && buttons[5].getText()=="X") ||
                (buttons[3].getText()=="O" && buttons[4].getText()=="O" && buttons[5].getText()=="O") ||    
                (buttons[0].getText()=="X" && buttons[4].getText()=="X" && buttons[8].getText()=="X") ||
                (buttons[0].getText()=="O" && buttons[4].getText()=="O" && buttons[8].getText()=="O")   )
所以我想缩短它并将其添加到一个循环中,但它不起作用

        for(int i=0;i<9;i++)
    {
        if(i%3==0){
            y+=50; x=40;
        }
        buttons[i]=new JButton();
        buttons[i].setSize(50, 50);
        buttons[i].setLocation(x, y);   
        int temp=i;
        buttons[temp].addActionListener(new ActionListener() {              
            public void actionPerformed(ActionEvent e) {
            String currentPlayer = turnCount % 2 == 0 ? "X" : "O";
            buttons[temp].setText(currentPlayer);
            buttons[temp].setFont(new Font("Arial", Font.PLAIN, 30));
            buttons[temp].setMargin(new Insets(0, 0, 0, 0));
            buttons[temp].setEnabled(false);
            turnCount++;

            if(buttons[temp].getText()==buttons[temp+1].getText())
            {
                System.out.println("GAME OVER!");
                for(int i=0;i<9;i++)
                    buttons[i].setEnabled(false);
                turnCount = 0;
            }
        }
        });
        myForm.add(buttons[i]);
        x+=50;
    }
谢谢。

字符串应使用等于进行比较,而不是==

因此:

如果temp=i,他只是实例化了按钮[i],那么按钮[temp+1]此时为空。另外,当温度达到8时,按钮[temp+1]将超出限制,我怀疑您的按钮阵列大小为9

此外,这不是胜利的条件,您只需测试“下一步”按钮是否具有相同的值,这意味着:

XX-
O--
---
将是X的胜利

正如您所看到的,如果您复制了太多的代码,您可以:

/**Checks if player X or O won **/
    public boolean isWinner(Button[] buttons){
                return playerWins(buttons, 'X') || playerWins(buttons, 'O');
    }

/**Checks if a player has 3 buttons aligned **/
    private boolean playerWins(Button[] buttons, char player) {
        return lineWin(buttons,player,0,1,2) ||
                lineWin(buttons,player,0,3,6) ||
                lineWin(buttons,player,3,4,5); //TODO add the 5 others conditions       
    }

/** Checks if the buttons at i,j and k belongs the player **/
    private boolean buttonsBelongToPlayer(Button[] buttons, char player, int i, int j, int k) {
        return buttons[i].getText()==player && buttons[j].getText()==player && buttons[k].getText()==player;
    }

它不起作用,我一直在输入X和O,但它不起作用。至于温度越界,以及胜利的条件,你完全正确,但我只是在添加其他条件之前测试一个条件。老实说,这3个方法看起来有点混乱,首先,它说类型按钮的getText方法没有定义,我不能在主界面中调用它,ifisWinner不起作用。如果你保持这样的逻辑,你需要先实例化所有按钮,然后添加所有ActionListener。嗯,我不确定按钮课,所以我选了第一个。你应该用现有的类替换该类。第三种方法测试索引i、j和k处的3个按钮是否属于玩家,第二种方法测试使玩家获胜的所有线条组合,我没有写八个组合,第一种方法测试两个玩家的胜利。它基本上是一个更干净的大版本,即使我的方法名称不是那么清楚。。。我会编辑好的,我现在明白了,也明白了为什么我写的代码不能正常工作,但是我仍然无法在main中调用isWinner,第三个方法也给了我一个错误,getText方法对于type按钮是未定义的,根据您在第一个代码示例big if中使用的类更改我的代码中的Button类。我使用了java.awt.Button类,但我不确定您使用的是哪一个。好的,我这样做了,3个方法现在没有给我任何错误,但是我如何在main中调用isWinner方法呢?我试过按按钮,但没用。
XX-
O--
---
/**Checks if player X or O won **/
    public boolean isWinner(Button[] buttons){
                return playerWins(buttons, 'X') || playerWins(buttons, 'O');
    }

/**Checks if a player has 3 buttons aligned **/
    private boolean playerWins(Button[] buttons, char player) {
        return lineWin(buttons,player,0,1,2) ||
                lineWin(buttons,player,0,3,6) ||
                lineWin(buttons,player,3,4,5); //TODO add the 5 others conditions       
    }

/** Checks if the buttons at i,j and k belongs the player **/
    private boolean buttonsBelongToPlayer(Button[] buttons, char player, int i, int j, int k) {
        return buttons[i].getText()==player && buttons[j].getText()==player && buttons[k].getText()==player;
    }