中国象棋游戏的胜负判断非常复杂,以至于象棋游戏的裁判都需要进行等级考试!
通常来说,人机对战的胜负判断要比真实比较比赛的裁判简单很多。在人机对战游戏中,我们要实现的逻辑是有限的:
- 如果 A 方行棋后,无论对方走什么棋,下一步都能吃掉对方的老将,则可判断 A 方获胜
- 如果 A 方行棋后,对方无棋可走,则可判断 A 方获胜
- 如果 A 方连续将军,造成三个连续的重复局面,则判断 A 方败阵
- 无吃子超过 60 个回合,判和棋
其它的关于「捉、闲」、「一将一闲」这些情况,我们不在 App 中实现。
本节概要
- 静态检查游戏结果
- 检查长将情况
- 检查和棋情况
开启新对局
在进行对战结果的检查前, 我们先看看如何开启一个新的对局。
棋盘走几步之后,想「重新开始一个新的对局」的需求比较强烈,我们优先解决这个强需求。
我们在 Phase 类中添加一个新的方法 initDefaultPhase,将原来 defaultPhase 构造方法中所有代码移动到 initDefaultPhase 方法中,在空的 defaultPhase 方法中添加对 initDefaultPhase 方法的调用,调整后的 Phase 类像下边这样:
...
class Phase {
...
Phase.defaultPhase() {
initDefaultPhase();
}
void initDefaultPhase() {
//
_side = Side.Red;
_pieces = List<String>(90);