在过去的两天里,我一直在尝试制作 N x N Tic Tac Toe 游戏,但我遇到了一个问题,我不明白为什么会发生这个问题,如果有人可以提供帮助,我会很高兴我解决这个问题。问题是当我检查 Horizontal Win 时,我的程序仅检查第一行而不检查其他行。这是我用来检查水平获胜的函数:
void HorizontalWin()
{
for(int i=0; i<size; i++){
for(int j=0; j<size; ++j){
if(board[i-1][j-1]==board[i-1][j] && board[i][j]!='_')
horizontal=1;
else {
horizontal=0;
break;
}
}
if (horizontal==1)
break;
}
}
大小:是网格的大小,它取自用户。
最佳答案
对于初学者来说,当函数使用全局变量时,这是一个坏主意,尽管它可以在不访问全局变量的情况下进行定义。
尽管如此,您的函数可以通过以下方式定义
void HorizontalWin()
{
horizontal = 0;
for ( int i = 0; !horizontal && i < size; i++ )
{
if ( board[i][0] != '_' )
{
int j = 1;
while ( j < size && board[i][j] == board[i][0] ) j++;
horizontal = j == size;
}
}
}
至于你的函数实现,它具有未定义的行为,因为至少在这个 if 语句中
if(board[i-1][j-1]==board[i-1][j] && board[i][j]!='_')
当 i 或 j 等于 0 时,会尝试访问数组之外的内存。
关于c - N x N 井字棋检查获胜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59079282/