Skip to content

通讯协议定义:AI

Overview

AI 通讯协议是纯二进制编码的整数序列。

基本数据类型:

  • byte B: 8 位无符号整数
  • int I: 大端序 16 位有符号整数

下面的通讯协议中,Name:Type表示类型为Type名为Name的数据。注意Name只是为了协议容易理解,并不会出现在实际数据中。

消息类型(Type)

数据类型:byte

Type Value
道具列表 0x10
移动操作-x轴正向 0x01
移动操作-y轴正向 0x02
移动操作-x轴负向 0x03
移动操作-y轴负向 0x04
融化射线操作 0x05
分裂操作 0x06
游戏结束 0x11

游戏配置

length:B width:B max_round:I player_number:B

道具列表

Type:B ItemCount:I
x:B y:B type:B time:I param:I
x:B y:B type:B time:I param:I
...

移动、融化射线、分裂操作

Type:B

游戏结束

Type:B GameOverType:B Winner:B Score0:I Score1:I
GameOverType Value
正常结束 0x00
玩家断开连接 0x10
玩家操作不合法 0x11
玩家数据格式出错 0x12
评测内部问题 0x20

总体流程

游戏开始之前给AI发送配置信息,共四个数字,分别为地图的长宽以及最大回合上限、当前玩家编号,格式对应见上。

接下来向AI发送道具列表,以Type=0x10为起始,紧跟ItemCount:I为道具总数,之后共ItemCount个五元组,代表道具的五个属性,具体对应见上。

游戏正式开始之后,逻辑不会向AI发送回合开始信息,需要AI的逻辑处理模块自行完成,之后玩家与逻辑通过上述格式进行操作的交互,当前玩家的回合在玩家发送操作后,逻辑会将操作转发至双方(包括发送者);回合的切换可通过AI中逻辑模块维护实现;操作的格式见上。

正常游戏过程中,需要依次发送每条蛇(按照操作顺序)的操作,在每条蛇操作发送后逻辑会传回该操作或是错误信息。

若接收到Type=0x11的信息,则代表游戏结束,AI中的逻辑处理模块需进行结束操作。