《兵河五四》V1.0是支持ucci协议的中国象棋界面程序,可以加载大多数ucci引擎。
一、程序设计
Microsoft Visual C++ 2005。
程序运行时所需内存8~12MB,CPU占用率0~30%,建议使用1024×768以上分辨率。
二、界面设计
基于BCGCBPro界面库而设计,程序具有华丽的外观。支持可停靠窗口,窗口可以随意缩放和拖动。
内置各5种背景、棋盘、棋子,用户还可以定制自己的背景和棋盘。若图形不能正常显示,可能是Windows本版低,缺少GdiPlus.dll,随便找个XP操作系统拷贝过来。
界面的主要元素有棋盘窗口、着法表格、引擎信息和局势曲线:
棋盘窗口中显示红黑双方的时钟,计时是自动进行的,用户一旦下达引擎执黑或者引擎执红命令,或者用鼠标触动棋子,计时器便开始工作。结束引擎执黑或引擎执红时,计时器暂停,喝杯茶后仍可继续下棋。
着法表格中,附有注释窗口,与着法同步显示。
引擎信息窗口,一行最多显示32个着法,大于此值移到下一行显示。行数不足时,表格控件自动增加列数。
局势曲线窗口,使用了缩放技术,用户随时能够看到整盘棋的曲线。不同引擎使用不同的棋子价值,分数的比例难以统一。通过滚动鼠标的滚轮,实现纵向缩放。引擎菜单中,选择局势曲线命令,可以对棋谱文件中的局面进行批量评估,方便用户观察局面的变化。
三、对UCCI协议的支持
程序默认使用毫秒制,支持秒制的引擎无法正常工作。
ucci 3.0 中的randomness和promotion指令,目前尚不支持,以后再做补充补充。
程序未支持nobestmove指令。如果引擎认为没什么好的着法可走,可以输出bestmove=0,如困闭,或者棋盘上没有棋子。即使是吃将帅的移动、双王照面、无法解将的局面、无将帅的局面,只要棋子能动,还是尽量输出正确的bestmove,如此任何局面都是有解的。比赛时,界面会首先对引擎输出的任何着法都要做合法性检验,比赛时遇到nobestmove,会认为是非法的移动。
四、支持的文件格式
支持的棋谱文件有:fen, pgn, xqf, mxq,可以直接打开或保存,支持文件拖放。
五、棋局与着法
编辑棋局功能,所见即所得,支持鼠标右键。
棋局可以进行各种翻转,如上下翻转、左右翻转、180°旋转,三者为异或关系。
复制和粘贴局面,局面后跟随的moves,会转化为移动着法。
复制和粘贴着法,支持fen和中文两种格式。
删除着法,也就是悔棋功能,比赛时间按比例缩短。
六、引擎管理
用户可以加载单引擎或双引擎,可以进行人人、人机和机机对弈。
极具特色的引擎管理功能,一旦引擎被成功加载,程序会将引擎信息保存在注册表和引擎配置文件中。一切都自动完成,下次自动加载,或者方便地从组合框中更换引擎。
及时显示比赛中的任何细节,如红黑双方引擎的名称、着法、时间、搜索深度、搜索节点、NPS、主分支和局势曲线。
七、ucci引擎联赛功能
可视化多引擎对战技术,可以进行ucci引擎循环赛,支持限时加时制。目前的功能很简单,引擎配置文件形同虚设,全部使用缺省设置。
首先,使用“引擎管理器”加载或选择参赛的引擎,最多可以加载32个引擎,也可以是一个引擎的多个本版。引擎按积分排序,以引擎输出的ID作为标识,字符长度无限制。
之后,选择“UCCI引擎联赛“,设置联赛名称、循环次数、比赛时限等必要的参数就可以了。比赛目录后面,程序自动追加联赛名称作为子目录。
每局比赛结束后,程序保存棋谱文件(PGN格式),宣布比赛结果,统计已经花费时间和预计比赛结束时间。
程序还可以记录引擎通讯日志文件,若非引擎设计人员,关闭此项最好。界面和引擎输出的每条语句都要保存,频率极高,简直是对硬盘的摧残。
中途暂停联赛、或者强行关闭窗口,程序都会自动保存比赛结果;下次可以利用“打开联赛文件”功能继续比赛。联赛文件的名称为:比赛名称.ini 可以用记事本打开查看,切勿随意修改,继续比赛时将调入此文件。
联赛结束后,显示比赛结果,刷新所有参赛引擎的成绩,包括ELO登记分和积分。对于新参赛的引擎,K=20;再次用此引擎比赛时,K=10。
八、象棋竞赛规则(1999年版)
亚洲规则用于电脑象棋和棋太多,会减少观看对局的兴致,未作考虑。中象规则又太过复杂,以致于可以形成专门的职业,扩大就业机会。
引擎对弈时,基本上采用了中国版象棋规则。禁止长将和长捉,实际上都是捉,长将是在捉将帅。杀(Mate Threat)还未考虑,利用NullMove搜索,在一定程度上能够识别杀。界面程序可以如此设计,但是引擎识别杀棋会大大降低搜索的效率。电脑象棋取消杀,也许更加合理,KingSafety考虑不足,才另对手有机会照将。
初始局面为第0步,最少4步构成一个循环。中象规则裁决较为严格,原则上只要局面重复,比赛就要终止。
上面所说的4循环为最简单的形式,为偶数循环,棋子往复运动之后不失先手。大于等于8的偶数循环有一种奇特的形式,如双车或双炮相互交换位置,局面的ZorbristKey完全相同。
还存在奇数循环,棋规中未做规定。棋子往复运动之后,观察棋局的ZorbristKey完全相同,唯一不同的是先手方,即奇数循环丧失先手。甚至会把棋子走到对方的口中。一些残局,棋子只有在个别位置才能守和,会出现奇数循环。界面识别奇数循环后,并未做出裁决,而是让引擎继续下棋,达到自然限着时,终止比赛。
捉的判断极为复杂。棋子移动前不存在捉,移动后存在捉,程序已经能够正确识别。目前不能准确识别真根子和假根子。判断棋子是否有根时,只是看棋子是否存在保护,准备使用SEE算法,提高识别的准确率。
这里下载: