打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
五子棋协议(初稿)
对输入输出协议没经验,但在编写程序的过程中,这一点又很重要。网上搜了很久,没有找到五子棋协议。就连LIB格式,也是凤毛麟角。更纠结的是,按照RENLIB的读写方法,没能完全正确地读出目前某些很有名气的软件的文档。因此,自己写了一个。望有经验的大侠帮忙指点指点。现在先贴出第一部分:输入输出协议。其他部分正在完善中。 五子棋协议引言在编写五子棋程序过程中,文件格式和引擎与界面的协调统一很伤脑筋。为了今后自己编写程序的规范,参考UCI协议,对格式和传输作了初步规范,撰写了AGI协议(Amoyman Gobang Interface):(1)阿麦系列程序都遵循AGI协议;(2)根据该协议编写五子棋引擎可以被协议编写的界面调用;(3)根据该协议编写五子棋界面可以调用协议编写的引擎。AGI协议包含四个部分:1、AGI协议,用于引擎与界面的信息传输;2、开局库格式,压缩的独立局面,供引擎调用;3、对局谱格式,XML格式记录的对局棋谱,供界面调用;4、棋谱格式,含注释、评价的有序局面,供界面调用。第一部分 AGI协议一、AGI协议的特点(1)引擎程序是可执行文件,与界面程序通过“标准输入”和“标准输出”(即C语言中的stdin和stdout)来通讯。(2)输入和输出是以“行方式”来完成的,界面发给引擎的每条指令都必须以“回车”(即C语言中的'\n')结束,界面接收引擎的反馈也一样。(3)引擎启动的第一条指令必须是AGI指令,让引擎进入AGI协议状态。(4)无论是否在思考,引擎都必须随时接收指令,界面程序可以随时中断引擎的工作或改变引擎的思考方式。每条指令都以特定的关键字开头,关键字和参数之间用空格分隔。(5)界面必须随时接收引擎的反馈信息,每条反馈信息也都以特定的关键字开头,关键字和参数之间用空格分隔。(6)在引擎搜索前,界面要与引擎确定“当前局面”。当前局面可以是新定义的局面,也可以是在前一局面经过指定的着法后生成的局面。(7)引擎接收到“GO”指令后开始思考(搜索),但在PONDER状态为ON时,可以自动进行后台思考。(8)如果对局是计时的,每次思考时界面都必须指定剩余时间(毫秒),引擎仅仅根据剩余时间来决定思考策略。(9)当引擎完成一个局面的搜索,得到一步最佳着法后,并不改变“当前局面”,只是把这个着法反馈给界面,由界面来确定下一步,并把确定的着法告诉引擎。(10)引擎可以自带开局库,也可以由界面指定开局库。二、棋盘格式AGI协议中,棋盘采用网格式坐标来表示棋盘上的点,坐标以16进制数表示,横向从1到F,纵向从0到E。左上角为01,右下角为EF,天元为78,四个星点坐标分别为34、3C、B4、BC。局面格式以黑白相间的方式表示已有的局面,同一色的棋子与顺序无关。如:长星开局,可以表示为78695A,也可以表示为5A6978。在界面中,对局面格式给定的局面不标注着法序号。着法格式以黑白相间的落子点来顺序表示。如:花月开局,表示为786869。着法格式由于有先后顺序,在界面中,在选择显示序号时,标注着法的序号。三、输入和输出协议输入协议就是界面向引擎发送指令的协议,协议内容通常由一系列指令集组成;输出协议则规定了引擎反馈给界面的信息,以及这些信息具体的含义。为描述方便,指令以红色表示,反馈以蓝色表示。输入输出协议不区分大小写,即:AGI与agi为同一指令。在以下的描述中,大写为保留字,小写为具体内容。1、AGI这是引擎启动后,界面需要给引擎发送的第一条指令,通知引擎现在使用的是AGI协议。2、ID NAME name [AUTHOR author]这是AGI指令的反馈信息,显示引擎名称、版本号和作者。3、OPTION OWNBOOK TRUE|FALSE PONDER TRUE|FALSE这是AGI指令的反馈信息,表示是否自带开局库、是否后台思考。4、AGIOK这是AGI指令的最后一条反馈信息,表示引擎已经进入AGI协议通讯的状态。5、SETRULE FORBIDDEN|UNFORBIDDENFIRSTCHANGE|THIRDCHANGE FIVETWINE|FIVEMULITY设置规则:有禁手/无禁手,一手交换/三手交换/无交换,五手二打/五手多打(山口规则)/五手一打FORBIDDEN|UNFORBIDDEN,采用禁手/无禁手规则,默认禁手规则FIRSTCHANGE|THIRDCHANGE,一手交换、三手交换,默认无交换TIVETWINE|FIVEMULITY,五手二打、五手多打,默认五手一打6、SETOPTION OWNBOOK ON|OFF [PONDER ON|OFF]设置引擎参数,参数包括自带开局库和后台思考(在有自带开局库和后台思考功能时,开关这些功能。默认状态为开启)。该指令无需反馈。7、ISREADY检测引擎是否处于“就绪”状态,如果引擎发送回READYOK信息,则说明引擎已经就绪,界面可以向引擎发出其他指令。8、READYOK这是ISREADY的反馈信息,仅仅表示引擎可以接收指令了。即使引擎在思考,接收到ISREADY指令后也会返回READYOK。9、POSITION [STATU statu] [MOVES moves]设置“当前局面”,STATU指定未确定先后次序的着法,缺省表示空棋盘,MOVES指定确定先后次序的着法。10、GO [SEARCH moves] [PONDER] [TIME millseconds|INFINITE]让引擎对当前局面进行思考。(1)SEARCH moves,只让引擎在这几步中选择一步;(2)PONDER,让引擎进行后台思考(即对手在用时,引擎的时钟不起作用),后台思考状态下无需要反馈BESTMOVE;(3)TIME millseconds|INFINITE,剩余思考时间(毫秒),INFINITE为无限制搜索,直到叫停或全部搜索点都终结。11、INFO ...引擎报告思考状态(1)DEPTH depth,搜索深度;(2)PV pv,最佳线路;(3)SCORE score,引擎对当前局面的评分;(4)NPS nps,引擎速度,每秒搜索的节点数;(5)SEARCH moves,当前局面的搜索着法;(6)WIN moves,已发现的胜利着法;(7)LOSE moves,已发现的失败着法。12、STOP中断引擎的思考,若处于前台思考状态,立即反馈思考结果。13、DOMOVE move在当前局面下进行增加move着法,并把结果作为当前局面。14、BESTMOVE move|CHANGE PONDER move引擎思考结束后(不管是否被STOP中断)显示的结果(CHANGE为交换),PONDER指为对手思考的结果,通常引擎会提供此信息。15、QUIT让引擎退出运转,无论引擎思考与否。16、BYE对QUIT的反馈,表示引擎已经退出。四、举例在下面的例子中,输入部分(从界面到引擎)用红色表示,输出部分(从引擎到界面)用蓝色表示。AGIID NAME Amoyman 1.0ID AUTHOR Amoyman KUAOPTION OWNBOOK TRUE PONDER TRUEAGIOKSETOPTION OWNBOOK ONSETOPTION PONDER OFFSETRULE FORBIDDENISREADYREADYOKPOSITION MOVES 78685A69GO SEARCH 67596A6BINFINITEINFO SEARCH 67596A6BINFO DEPTH 1INFO DEPTH 1 SCORE 3 PV 6789INFO DEPTH 2INFO NPS 786000……STOPBESTMOVE 67 PONDER 89DOMOVE 67GO INFINITEINFO ……STOPBESTMOVE 89 PONDER 79QUITBYE  
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
中国象棋电脑应用规范(五)
五子棋必胜开局定试
安卓最强五子棋对弈软件,没有之一(附电脑版)
c++招聘技能集
五子棋必胜技巧
如何用象棋巫师破解残局
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服