这个引擎共分为几个步骤:
1. ucci.h/cpp 协议定义
主要是引擎有3种状态
引导:此时只接受ucci协议,收到后转到空闲状态
空闲:此时接受setoption(设置) position(局面) banmoves(设置禁手) go(进入思考状态) quit(退出)
思考:此时接受stop(停止) ponderhit(改变思考方式),输出bestmove或nobestmove后转到空闲状态
详细的说明可以参考官方网站
2. pregen.h/cpp 一些定义
棋盘定义(棋盘区域表,城池区域表,升变区域表),合理走法定义(合理走法跨度表,马腿表)
车炮位列数组生成,对于车或炮的某一个列或行,生成预定义数组,表示在一个局面下可走到的最大、最小位置、尺子可以走到的最大、最小位置
对车炮以外的其它子,生成普通走法数组(即在棋盘上某个位置可以走到的所有位置)
3. position.h/cpp 局面表示
棋子位置、逻辑定义,包括搜索中的一些变量,比如局面评价值、裁剪参数。从fen串识别局面
4. genmoves.cpp 局面表示
包括PositionStruct结构的4个比较复杂的函数:
Protected 判断某个位置是否被某个子保护
GenCapmoves 和 GenNonCapMoves 分别生成吃子和不吃子的走法,采用pregen.h/cpp中定义的位列技术和预定义表
ChasedBy 检测捉子,不是所有子,根据情况判断被捉子是否有根
5. hash.h/cpp 置换表
存取、获取置换表技术
6. book.h/cpp 开局库