Java 如何检查是否有人在tic-tac-toe gui游戏中获胜?(爪哇)
我基本上已经准备好了所有的东西来完成我一直在做的井字游戏,但是我很难确定谁赢了这场游戏。本质上,我是想看看是否有人赢了这场比赛,如果他们赢了,然后显示一条消息,说明哪个玩家赢了 我试过用蛮力检查每个JButton行/列/对角线,但它似乎不起作用。我有一个3乘3的网格布局的JButton顺便说一句Java 如何检查是否有人在tic-tac-toe gui游戏中获胜?(爪哇),java,user-interface,tic-tac-toe,Java,User Interface,Tic Tac Toe,我基本上已经准备好了所有的东西来完成我一直在做的井字游戏,但是我很难确定谁赢了这场游戏。本质上,我是想看看是否有人赢了这场比赛,如果他们赢了,然后显示一条消息,说明哪个玩家赢了 我试过用蛮力检查每个JButton行/列/对角线,但它似乎不起作用。我有一个3乘3的网格布局的JButton顺便说一句 if((gameButton[0].getText().equals("X") && gameButton[1].getText().equals("X") && gam
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”时,什么也没有发生。欢迎提供任何反馈/建议以提高效率。我是否可以建议这样做,将文本存储为布尔数组。每次按下按钮后,将数组中的点设置为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;
}
}
}
}
public void actionPerformed(ActionEvent e){
对象源=e.getSource();
对于(int i=0;i<3;i++){
对于(int j=0;j<3;j++){
如果(源==板[i][j],则turn==真){
检查[i][j]=正确;
}
否则{
检查[i][j]=假;
}
}
}
}
在此之后,您可能只需要使用此方法,该方法在每次转弯后运行,或者以您认为合适的方式运行
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;
}
}
}
}
}
private void win(){
对于(int i=0;i<2;i++)
{
对于(int j=0;j<2;j++)
{
int-winO=0;
int-winX=0;
对于(int x=0;x<2;x++)
{
如果(检查[i][j]==false)
{
winO++;
如果(检查[i+x][j+x]==false)
{
winO++;
System.out.println(winO);
}
}
否则如果(检查[i][j]==true)
{
winX++;
如果(勾选[i+x][j+x]==true)
{
winX++;
System.out.println(winX);
}
}
if(winO==4)
{
setText(“玩家O赢了!”);
打破
}
else if(winX==4)
{
setText(“玩家X赢了!”);
打破
}
}
}
}
}
公平的警告。这只检查对角线!如果要检查水平/垂直,必须将x
值分别添加到i
和/或j
可能有更有效的方法可以做到这一点,但这是我能做的最好的方法,希望它能有所帮助您应该将其存储在3×3矩阵中,然后检查对角线。像这样的可读性建议:这里有一些重复的代码(
“X”
块和“O”
块)。编写一个私有
方法来封装这个逻辑,这样就不必重复了。