欢迎使用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

1
{"walls": [[3, 22], [2, 22], [2, 21]], "size": [50, 25]}

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

{
  "gems": [[36, 24], [26, 16], [23, 4], [13, 15]], 
  "status": "running", 
  "eggs": [[46, 24], [27, 7], [4, 6], [40, 13], [33, 24], [23, 14]], 
  "round": 33, 
  "snakes": [{"body": [[5, 15], [4, 15], [4, 16], [3, 16], [3, 17], [3, 18]], 
              "direction": 2, 
              "name": "simple ai2", 
              "type": "ruby",
              "length": 6, 
              "alive": true}, 
             {"body": [[2, 15], [2, 16], [2, 17], [2, 18], [2, 19], [2, 20]], 
              "direction": 1, 
              "name": "simple ai2", 
              "type": "ruby", 
              "length": 6, 
              "alive": true}, 
             {"body": [[12, 15], [11, 15], [11, 16], [10, 16], [9, 16]], 
              "direction": 2, 
              "name": "simple ai2", 
              "type": "ruby", 
              "length": 5, 
              "alive": true}]
}

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

[
{
  "id": "80f12ebcf7d54c2b910b7ae81f1cc570", 
  "seq": 2
}, 
{
  "gems": [[42, 10], [48, 10], [0, 16]], 
  "status": "running", //...
}
]

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

1
2
3
4
5
6
7
[
{"status": "ok"}, 
{
  "gems": [[0, 16], [46, 24], [47, 11], [49, 16], [6, 15], [37, 16], [35, 15], [15, 16]], 
  "status": "running", //...
}
]

This revision is from 2011-03-29 08:03

::...
免责声明:
当前网页内容, 由 大妈 ZoomQuiet 使用工具: ScrapBook :: Firefox Extension 人工从互联网中收集并分享;
内容版权归原作者所有;
本人对内容的有效性/合法性不承担任何强制性责任.
若有不妥, 欢迎评注提醒:

或是邮件反馈可也:
askdama[AT]googlegroups.com


点击注册~> 获得 100$ 体验券: DigitalOcean Referral Badge

订阅 substack 体验古早写作:


关注公众号, 持续获得相关各种嗯哼:
zoomquiet


自怼圈/年度番新

DU22.4
关于 ~ DebugUself with DAMA ;-)
粤ICP备18025058号-1
公安备案号: 44049002000656 ...::