C++实现Connect 4横向获胜判定2D数组函数运行异常排查
四子棋横向获胜判定函数故障排查
以下是你代码中的核心问题:
- 变量名拼写错误:if判定逻辑中第四个棋子的数组名误写,前三个访问的是
Board棋盘数组,第四个错写为dyBoard,读取的不是当前棋盘的对应位置数据,直接导致判定逻辑失效。 - 循环边界逻辑错误:横向获胜的判定要求同一行内连续4列的棋子相同,因此列下标的最大起始值应为
总列数 - 3,才能保证j+3不会超出列的合法范围。你的代码错误使用row - 3(行数减3)作为列循环的边界,若行列数不相等,会直接漏掉绝大多数合法的横向四子连珠场景。 - 删除-3的操作反而引入新问题:移除循环条件中的-3后,列下标j会遍历到最大列数,此时访问
j+3会直接超出数组的合法访问范围,触发内存越界错误,引发程序崩溃或者返回异常结果,无法解决原有问题。 - 数组维度对应逻辑问题:如果你的
Board[i][j]定义中i是列下标、j是行下标,当前的横向判定逻辑完全写反,需要调整为固定列下标i,判定连续行下标位置的棋子是否相同。
如果你的Board数组按[行号][列号]定义,修正后的代码如下:
// 横向获胜判定:同一行内连续4列棋子相同 for (int i = 0; i < row; i++) { for (int j = 0; j < column - 3; j++) { if (Board[i][j] == charvar && Board[i][j + 1] == charvar && Board[i][j + 2] == charvar && Board[i][j + 3] == charvar) { return charvar; } } }
内容的提问来源于stack exchange,提问作者GUUD TRUBES
相关产品推荐
相关产品推荐

