在C中缩短我的代码

时间:2016-12-03 16:39:41

标签: c if-statement

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,所以它需要一些修复。

1 个答案:

答案 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;
  }
}

然后你可以为列和对角线测试做类似的事情。但是,我怀疑有一种比这更有效的算法来确定游戏是否已经赢了。