服务端接口
为了让大家的AI可以顺利地进行游戏,并验证我们对策略和AI的一些实现,我们需要一些基础设施来帮助我们完成一些工作。这些工作包括游戏回合的控制、参与者之间的数据同步、游戏数据的储存等功能。
为了简化这些基础工作,以便大家可以更好地集中于AI本身的设计和实现,我们搭建了一个服务器提供了一些基本的接口。使用这些接口,AI可以做到简单的调用REST API接口实现游戏回合时间同步、获取历史数据、提交预测数据等功能。
下图描述了服务器如何驱动游戏一回合接着一回合的运转,同时指出了AI或客户端应何时与服务器交互。
当AI或客户端进入游戏后,应立即向服务器请求获取当前回合的状态,此时可以知道服务器上正在进行的游戏回合的编号,以及本回合还有多长时间结束。AI或客户端可以按照返回的回合编号向服务器提交预测值,并且可以根据本回合剩余时间,设定一个定时器,在下一回合开始时,再次执行获取回合状态的接口,来取得下一回合的状态。这样依次轮转下去,AI或客户端就可以一直参与在游戏中。 同时,AI或客户端还可以在每回合开始时,调用获取历史数据的接口,来得到前几回合的比赛数据。这样可以知道自己在上一回合是否得分胜出,并可以根据历史数据来指导当前回合的预测值。
接口概述
服务器地址是https://goldennumber.aiedu.msra.cn,提供RESTful API接口。所有请求需要的参数都拼装在URL中,并且需要对值进行URL编码。所有的响应报文内容都是JSON格式。如果服务器响应代码不是2**或3**,表示该次请求失败。失败的响应报文至少包含一个message属性:
属性名 | 数据类型 | 备注 |
---|---|---|
message | String | 出错的具体信息 |
服务端REST接口提供了Swagger描述文档: swagger.json 中文版 英文版
可以参考该API文档直接来调用服务器接口,也可以借助第三方工具从swagger文档生成所需语言的SDK来使用。比如,可以借助SwaggerEditor来生成各种语言版本的客户端SDK,可以极大的方便开发。
另外,服务端也提供了API试用页面,可以方便直接的在线试验API接口。
下面是各个接口的详细描述:
新建玩家
请求方式:GET
路径:/api/NewUser
客户端使用该接口可以新建一个玩家。
请求需要用到的参数:
参数名 | 数据类型 | 是否必需 | 备注 |
---|---|---|---|
nickName | String | 可选 | 用户昵称 如果长度超过20,将被截断 建议设置昵称,昵称相对于标识有更好的辨识度 |
响应报文内容中的属性:
属性名 | 数据类型 | 备注 |
---|---|---|
userId | String | 用户标识,格式为Guid格式 |
nickName | String | 用户昵称 |
设置用户昵称
请求方式:POST
路径:/api/NickName
使用该接口可以用来修改用户的昵称,昵称相对于标识来说,有更佳的辩识度。
请求需要用到的参数:
参数名 | 数据类型 | 是否必需 | 备注 |
---|---|---|---|
uid | String | 必需 | 用户标识 |
nickname | String | 必需 | 用户昵称,长度大于20会被截断 |
获取新游戏房间
请求方式:GET
路径:/api/NewRoom
使用该接口创建一个新的游戏房间并获取对应的编号。
请求需要用到的参数:
参数名 | 数据类型 | 是否必需 | 备注 |
---|---|---|---|
uid | string | 必需 | 房间创建者的标识 |
numbers | Int | 可选 | 设置游戏支持的每个玩家可以提交的预测值的个数,目前支持提交1个或2个数 默认是1,表示每个玩家可以提交一个数 |
duration | Int | 可选 | 设置游戏中每回合的间隔时间 默认值是60秒,取值范围在10~200之间 |
userCount | int | 可选 | 设置游戏房间中允许的最大玩家数 默认值是0,表示没有限制 有玩家数量限制的房间,当所有玩家都提交预测值后,会立即计算本回合结果,并开始下一轮 注意:这里的玩家数量限制是针对房间的,不是针对一个回合,只要玩家在房间内任一回合提交过预测值,则认为该玩家始终在房间内 |
roundCount | int | 可选 | 设置比赛总回合数 默认值是0,表示没有限制 如果某一回合没有玩家提交数据,认为该回合无效,不计在回合数内 如果有效回合数达到设置的总回合数,游戏结束,不再允许提交数据 |
manuallyStart | Int | 可选 | 是否手动开始游戏 默认值0,表示创建完房间后,游戏自动开始 如果是1,表示需要由创建者手动开始游戏 |
响应报文内容中的属性:
属性名 | 数据类型 | 备注 |
---|---|---|
roomId | Int | 游戏房间编号 |
开始游戏
请求方式:GET
路径:/api/StartGame
如果