实例=具体的数据=数据 gem宝石 check控制 回合数context.round
1、def update(context):
(1)def update(context):是游戏的主要逻辑部分,每一帧会自动调用该函数,不用咱们调用。
return 返回值必须是字符串:表示企鹅的下一步行动。
(2)企鹅运动的返回值:
上下左右/UDLR 不移动/S
(3)context为游戏引擎调用时传给你的,context包含当前回合的所有数据(包括当前回合数、企鹅位置、目标位置等)。
context.round:当前回合数,回合从0开始。
(4)完整程序:
def update(context):
return "R" #每回合向右移动一步
2、 控制企鹅自动寻路(即自动去往一个地方)
(1)import api
(2)api.check.next(要去的地方/目标)
注意:api.check.next() 在无法到达目标的情况下,会返回 None。
(3)要去的地方/目标:一个坐标、一个宝石、一个宝箱、一个敌人
eg:api.check.next((3, 2)) #去往(3,2)
(4)注意:在被阻挡的情况下,原本可行的通路,会因为被阻挡,而突然无法到达,此时 api.check.next()接口会返回S。
(5)完整程序:
import api
def update(context):
direction = api.check.next((3, 2))
print("在第", context.round, "回合,我现在需要向", direction, "走") # 只是提示语,可以不要
return direction
3、去往终点(即需要获取终点信息)
(1种)api.get.exit(what='行/列') # 获取终点信息
(1)获取终点信息完整程序:
import api
def update(context):
exit_row=api.get.exit(what='row')
exit_col=api.get.exit(what='col')
print(exit_row,exit_col)
(2种)context.exit获取终点的行列
(1)获取终点信息完整程序:
def update(context):
e = context.exit # 获取终点的行列信息
print(e.row, e.col) # 终点的行坐标、列坐标
(2)去往终点完整程序:
import api
def update(context):
e = context.exit # 获取终点坐标
direction = api.check.next(end=(e.row, e.col)) # 传入终点信息,去终点
return direction
4、获取某个宝石的属性(即名称name、编号n、具体属性what(行row、列col、得分score、名字name))
(1种)api.get.item
(1)api.get.item(name,n,what)
what:row、col、score、name
n:从编号0开始
(2)获取第一个粉宝石程序:
import api
def update(context):
pink0_row = api.get.item(name="pink_gem", n=0, what="row") # 获取第一个粉宝石的行
pink0_col = api.get.item(name="pink_gem", n=0, what="col") # 获取第一个粉宝石的列
print( pink0_row, pink0_col)
(3)api.get.items(name="pink_gem") # 获取所有粉宝石的信息 -- 是一个列表数据
print(pink_gems) # 打印出所有的粉宝石信息
p0 = pink_gems[0] # 拿到第一颗粉宝石 -- 可以用下标获取列表中的数据
print(p0.col) # 打印出第一颗粉宝石的信息
(2种)context.items
(1)def update(context):
items = context.items # 拿到所有宝石、宝箱的信息 -- 是一个字典数据
print(items) # 打印出字典形式的所有数据
pink_gems = items['pink_gem'] # 找到所有粉宝石的信息
print(pink_gems)
print(pink_gems[0].col) # 打印出第一颗粉宝石的 col 信息
boxes = items['box'] # 找到所有宝箱的信息
print(boxes)
print(boxes[0].col) # 打印出第一颗宝箱的 col 信息
5、宝箱与宝石方法一样:
但是把pink_gem替换成box,items['box']
row = api.get.item(name="box", n=0, what="row")
6、粗略归纳:
gem_row=api.get.item(name="pink_gem",n=0,what='row')
direction=api.check.next(gem_row,gem_col)
e_row = api.get.exit(what='row')
direction=api.check.next(e_row,e_col)
items=context.items
pink_gems=items["pink_gem"]
pink_gems[0].col
e=context.exit
e_row=api.check.next(end="e.row,e.col")
7、我的企鹅player信息xx
(1)energy:企鹅的剩余体力
direction:企鹅的朝向
finished:企鹅是否已经达到终点
item_count:企鹅收集到的物品数量
order:在一局比赛中,与其他玩家相比的执行顺序
(1种)api.get.my(what="xx") #获取我的企鹅的信息
my_xx= api.get.my(what="xx")
my_row = api.get.my(what="row") -- 注意:行列是从 0 开始的
(2种)context.players #获取我的企鹅的信息
all_players = context.players # 获取所有企鹅信息 -- 字典
me = all_players[0] # 获取我的企鹅信息
other = all_players[1] # 获取对手用户的企鹅
print("my_row=", me.row) # 打印我的企鹅所在的行
print("me.energy=", me.energy) # 打印我的企鹅的体力
8、墙、路、地块信息
(1)context.maze -- 获取的是二维列表,来获取整张地图(每一个一维列表都会显示每一行的墙或路)
maze[row][col]:表示地图上的一个点,显示该点是墙或路,从左上角开始
(2)地图的宽高
(1种)用len来计算宽高
(2种)context.width和context.height
(3)某个点的地块信息(地图上每个点的信息)
api.check.position(1, 1) # 地块的类型(ROAD 或 WALL)
(4)某个点周围的地图信息
api.check.surrounding(1, 1) -- log输出:{'U': 'WALL', 'D': 'ROAD', 'L': 'WALL', 'R': 'ROAD'}