for (c = 0; c < SIZE-4; ++c)
for (r = 0; r < SIZE; ++r)
if (board[r][c] == cross && board[r][c+1] == cross && board[r][c+2] == cross && board[r][c+3] == cross && board[r][c+4] == cross)
return true;
我正在使用C中的Tic-Tac-Toe(使用自定义尺寸板,需要连续5个才能获胜)。我真的很长'如果',我想缩短它。我也有这个代码4次因为行,列,diag,antidiag,所以它需要一些修复。
答案 0 :(得分:2)
将一些代码移动到函数中可能会有所帮助,如下所示:
bool rowHasNCrosses(int board[][SIZE], int r, int c, int n) {
for (int i = 0; i < n; i++) {
if (((c + i) >= SIZE) || (board[r][c+i] != cross)) return false;
}
return true;
}
for (int c = 0; c < SIZE - 4; ++c) {
for (int r = 0; r < SIZE; ++r) {
if (rowHasNCrosses(board, r, c, 5)) return true;
}
}
然后你可以为列和对角线测试做类似的事情。但是,我怀疑有一种比这更有效的算法来确定游戏是否已经赢了。