电脑象棋开发-eleeye学习总结

这篇博客详细介绍了电脑象棋引擎eleeye的开发步骤,包括ucci协议、局面表示、走法生成、置换表、开局库、搜索算法和局面评价等关键部分。通过对源代码的分析,揭示了引擎如何处理各种棋局状态,并提出了可能的优化建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个引擎共分为几个步骤:

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 开局库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值