基本上,我已经完成了我一直在做的井字游戏的所有工作,但是在检查谁赢得了比赛方面遇到了麻烦。本质上,我试图查看是否有人赢得了比赛,如果有人赢得了比赛,则显示一条消息,指出哪个玩家赢得了比赛。
我已经尝试过用力检查每个JButton行/列/对角线,但是它似乎不起作用。我将JButton布置在3 x 3网格中。
if((gameButton[0].getText().equals("X") && gameButton[1].getText().equals("X") && gameButton[2].getText().equals("X"))||
(gameButton[3].getText().equals("X") && gameButton[4].getText().equals("X") && gameButton[5].getText().equals("X"))||
(gameButton[6].getText().equals("X") && gameButton[7].getText().equals("X") && gameButton[8].getText().equals("X"))||
(gameButton[0].getText().equals("X") && gameButton[3].getText().equals("X") && gameButton[6].getText().equals("X"))||
(gameButton[1].getText().equals("X") && gameButton[4].getText().equals("X") && gameButton[7].getText().equals("X"))||
(gameButton[2].getText().equals("X") && gameButton[5].getText().equals("X") && gameButton[8].getText().equals("X"))||
(gameButton[0].getText().equals("X") && gameButton[4].getText().equals("X") && gameButton[8].getText().equals("X"))||
(gameButton[2].getText().equals("X") && gameButton[4].getText().equals("X") && gameButton[6].getText().equals("X"))) {
wonLabel.setText("Player X has won!");
}
else if((gameButton[0].getText().equals("O") && gameButton[1].getText().equals("O") && gameButton[2].getText().equals("O"))||
(gameButton[3].getText().equals("O") && gameButton[4].getText().equals("O") && gameButton[5].getText().equals("O"))||
(gameButton[6].getText().equals("O") && gameButton[7].getText().equals("O") && gameButton[8].getText().equals("O"))||
(gameButton[0].getText().equals("O") && gameButton[3].getText().equals("O") && gameButton[6].getText().equals("O"))||
(gameButton[1].getText().equals("O") && gameButton[4].getText().equals("O") && gameButton[7].getText().equals("O"))||
(gameButton[2].getText().equals("O") && gameButton[5].getText().equals("O") && gameButton[8].getText().equals("O"))||
(gameButton[0].getText().equals("O") && gameButton[4].getText().equals("O") && gameButton[8].getText().equals("O"))||
(gameButton[2].getText().equals("O") && gameButton[4].getText().equals("O") && gameButton[6].getText().equals("O"))) {
wonLabel.setText("Player O has won!");
}
我希望这能输出一条有关哪个玩家获胜的消息,但是当我与GUI交互并故意将某个行/列/对角线做成“ X”或“ O”时,什么也没发生。欢迎提出任何反馈/建议以提高效率。
答案 0 :(得分:0)
可能我建议这样做,将文本存储为布尔数组。每次按下按钮后,将数组中的点设置为true(如果为X)或false(如果为O)。我将假设您已经有一个带有布尔值的转盘计数器,稍后将对其进行引用。
确保此布尔数组是全局的!!!
boolean[3][3] check = new boolean[3][3];
在运行该动作的actionEventListener中,
public void actionPerformed (ActionEvent e){
Object source = e.getSource();
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++){
if (source == board[i][j], turn == true){
check[i][j] = true;
}
else{
check[i][j] = false;
}
}
}
}
在此之后,您可能只需要使用此方法,该方法在每转一圈后运行,或者您认为合适。
private void win (){
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
int winO = 0;
int winX = 0;
for (int x = 0; x < 2; x++)
{
if (check[i][j] == false)
{
winO++;
if (check[i+x][j+x] == false)
{
winO++;
System.out.println(winO);
}
}
else if (check[i][j] == true)
{
winX++;
if (check[i+x][j+x] == true)
{
winX++;
System.out.println(winX);
}
}
if (winO == 4)
{
wonLabel.setText("Player O has won!");
break;
}
else if (winX == 4)
{
wonLabel.setText("Player X has won!");
break;
}
}
}
}
}
公平警告。这仅检查对角线!如果要检查水平/垂直方向,则必须将x
值分别添加到i
和/或j
可能会有更有效的方法来执行此操作,但这是我能做的最好的,希望对您有所帮助