生命应张弛有度!前面连续三节课程中,我们进行了紧张的原生引擎封装工作,这一节我们来做一点轻松的内容!
在与 AI 对战过程,人类玩家经常需要悔棋功能,这种让时间倒流的技能不会太简单的,这一节的任务就是让我们的象棋游戏支持悔棋!
本节概要
- 重构 Phase 类,抽取记谱功能
- 依据棋谱记录添加悔棋逻辑
- 显示对战着法的棋谱
Phase 重构
目前,在我们的 Phase 类中已经存在一些记录之前走棋过程的能力,我们将重构这一部分的设计,在一个专门的记录工具类中实现更完善的行棋记录功能,以为悔棋的实现作好准备。
我们在 lib/cchess 下新建一个 cc-recorder.dart 文件,计划由它来记录走棋的整个过程:
class CCRecorder {
//
// 无吃子步数、总回合数
int halfMove, fullMove;
String lastCapturedPhase;
final _history = <Move>[];
CCRecorder({this.halfMove = 0, this.fullMove = 0, this.lastCapturedPhase});
}
大家可以发现这个类中的三个成员变量都在 Phase 类中出现过了,我们现在这里创建 Recorder 工具,稍后我们从 Phase 中将这部分功能转换到新建的 Recorder 中来。
接下来,我们为 CCRecorder 类添加几个方法,用于记录新的行其步骤以及悔棋时,删除掉尾部添加的着法:</