在3x3 Tic tac toe游戏中找出胜者的最佳最佳方式是什么?建议请
我假设您正在使用 Booleans 的双维数组 . 由于布尔值可以有三个值(null,true和false) . 由于在任何给定时间只有2名玩家可以玩,因此您只需要三个值 . 未定义,玩家1和玩家2 .
Booleans
只要大小超过 1 ,这是一个适用于任何 Boolean 数组的方法 . 如果 true 获胜,它将返回 true ,如果 false 获胜,则返回 false ,如果还没有获胜者,则返回 null .
1
Boolean
true
false
null
public static Boolean getWinner(Boolean[][] grid) { if (grid == null) return null; int size = grid.length; if (size == 0) return null; if (size == 1 && (grid[0][0] != null)) { return grid[0][0]; } boolean flag = true; // checks horizontal for (int index = 0; index <= size - 1; index++) { flag = true; for (int i = 1; i <= size - 1; i++) { if (grid[index][i] != grid[index][i - 1]) { flag = false; break; } } if (flag) return grid[index][0]; } // checks vertical for (int index = 0; index <= size - 1; index++) { flag = true; for (int i = 1; i <= size - 1; i++) { if (grid[i][index] != grid[i - 1][index]) { flag = false; break; } } if (flag) return grid[0][index]; } // checks diagonal flag = true; for (int index = 1; index <= size - 1; index++) { if (grid[index][index] != grid[index - 1][index - 1]) { flag = false; break; } } if (flag) return grid[0][0]; flag = true; for (int index = 1; index <= size - 1; index++) { if (grid[size - index - 1][index] != grid[size - index][index - 1]) { flag = false; break; } } if (flag) return grid[size - 1][0]; return null; }
旁注:如果你使用 Enum 而不是 Boolean 那么你只需要改变第一行的两个 Booleans 和所有 == 的 equals
Enum
==
equals
这些功能应该这样做 . 当我做自己的井字游戏时,我曾使用过角色阵列 .
int rowcheck(char ch[3][3]) { int i; char ans; for(i=0;i<3;i++) { if(ch[i][0]==ch[i][1] && ch[i][1]==ch[i][2]) { ans=ch[i][0]; break; } } if(ans=='O') return 1; else if(ans=='X') return 2; else return 0; } int colcheck(char ch[3][3]) { int i; char ans; for(i=0;i<3;i++) { if(ch[0][i]==ch[1][i] && ch[1][i]==ch[2][i]) { ans=ch[0][i]; break; } } if(ans=='O') return 1; else if(ans=='X') return 2; else return 0; } int diagcheck(char ch[3][3]) { char ans; if(ch[0][0]==ch[1][1] && ch[1][1]==ch[2][2]) ans=ch[0][0]; if(ch[0][2]==ch[1][1] && ch[1][1]==ch[2][0]) ans=ch[0][2]; if(ans=='O') return 1; else if(ans=='X') return 2; else return 0; }
如果1返回,则玩家1获胜,否则玩家2获胜 . 查看此链接以获取更多信息:
https://keepkoding.wordpress.com/2015/12/12/everybody-knows-tic-tac-toe/
请注意,此链接在C中,但逻辑很容易理解 .
2 回答
我假设您正在使用
Booleans
的双维数组 . 由于布尔值可以有三个值(null,true和false) . 由于在任何给定时间只有2名玩家可以玩,因此您只需要三个值 . 未定义,玩家1和玩家2 .只要大小超过
1
,这是一个适用于任何Boolean
数组的方法 . 如果true
获胜,它将返回true
,如果false
获胜,则返回false
,如果还没有获胜者,则返回null
.旁注:如果你使用
Enum
而不是Boolean
那么你只需要改变第一行的两个Booleans
和所有==
的equals
这些功能应该这样做 . 当我做自己的井字游戏时,我曾使用过角色阵列 .
如果1返回,则玩家1获胜,否则玩家2获胜 . 查看此链接以获取更多信息:
https://keepkoding.wordpress.com/2015/12/12/everybody-knows-tic-tac-toe/
请注意,此链接在C中,但逻辑很容易理解 .