中国象棋界面程序 《兵河五四》 V1.3beta 测试版
程序设计:范德军 王祥
软件策划:飞云追风 黄红安 遥遥 王锐
《兵河五四》V1.3是支持UCI,UCCI和WINBOARD协议的中国象棋界面程序,可以加载众多流行的引擎。 界面豪华漂亮,功能丰富实用,操作简单流畅。
时值北京奥林匹克象棋大赛前夕,推出多协议版本,希望对各位进行引擎测试有所帮助。
一、程序设计
编程语言:Microsoft Visual C++ 2005。
程序运行时所需内存16MB,CPU占用率0~30%,建议使用1024×768以上分辨率。
界面基于双线程而设计,使得程序拥有一颗强劲的心脏。界面线程负责显示,辅助线程负责通讯。引擎与界面通讯,延时仅为几十毫秒。depth=1时,在双CPU机器上可以在1秒钟下完一盘棋。
二、界面设计
基于BCGCBPro界面库而设计,程序具有华丽的外观。支持可停靠窗口,窗口可以随意缩放和拖动。拥有Office,Window XP, Visual Studio等10中界面风格,一定会有你喜欢的方案。
内置各5种背景、棋盘、棋子,用户还可以定制自己的背景和棋盘。若图形不能正常显示,可能是Windows本版低,缺少GdiPlus.dll。在资料目录中有一个,放置在C:\WINDOWS\system32\或本程序的目录均可。界面能正常显示的用户,可删除此文件。
循环更换窗口背景和棋盘背景。选择界面菜单,或者在非棋盘区域点击鼠标右键,可以切换窗口背景或棋盘背景,图片分别存放在..\\Background和..\\BoardImage中。只要是你喜欢的图片,名字不限,图像格式不限,都可以丢进去。不宜过多,可以更快找到你需要的背景。为了兼通更多的格式,程序未对文件的合法性做更多的检验,非图形文件不要放入。
界面的主要元素有棋盘窗口、棋谱窗口、着法窗口、引擎信息、局势曲线、联赛窗口。
棋盘窗口主窗口,显示红黑双方的时钟,计时是自动进行的,用户一旦下达引擎执黑或者引擎执红命令,或者用鼠标触动棋子,计时器便开始工作。结束引擎执黑或引擎执红时,计时器暂停,喝杯茶后仍可继续下棋。
着法表格中,附有注释窗口,与着法同步显示。
着法窗口,显示当前局面所有合法移动。用户选择着法,可以进行选择性搜索。按Ctrl键可以多选,还可以进行反向选择。在棋盘窗口,点击要走的棋子后,还可以进行“分析棋子”。这些功能对于人机操作很有帮助。
局势曲线窗口,使用了缩放技术,用户随时能够看到整盘棋的曲线。不同引擎使用不同的棋子价值,分数的比例难以统一。通过滚动鼠标的滚轮,实现纵向缩放。引擎菜单中,选择局势曲线命令,可以对棋谱文件中的局面进行批量评估,方便用户观察局面的变化。
引擎联赛窗口,平时不显示,举行联赛时自动打开。
三、对协议的支持情况
UCI协议,全部支持。
UCCI协议,支持绝大多数命令。
WINBOARD协议,部分支持。这种古老的协议与UCI和UCCI显得格格不入,目前只有奇兵和大圣使用,而且相互之间也不能很好的兼容,甚至一个引擎一个协议。加载WINBOARD引擎时,总是寻找log文件夹,找不到就会罢工。因此,WINBOARD协议不能享用引擎注册功能,使用时,只能临时加载,而且比赛中途最好不要暂停。
请引擎设计人员注意:加载引擎后,界面将不再发送缺省的配置。引擎启动后,需要自行分配Hash表,加载开局库。界面和引擎的设计更精简、加速引擎启动速度、避免重复分配Hash表,杜绝内存碎片的产生。必要的规则还是要通知引擎的,如棋规、自然限着等。
四、支持的文件格式
支持的棋谱文件有:fen, pgn, xqf, mxq,可以直接打开或保存,支持文件拖放。
五、棋局与着法
编辑棋局功能,所见即所得,支持鼠标右键。
棋局可以进行各种翻转,如上下翻转、左右翻转、180°旋转,三者为异或关系。
复制和粘贴局面,局面后跟随的moves,会转化为移动着法。
复制和粘贴着法,支持fen和中文两种格式。
删除着法,也就是悔棋功能,比赛时间按比例缩短。
六、引擎管理
用户可以加载单引擎或双引擎,可以进行人人、人机和机机对弈。
极具特色的引擎管理功能,一旦引擎被成功加载,程序会将引擎信息保存在注册表和引擎配置文件中。一切都自动完成,下次自动加载,或者方便地从组合框中更换引擎。
及时显示比赛中的任何细节,如红黑双方引擎的名称、着法、时间、搜索深度、搜索节点、NPS、主分支和局势曲线。
七、游戏规则
引擎自动对弈时,需要有棋规进行裁决。《兵河五四》写了两套棋规:
1. 中国棋规——《象棋竞赛规则》(1999年版)
禁止长将和长捉,实际上都是捉,长将是在捉将帅。
杀(Mate Threat)还未考虑,利用NullMove搜索,在一定程度上能够识别杀。界面程序可以如此设计,但是引擎识别杀棋会大大降低搜索的效率。电脑象棋取消杀,也许更加合理,KingSafety考虑不足,才另对手有机会照将。
初始局面为第0步,最少4步构成一个循环。中象规则裁决较为严格,原则上只要局面重复,比赛就要终止。
上面所说的4循环为最简单的形式,为偶数循环,棋子往复运动之后不失先手。大于等于8的偶数循环有一种奇特的形式,如双车或双炮相互交换位置,局面的ZorbristKey完全相同。
还存在奇数循环,棋规中未做规定。棋子往复运动之后,观察棋局的ZorbristKey完全相同,唯一不同的是先手方,即奇数循环丧失先手。甚至会把棋子走到对方的口中。一些残局,棋子只有在个别位置才能守和,会出现奇数循环。界面识别奇数循环后,并未做出裁决,而是让引擎继续下棋,达到自然限着时,终止比赛。
捉的判断极为复杂。棋子移动前不存在捉,移动后存在捉,程序已经能够正确识别。目前不能准确识别真根子和假根子。判断棋子是否有根时,只是看棋子是否存在保护,准备使用SEE算法,提高识别的准确率。
2. 亚洲棋规——《象棋比赛规例》 (亚洲象棋联合会裁判组制订)
禁止长将和长捉。长将与长捉判负,一将一捉判和,分捉判和,将士象兵主动捉子按闲处理;配合车马炮捉子,均按捉论。车马炮邀兑受牵制的同类棋子,亦按捉论。
说实话,这两套棋规,本人都看着别扭。祝愿中国规则早日取消“杀”,遇到那种棋型,只因防守不严密,纯粹是活该。亚洲棋规的不合理之处在于分捉,包含一将(捉将帅)一捉。棋规中有一例:32(图七十六):2e1k1r2/9/4e4/9/9/2P3P2/1R7/2h1E4/4A4/4KAEc1 r - - 0 1 单车士象全对车马炮双象,红单车分捉马和炮,结果不言而喻——和棋。黑方的马和炮都不能丢,否则难破车士象全。人家多两颗大子,认输算了!
八、引擎联赛功能
可视化多引擎对战技术,可以进行多协议引擎循环赛,支持限时加时制。使用此功能,需要三个步骤:
1. 选择棋规:
界面有两套棋规裁决系统,中国棋规和亚洲棋规,许多局面的判决结果完全不同。
2. 确定参赛引擎:
使用“引擎管理器”加载或选择参赛的引擎,最多可以加载32个引擎,也可以是一个引擎的多个本版。经常使用的引擎在表中可以找到,新的引擎可以临时加载。引擎按积分排序,以引擎输出的ID作为标识,字符长度无限制。
3. 开始联赛
选择“引擎联赛“,设置联赛名称、循环次数、比赛时限等必要的参数就可以了。比赛目录后面,程序自动追加联赛名称作为子目录。
每局比赛结束后,程序保存棋谱文件(PGN格式),宣布比赛结果,统计已经花费时间和预计比赛结束时间。
程序还可以记录引擎通讯日志文件,若非引擎设计人员,关闭此项最好。界面和引擎输出的每条语句都要保存,频率极高,简直是对硬盘的摧残。
4. 暂停联赛
中途暂停联赛、或者强行关闭窗口,程序都会自动保存比赛结果;下次可以利用“打开联赛文件”功能继续比赛。联赛文件的名称为:比赛名称.ini 可以用记事本打开查看,切勿随意修改,继续比赛时将调入此文件。
联赛结束后,显示比赛结果,刷新所有参赛引擎的成绩,包括ELO登记分和积分。对于新参赛的引擎,K=20;再次用此引擎比赛时,K=10。
使用过程中,如果BUG或改进意见,请计时与作者或策划人员联系,衷心感谢您的帮助和支持!
http://bbs.elephantbase.net/viewthread.php?tid=2878&fpage=1
绿色版,无需破解。
请注意一些问题:
加载WINBOARD引擎,不能同时加载两个以上。
有WINBOARD引擎时,使用联赛功能,中途不要中断。
这种古董级协议就是麻烦,修正后会及时更新。
中国象棋规则,取消,杀,完全合理,无条件的取消。
中国象棋规则,取消,捉,完全合理,要使用巧妙的办法解决。
不知道比起旋風如何,
主要殘局要改進,不然新出棋軟也沒什麽價值了...