在中国象棋里,是否应该是rewind - 2
111 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(即检测到四个相同的回合),则表明存在循环局面。
全部评论