2.协议基本
2.1字符集
协议中的命令好响应是采用ASCII码,而注释和其他的私人扩展则不受ASCII的限制。
2.2控制字符
HT(Horizontal Tab, 水平制表符),即dec 9
CR(Carriage Return, 回车), 即dec 13
LF(Line Feed, 馈行),即dec 10
貌似协议中说只有这3个控制符有意义,其他的都在input中被丢弃。
2.3空白字符
SPACE (dec 32) Space
HT (dec 9) Horizontal Tab
2.4 换行
用LF表示换行
2.5命令的格式
[id] command_name [arguments]
id是一个可选的唯一的数字(在一局中),即可以不用出现id。
2.6响应的格式
=[id] result
=号表示成功,id对于某条命令的id, 每个result后面跟着2个换行符。
2.7出错格式
?[id] error_message
?号表示出错了,error_message后面也跟2个换行符
2.8时间
对弈中controller和engine之间不需要同步,controller可以在任何时候发送命令,而engine也可以在任何时候返回响应,但是返回的响应要和命令到来的顺序一样(我觉得应该是按照命令的id,因为有可能先发的命令后到达,但是应该按先来的命令先响应)。
2.9注释
采用#进行注释
2.10空行
只有空行或空白的命令不需要响应。
2.11棋盘坐标
棋盘中的交点,在协议里面称顶点(vertice),是以一个字母和数字来表示,例如对于19X19的棋盘,从左到右的字母是从A~T(不包括I),从低到高是1~19。因为英文字符只有25个可以用,所以该协议不支持超过25的棋盘。
2.12私有扩展
它的格式是XXX-YYYY, XXX用来唯一标识一个engine, YYYY用来表示命令。Dash(-)破折号是用来表示这是个私有扩展。