欢迎使用snake-challenge AI API!
本文档是你的AI与web服务器的接口描述, 我们的web服务器同时可以跑多个游戏房间, 不同房间的根目录不同, 比如:
http://pythonvsruby.org/room/0/
你可以选择其中的一个房间加入. 直接用浏览器访问上面的地址, 就可以看到游戏场景了.
web服务器提供4个API: map,info,add,turn, 加在上面的url后面.
返回的数据结构格式为json的格式.
整个游戏的流程是这样的:
- 首先, 通过map获取游戏的场景, 然后你的ai需要调用add, 来加入到该游戏场景中来. 加入成功后, 服务器会返回一个id字符串作为标识.
- 然后, ai就可以利用turn来控制对应的蛇了. 每次turn的同时, 服务器都会告诉你地图场景的信息, 然后你的ai就可以利用这个信息继续进行下轮的操作了.
- add/turn调用后, web服务器只有在游戏场景更新的时候, 才会返回数据, 所以整个过程是阻塞的.
- 简单地说, 就是一个 add/turn/turn/.... 的请求/回复过程.
下面是具体API的内容.
map
获取游戏的地图, 包括地图大小和障碍物的坐标.
地图的定位是这样的: 左上角为左边原点,右下角为坐标终点, 如下图所示:
[0,0] --- [x, 0] | | | | | | [y,0] --- [x, y]
URL: /map (全部: http://pythonvsruby.org/room/0/map, 其他API也一样类推)
HTTP Method: get
Response:
walls 障碍物的坐标 [x, y]数组
size 地图大小 [宽度,高度]
例子:
curl http://pythonvsruby.org/room/0/map
info
获取游戏实时数据.
URL: /info
HTTP Method: get
Response:
round 当前游戏的轮数
status 当前游戏的状态(waitforplayer/running/finished)
eggs python食物的坐标 [x, y]数组
gems ruby食物的坐标 [x, y]数组
snakes 当前游戏中所有蛇的信息,数组,每个元素包括如下属性
- alive 蛇是否还活着
- body 蛇身体的位置,[x, y]数组,第一个代表头部
- alive 蛇是否还活着
- direction 蛇头的方向 0-3分别对应: 左上右下
- type 蛇的类型 python/ruby
- name 蛇的名字
例子:
curl http://pythonvsruby.org/room/0/info
add
添加新的蛇.
URL: /add
HTTP Method: post
Request:
name 蛇的名字 type 蛇的类型 python/ruby
Response:
一个含有2个元素的数组,第2个元素和info API的结果一样,保护有当前最新的游戏信息,第一个元素内容如下:
如果成功加入将会返回
seq 加入蛇的顺序号,第一个加入的蛇是0,可用来索引info API里面snakes数组,获取代表自己蛇的数据
id 蛇的ID, 用来在发送控制命令的时候做验证
如果没有成功将会返回
status 错误信息 "snake type error" / "no place for new snake"
例子:
curl -d "name=test&type=ruby" http://pythonvsruby.org/room/0/add
turn
控制蛇方向.
URL: /turn
HTTP Method: post
Request:
id 蛇ID 在调用add方法里面获得的数值 direction 要转向的方向 0-3分别对应: 左上右下 round: 对应的回合数, 为了避免出现客户端延时导致误指令,如果和当前回合不一致, server会丢弃该命令, 如果-1的话不做检查
Response:
一个含有2个元素的数组,第2个元素和info API的结果一样,保护有当前最新的游戏信息,第一个元素内容如下:
如果成功转向将会返回:
status ok
如果没有成功将会返回:
status "noid" / "round error, current round: %d" / "noturnback"
例子:
curl -d "id=80f12ebcf7d54c2b910b7ae81f1cc570&direction=0&round=61" http://pythonvsruby.org/room/0/turn
This revision is from 2011-03-29 08:03