Java tictac-Toe赢家
我已经用GUI创建了一个x-o游戏,并且几乎完成了它,但是我很难宣布胜利者,我设法手动完成了它,但是它花费了很多代码行,看起来很混乱,下面是我所做的: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
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;
}