在3x3 Tic tac toe游戏中找出胜者的最佳最佳方式是什么?其中棋盘由矩阵表示?建议请
答案 0 :(得分:2)
我假设您使用的是Booleans
的双维数组。由于布尔值可以有三个值(null,true和false)。由于在任何给定时间只有2名玩家可以玩,因此您只需要三个值。未定义,玩家1和玩家2.
只要大小超过Boolean
,这是一种适用于任何1
数组的方法。如果true
获胜,则会返回true
,如果false
获胜,则返回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
< / p>
答案 1 :(得分:1)
这些功能应该这样做。我做了我的井字游戏后,我使用了一个字符数组。
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 ++编写的,但逻辑很容易理解。