五子棋协议(初稿)
对输入输出协议没经验,但在编写程序的过程中,这一点又很重要。网上搜了很久,没有找到五子棋协议。就连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。着法格式由于有先后顺序,在界面中,在选择显示序号时,标注着法的序号。
三、输入和输出协议
输入协议就是界面向引擎发送指令的协议,协议内容通常由一系列指令
五子棋协议(初稿) 来自淘豆网m.daumloan.com转载请标明出处.