[英]How to check 2 Dimensional array for a winner in a game of tic tac toe
I am creating a game of tic tac toe as a project with a 2dimensional array and I am having some trouble checking the spots to see if there is a winner. 我正在创建一个井字游戏,作为一个具有二维数组的项目,但在检查位置以查看是否有赢家时遇到了一些麻烦。 Can someone help me debug this?
有人可以帮我调试吗? Here is the checkwinner function and the main function.
这是检查赢家功能和主要功能。
char CheckWinner( char board[3][3])
{
int i = 0;
int j = 0;
if ( board[i][j] =='X' && board[i][j+1] == 'X' && board[i][j+2]== 'X' )
{ W = X;}
else if (board[i+1][j] && board[i+1][i+1] && board[i+1][j+2]== 'X' )
{ W = X;}
else if (board[i+2][j] && board[i+2][j+1] && board[i+2][j+2]== 'X')
{ W = X;}
else if (board[i][j] && board[i+1][j] && board[i+2][j]== 'X')
{ W = X;}
else if (board[i][j+1] && board[i+1][j+1] && board[i+2][j+1]== 'X')
{ W = X;}
else if (board[i][j+2] && board[i+1][j+2] && board[i+2][j+2]== 'X')
{ W =X;}
else if (board[i][j] && board[i+1][j+1] && board[i+2][j+2]=='X')
{ W = X;}
else if (board[i+2][j] && board[i+1][j+1] && board[i][j+2]== 'X')
{ W = X;}
else if (board[i][j] && board[i][j+1] && board[i][j+2]== 'O' )
{ W = O;}
else if (board[i+1][j] && board[i+1][j+1] && board[i+1][j+2]== 'O')
{ W = O;}
else if (board[i+2][j] && board[i+2][j+1] && board[i+2][j+2]== 'O')
{ W = O;}
else if (board[i][j] && board[i+1][j] && board[i+2][j]== 'O')
{ W = O;}
else if (board[i][j+1] && board[i+1][j+1] && board[i+2][j+1]== 'O')
{ W = O;}
else if (board[i][j+2] && board[i+1][j+2] && board[i+2][j+2]== 'O')
{ W = O;}
else if (board[i][j] && board[i+1][j+1] && board[i+2][j+2]== 'O')
{ W = O;}
else if (board[i+2][j] && board[i+1][j+1] && board[i][j+2]== 'O')
{ W = O;}
return W;
}
int main ()
{
char board[3][3];
char Win = CheckWinner(board);
int r = 0;
InitializeBoard(board);
for (int r = 0; r < 4 ; r++)
{
PlayX(board);
PlayO(board);
PrintBoard(board);
}
CheckWinner(board);
cout << Win ;
if (Win == X)
{
cout << "The winner is Player 1.";
}
else if (Win == O)
{
cout << "The winner is Player 2.";
}
else if (Win == TIE)
{
cout << " IT'S A TIE";
}
else;
system("PAUSE");
return 0;
You can optimize your conditional code with the following: 您可以使用以下方法优化条件代码:
typedef char piece;
piece iswin() const
{
piece ret = 'T';
// Checks for horizontal win
for (int i = 0; i < 3; ++i)
if (*arr[i] == arr[i][1] && arr[i][1] == arr[i][2])
if ((ret = *arr[i]) != 'T')
return ret;
// Checks for vertical win
for (int i = 0; i < 3; ++i)
if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i])
if ((ret = arr[0][i]) != 'T')
return ret;
// Check for diagonal win (upper left to bottom right)
if (**arr == arr[1][1] && arr[1][1] == arr[2][2])
if ((ret = **arr) != 'T')
return ret;
// Check for diagonal win (upper right to bottom left)
if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0])
if ((ret = arr[0][2]) != 'T')
return ret;
return ret;
}
// checking the result:
switch (winner) {
case 'T': /* tie */ break;
case 'X': /* X won */ break;
case 'O': /* O won */ break;
}
This is little bit cleaner. 这有点干净。 And it does 6 loops instead of 9.
它执行6个循环而不是9个循环。
You immediately assign the CheckWinner
result to Win
, then play the game out, then call CheckWinner
again without assigning its result to Win
. 您立即将
CheckWinner
结果分配给Win
,然后玩游戏,然后再次调用CheckWinner
而不将结果分配给Win
。 Thus when you check Win
in the following line, you have the original result from when the board wasn't even initialized. 因此,当您在下一行中选中
Win
时,您将获得甚至没有初始化板时的原始结果。
Probably has to do with assigning a literal O or X into a return value that is supposed to be a char. 可能与将文字O或X分配给应该是char的返回值有关。 Thus instead of O or X it should be 'O' or 'X'.
因此,代替O或X的应该是'O'或'X'。 Unless O or X is defined as a char variable outside the posted code.
除非将O或X定义为发布代码之外的char变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.