软通的坦克操作api
这套东西的使用是,将自己的操作函数在new_start.py
中引用,然后在start_5_28()
函数下调用自己的操作函数(记得带上game, control, strategy
参数)
之前会帮助实例化Game为game,这个game的maps属性就是一个由Map类数据组成的二维数组,用坐标来寻找
会帮助实例化Control类为control。
可以把这两个当作参数传入函数
每回合开始时由于某些问题,需要自己进行tank信息的更新/设置(见Game的set_tank_msg()
部分)
使用字符型地图也需要自行进行初始化和更新(见Game的set_string_map() & make_string_map()
部分)
findway.py
中有findway.find_fangxiang(game_obj,tank_obj)
来指引下一回合的移动(待补充)
该类分为两个大部分,即Move
和Shot
函数原型
def move(self, player_id, direction):
return True # 成功
return False #失败
player_id
: 需要移动的坦克的id,需要是int类型。direction
: 移动的方向,是字符串类型,有"up", "down", "right", "left"四个方向。
返回失败可能是你撞墙了。 每次只行动一格。
调用示例
Control.move(1,"left") #id为1的坦克向左移动一格。
函数原型
def fire(self, player_id, direction, type = 0):
pass
player_id
: 需要移动的坦克的id,需要是int类型。direction
: 移动的方向,是字符串类型,有"up", "down", "right", "left"四个方向。type
: 默认是0,代表是普通子弹,一般不需要传。可以专门设置为1,代表超级子弹。
Control.fire(1,'up') #向上发射一发普通子弹
Control.fire(1,'up',type = 1) # 向上发射一发超级子弹
首先确定一件事,那就是地图的信息会存在一个Map实例的二维数组里,位置就是坐标
记录了本格的坐标
记录了回合数
记录了是否是death_trap(就是在这里下回合一定会死)
Map.get_terrain()
返回值是int数值,有几种类型
0
-> 正常可以前进的路1
—> 砖墙2
-> 铁墙3
-> 河流格子
Map.get_coins()
返回的是一个int类型,代表这个格子的coins数量。
Map.get_stars()
返回一个bool值,True代表有星星,False代表没有星星。
Map.get_coordinate()
返回一个格子的坐标,返回一个元组,(x轴坐标,y轴坐标)
Map.get_tank_id()
返回一个元组,代表这个格子的tank是友方还是敌方还是没有。
(True/False, Ture/False, tank_id, super_bullet)
(是否存在敌方坦克,是否是友军坦克,id,是否持有超级子弹)
Map.get_tank_id()
返回一个三元组
(True/False, direction:"up", Type:0/1)
返回一个三元组 (True/False, direction:"up", Type:0/1)
这个类会返回一些比较实用的东西 这个类里包含了一个Map类型的二维数组,表现为maps
一个Map型二维数组,包含了地图信息
记录了我方的队伍ID
记录了地图的宽度(x坐标)
记录了地图的长度(y坐标)
记录了字符串形式的地图,需要通过set_string_map()
设置,每回合通过make_string_map()
更新
一个list,每局比赛更新,内容是我方坦克的id
一个list,每局比赛更新,内容是对方坦克的id
每回合收到的信息,,如果想要自己解析可以参考通信协议去找这个值
返回一个字典组成的list 每个元素的格式是
{"x":3,"y":2, "point":1}
返回一个字典组成的list 每个元素的格式是
{"x":3,"y":2}
返回敌方所有坦克的坐标的list
每一个元素的格式是一个字典,其中"super_bullet":0
代表其没有持有超级子弹,为1代表有
示例
{
"id":0,"team":1001,"x":0,"y":1, "super_bullet":0
}
返回敌方所有子弹的坐标的list 每一个元素的格式是一个字典 示例
{"type":0,"team":1001,"x":0,"y":0, "direction":"down"},
找到所有敌方已经发射的超级子弹,返回值是一个list,每一个元素都是一个字典,例如其中一个元素为
{"type":1,"team":1001,"x":0,"y":0, "direction":"down"}
找到这个坐标附近可以走的点 返回一个复合元组,((x, y), direction) 示例
for coordinate, direction in Game.find_all_road_nearby((1,2)).iteritems():
pass
其中coordinate还是二元组的形式,这个会排除掉已经标为危险区域的点
初始化一个字符格式的地图
制作/更新一个字符格式的地图
设置坦克信息(正常版) 特别注意,一定要在每回合开始调用
设置坦克信息(对象格式) 特别注意,一定要在每回合开始调用
得到我方所有坦克的信息,list形式,每个元素都是一个字典
{"id":0,"team":1001,"x":0,"y":1, "super_bullet":0}
这个类是一个纯粹的方法类,每回合开始在Game类之后实例化
返回某个坐标上下左右所有有威胁的子弹,返回格式是嵌套的字典
{
"up" : [{"type":1,"team":1001,"x":0,"y":0, "direction":"down","distance":3}, {"type":1,"team":1001,"x":0,"y":0, "direction":"down","distance":4}]
"down" : []
# and so on
}
返回某个坦克某方向有威胁的子弹 返回值是字典为元素的List
[{"type":1,"team":1001,"x":0,"y":0, "direction":"down","distance":3}, {"type":1,"team":1001,"x":0,"y":0, "direction":"down","distance":4}]