我的 TicTacToe 游戏的 CheckingWinner 方法
CheckingWinner Method for my TicTacToe game
我尝试让 checkgamewinner 方法适用于我的 TicTacToe 游戏,但我在循环开始或结束时遇到问题。每当我开始打开我的游戏并单击一个字段时,它只会打印垃圾邮件“没有赢家”。这是我当前的代码:
public String checkGameWinner(char [][]grid) {
boolean winner = false;
String result = "None";
while(!winner) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (gridAt(0, 0) == 'x' & gridAt(0, 1) == 'x' & gridAt(0, 2) == 'x') {
winner = true;
System.out.println("Player x has won");
break;
} else if (gridAt(0, 0) == 'x' & gridAt(1, 0) == 'x' & gridAt(2, 0) == 'x') {
winner = true;
System.out.println("Player x has won");
break;
} else if (gridAt(0, 0) == 'x' & gridAt(1, 1) == 'x' & gridAt(2, 2) == 'x') {
winner = true;
System.out.println("Player x has won");
break;
} else if (gridAt(1, 0) == 'x' & gridAt(1, 1) == 'x' & gridAt(1, 2) == 'x') {
winner = true;
System.out.println("Player x has won");
break;
} else if (gridAt(2, 0) == 'x' & gridAt(2, 1) == 'x' & gridAt(2, 2) == 'x') {
winner = true;
System.out.println("Player x has won");
break;
} else if (gridAt(0, 1) == 'x' & gridAt(1, 1) == 'x' & gridAt(2, 1) == 'x') {
winner = true;
System.out.println("Player x has won");
break;
} else if (gridAt(0, 2) == 'x' & gridAt(1, 2) == 'x' & gridAt(2, 2) == 'x') {
winner = true;
System.out.println("Player x has won");
break;
} else if (gridAt(0, 2) == 'x' & gridAt(1, 1) == 'x' & gridAt(2, 0) == 'x') {
winner = true;
System.out.println("Player x has won");
break;
} else if (gridAt(0, 0) == 'x' & gridAt(0, 1) == 'x' & gridAt(0, 2) == 'x') {
winner = true;
System.out.println("Player x has won");
break;
} else if (gridAt(0, 0) == 'o' & gridAt(1, 0) == 'o' & gridAt(2, 0) == 'o') {
winner = true;
System.out.println("Player o has won");
} else if (gridAt(0, 0) == 'o' & gridAt(1, 1) == 'o' & gridAt(2, 2) == 'o') {
winner = true;
System.out.println("Player o has won");
} else if (gridAt(1, 0) == 'o' & gridAt(1, 1) == 'o' & gridAt(1, 2) == 'o') {
winner = true;
System.out.println("Player o has won");
} else if (gridAt(2, 0) == 'o' & gridAt(2, 1) == 'o' & gridAt(2, 2) == 'o') {
winner = true;
System.out.println("Player o has won");
} else if (gridAt(0, 1) == 'o' & gridAt(1, 1) == 'o' & gridAt(2, 1) == 'o') {
winner = true;
System.out.println("Player o has won");
} else if (gridAt(0, 2) == 'o' & gridAt(1, 2) == 'o' & gridAt(2, 2) == 'o') {
winner = true;
System.out.println("Player o has won");
} else if (gridAt(0, 2) == 'o' & gridAt(1, 1) == 'o' & gridAt(2, 0) == 'o') {
winner = true;
System.out.println("Player o has won");
} else {
result = "no winner";
System.out.println(result);
}
}
}
}
return result;
}
不知道我还能做什么,我玩了一下布尔值,但当我的棋盘上有赢家时它并没有停止。
为什么不让自己轻松一点并创建这样的方法呢。
private boolean checkRows() {
}
private boolean checkColumns() {
}
private boolean checkDiagnonals() {
}
那么每个方法中的测试就会更少,并且可以更轻松地将它们作为单独的方法进行调试。
if (checkRows() || checkColumns() || checkDiagonals()) {
// winning code here.
}
我假设它们是实例方法,因此它们可以访问 char[][] grid
。
关于您当前的代码。
- 摆脱 while 循环,它没有用
- 去掉 for 循环。您已经在检查显式索引。
- 当您决定谁获胜时,将其打印出来并简单地
return true
。
- 如果您在所有测试结束时都没有获胜者,
return false
。
要调试,请为 x
和 o
建立测试用例,这样您就知道去哪里找
我没有检查你的逻辑,但据我所知,你提到的问题是因为当你打开你的游戏时,你的网格将完全是空的,因此它会转到 else 块并执行它。
我希望这能指导您正确编写逻辑。
另外,尽量合理划分方法,便于阅读、调试和维护。
您不需要同时使用循环和 if else 条件。我已经创建了带有 if else 条件的示例程序。
public class Main
{
public static void main(String[] args) {
char [][]grid = {
{'x', 'x', 'x'},
{'x', 'x', 'x'},
{'x', 'x', 'x'}
};
checkGameWinner(grid);
}
public static String checkGameWinner(char [][]grid) {
String result = "None";
boolean winner = true;
if (grid[0][0] == 'x' && grid[0][1] == 'x' && grid[0][2] == 'x') {
result = "Player x has won";
} else if (grid[0][0] == 'x' && grid[1][0] == 'x' && grid[2][0] == 'x') {
result = "Player x has won";
} else if (grid[0][0] == 'x' && grid[1][1] == 'x' && grid[2][2] == 'x') {
result = "Player x has won";
} else if (grid[1][0] == 'x' && grid[1][1] == 'x' && grid[1][2] == 'x') {
result = "Player x has won";
} else if (grid[2][0] == 'x' && grid[2][1] == 'x' && grid[2][2] == 'x') {
result = "Player x has won";
} else if (grid[0][1] == 'x' && grid[1][1] == 'x' && grid[2][1] == 'x') {
result = "Player x has won";
} else if (grid[0][2] == 'x' && grid[1][2] == 'x' && grid[2][2] == 'x') {
result = "Player x has won";
} else if (grid[0][2] == 'x' && grid[1][1] == 'x' && grid[2][0] == 'x') {
result = "Player x has won";
} else if (grid[0][0] == 'x' && grid[0][1] == 'x' && grid[0][2] == 'x') {
result = "Player x has won";
} else if (grid[0][0] == 'o' && grid[1][0] == 'o' && grid[2][0] == 'o') {
result = "Player o has won";
} else if (grid[0][0] == 'o' && grid[1][1] == 'o' && grid[2][2] == 'o') {
result = "Player o has won";
} else if (grid[1][0] == 'o' && grid[1][1] == 'o' && grid[1][2] == 'o') {
result = "Player o has won";
} else if (grid[2][0] == 'o' && grid[2][1] == 'o' && grid[2][2] == 'o') {
result = "Player o has won";
} else if (grid[0][1] == 'o' && grid[1][1] == 'o' && grid[2][1] == 'o') {
result = "Player o has won";
} else if (grid[0][2] == 'o' && grid[1][2] == 'o' && grid[2][2] == 'o') {
result = "Player o has won";
} else if (grid[0][2] == 'o' && grid[1][1] == 'o' && grid[2][0] == 'o') {
result = "Player o has won";
} else {
result = "no winner";
winner = false;
}
System.out.println(result);
return result;
}
}
注意:以上不是解决给定问题的最佳方法。
我尝试让 checkgamewinner 方法适用于我的 TicTacToe 游戏,但我在循环开始或结束时遇到问题。每当我开始打开我的游戏并单击一个字段时,它只会打印垃圾邮件“没有赢家”。这是我当前的代码:
public String checkGameWinner(char [][]grid) {
boolean winner = false;
String result = "None";
while(!winner) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (gridAt(0, 0) == 'x' & gridAt(0, 1) == 'x' & gridAt(0, 2) == 'x') {
winner = true;
System.out.println("Player x has won");
break;
} else if (gridAt(0, 0) == 'x' & gridAt(1, 0) == 'x' & gridAt(2, 0) == 'x') {
winner = true;
System.out.println("Player x has won");
break;
} else if (gridAt(0, 0) == 'x' & gridAt(1, 1) == 'x' & gridAt(2, 2) == 'x') {
winner = true;
System.out.println("Player x has won");
break;
} else if (gridAt(1, 0) == 'x' & gridAt(1, 1) == 'x' & gridAt(1, 2) == 'x') {
winner = true;
System.out.println("Player x has won");
break;
} else if (gridAt(2, 0) == 'x' & gridAt(2, 1) == 'x' & gridAt(2, 2) == 'x') {
winner = true;
System.out.println("Player x has won");
break;
} else if (gridAt(0, 1) == 'x' & gridAt(1, 1) == 'x' & gridAt(2, 1) == 'x') {
winner = true;
System.out.println("Player x has won");
break;
} else if (gridAt(0, 2) == 'x' & gridAt(1, 2) == 'x' & gridAt(2, 2) == 'x') {
winner = true;
System.out.println("Player x has won");
break;
} else if (gridAt(0, 2) == 'x' & gridAt(1, 1) == 'x' & gridAt(2, 0) == 'x') {
winner = true;
System.out.println("Player x has won");
break;
} else if (gridAt(0, 0) == 'x' & gridAt(0, 1) == 'x' & gridAt(0, 2) == 'x') {
winner = true;
System.out.println("Player x has won");
break;
} else if (gridAt(0, 0) == 'o' & gridAt(1, 0) == 'o' & gridAt(2, 0) == 'o') {
winner = true;
System.out.println("Player o has won");
} else if (gridAt(0, 0) == 'o' & gridAt(1, 1) == 'o' & gridAt(2, 2) == 'o') {
winner = true;
System.out.println("Player o has won");
} else if (gridAt(1, 0) == 'o' & gridAt(1, 1) == 'o' & gridAt(1, 2) == 'o') {
winner = true;
System.out.println("Player o has won");
} else if (gridAt(2, 0) == 'o' & gridAt(2, 1) == 'o' & gridAt(2, 2) == 'o') {
winner = true;
System.out.println("Player o has won");
} else if (gridAt(0, 1) == 'o' & gridAt(1, 1) == 'o' & gridAt(2, 1) == 'o') {
winner = true;
System.out.println("Player o has won");
} else if (gridAt(0, 2) == 'o' & gridAt(1, 2) == 'o' & gridAt(2, 2) == 'o') {
winner = true;
System.out.println("Player o has won");
} else if (gridAt(0, 2) == 'o' & gridAt(1, 1) == 'o' & gridAt(2, 0) == 'o') {
winner = true;
System.out.println("Player o has won");
} else {
result = "no winner";
System.out.println(result);
}
}
}
}
return result;
}
不知道我还能做什么,我玩了一下布尔值,但当我的棋盘上有赢家时它并没有停止。
为什么不让自己轻松一点并创建这样的方法呢。
private boolean checkRows() {
}
private boolean checkColumns() {
}
private boolean checkDiagnonals() {
}
那么每个方法中的测试就会更少,并且可以更轻松地将它们作为单独的方法进行调试。
if (checkRows() || checkColumns() || checkDiagonals()) {
// winning code here.
}
我假设它们是实例方法,因此它们可以访问 char[][] grid
。
关于您当前的代码。
- 摆脱 while 循环,它没有用
- 去掉 for 循环。您已经在检查显式索引。
- 当您决定谁获胜时,将其打印出来并简单地
return true
。 - 如果您在所有测试结束时都没有获胜者,
return false
。
要调试,请为 x
和 o
建立测试用例,这样您就知道去哪里找
我没有检查你的逻辑,但据我所知,你提到的问题是因为当你打开你的游戏时,你的网格将完全是空的,因此它会转到 else 块并执行它。
我希望这能指导您正确编写逻辑。
另外,尽量合理划分方法,便于阅读、调试和维护。
您不需要同时使用循环和 if else 条件。我已经创建了带有 if else 条件的示例程序。
public class Main
{
public static void main(String[] args) {
char [][]grid = {
{'x', 'x', 'x'},
{'x', 'x', 'x'},
{'x', 'x', 'x'}
};
checkGameWinner(grid);
}
public static String checkGameWinner(char [][]grid) {
String result = "None";
boolean winner = true;
if (grid[0][0] == 'x' && grid[0][1] == 'x' && grid[0][2] == 'x') {
result = "Player x has won";
} else if (grid[0][0] == 'x' && grid[1][0] == 'x' && grid[2][0] == 'x') {
result = "Player x has won";
} else if (grid[0][0] == 'x' && grid[1][1] == 'x' && grid[2][2] == 'x') {
result = "Player x has won";
} else if (grid[1][0] == 'x' && grid[1][1] == 'x' && grid[1][2] == 'x') {
result = "Player x has won";
} else if (grid[2][0] == 'x' && grid[2][1] == 'x' && grid[2][2] == 'x') {
result = "Player x has won";
} else if (grid[0][1] == 'x' && grid[1][1] == 'x' && grid[2][1] == 'x') {
result = "Player x has won";
} else if (grid[0][2] == 'x' && grid[1][2] == 'x' && grid[2][2] == 'x') {
result = "Player x has won";
} else if (grid[0][2] == 'x' && grid[1][1] == 'x' && grid[2][0] == 'x') {
result = "Player x has won";
} else if (grid[0][0] == 'x' && grid[0][1] == 'x' && grid[0][2] == 'x') {
result = "Player x has won";
} else if (grid[0][0] == 'o' && grid[1][0] == 'o' && grid[2][0] == 'o') {
result = "Player o has won";
} else if (grid[0][0] == 'o' && grid[1][1] == 'o' && grid[2][2] == 'o') {
result = "Player o has won";
} else if (grid[1][0] == 'o' && grid[1][1] == 'o' && grid[1][2] == 'o') {
result = "Player o has won";
} else if (grid[2][0] == 'o' && grid[2][1] == 'o' && grid[2][2] == 'o') {
result = "Player o has won";
} else if (grid[0][1] == 'o' && grid[1][1] == 'o' && grid[2][1] == 'o') {
result = "Player o has won";
} else if (grid[0][2] == 'o' && grid[1][2] == 'o' && grid[2][2] == 'o') {
result = "Player o has won";
} else if (grid[0][2] == 'o' && grid[1][1] == 'o' && grid[2][0] == 'o') {
result = "Player o has won";
} else {
result = "no winner";
winner = false;
}
System.out.println(result);
return result;
}
}
注意:以上不是解决给定问题的最佳方法。