Tic Tac Toe获胜者

时间:2016-09-16 10:46:39

标签: java

我已经创建了一个带有GUI的xo游戏并且几乎完成了它,但是我很难宣布获胜者,我设法手动完成但是它需要很多代码行并且它看起来很乱,这就是我做的:

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

每当下面两个按钮具有相同的值时,它应该在if语句中打印代码,但它不起作用。

这正是需要以某种方式改变的东西

if(buttons[temp].getText()==buttons[temp+1].getText())

谢谢。

3 个答案:

答案 0 :(得分:3)

如果temp=i而他刚刚实现了buttons[i],那么buttons[temp+1]此时就是null。此外,当temp达到8时,buttons[temp+1]将超出范围(我怀疑您的Button数组大小为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;
    }

答案 1 :(得分:0)

应使用String而不是equals()来比较

==

所以:

if(buttons[temp].getText().equals(buttons[temp+1].getText()))

答案 2 :(得分:0)

你能做到这一点:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myCtrl">
  Name
  <select  id="requestorSite" ng-model="selectedUserProfile" ng-options="userProfile.id as userProfile.name for userProfile in userProfiles | filter: {id: '!' + existingId}">
  </select>
  <br/>
  </div>

并查看值是否实际相同。

我怀疑,您的按钮[temp + 1]始终为空(内部没有JButton参考)。