在中国象棋里,是否应该是rewind - 2

167 2024-11-01 17:56

在中国象棋中,判断循环回合(即重复局面)的逻辑确实与国际象棋有所不同。在中国象棋中,一个循环局面是指连续四次重复出现相同的棋盘局面,而国际象棋中是连续三次。因此,如果我们要检测中国象棋中的循环局面,我们需要检查四个相同的回合,而不是两个。

您提供的代码修改是正确的,它将比较当前回合与前两个回合之前的回合(即前两步),这样可以确保我们检查的是四个回合。以下是修改后的代码:

```dart

  /// 获取循环回合数
  int repeatRound() {
    int rewind = _step - 1;
    int round = 0;

    while (rewind > 4) {
      if (_moves[rewind].fen == _moves[rewind - 4].fen &&
          _moves[rewind].move == _moves[rewind - 4].move) {
        round++;
      } else {
        break;
      }
      rewind -= 4;
    }
    return round;
  }


```

这段代码的逻辑是:

1. 从最后一步开始向前检查。
2. 比较当前步的 FEN 和移动与前两步的 FEN 和移动是否相同。
3. 如果相同,增加 `round` 计数。
4. 如果不相同,跳出循环。
5. 每次循环结束后,`rewind` 减去 2,继续向前检查。

这样修改后的代码可以正确地检测中国象棋中的循环局面。如果 `round` 的值达到 2(即检测到四个相同的回合),则表明存在循环局面。

 

全部评论

·