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;我是工作在我的Tic-Tac-脚趾在C(与定制的大小板,5需要在一个连续的胜利)。我有一个非常非常长的“if”,我想把它变短。我也有4次这个代码,因为行,列,诊断,反诊断,所以它需要一些修复。
发布于 2016-12-03 17:05:58
将一些代码移动到函数中可能会有帮助,如下所示:
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;
}
}然后,您可以对列测试和对角线测试执行类似的操作。然而,我怀疑有一个比这更有效的算法来确定游戏是否赢了。
https://stackoverflow.com/questions/40950038
复制相似问题