context (环境信息)

context 是游戏的上下文信息。因为迷宫是以帧更新来运作的,每一帧都有每一帧独特的信息。比如当前帧,我的位置是什么等。

程序中,在每帧被重复调用的是你定义的 update() 函数。在 update 每次被游戏主程序中调用时。 都会传入当帧新的 context 信息。

>>> def update(context):
>>>     print(context.me)
Player(
 id=0, row=0, col=0, direction="D", energy=100, score=23, finished=False,
 item_count={"red_gem": 0, "blue_gem": 0, "pink_gem": 0, "yellow_gem": 0, "purple_gem": 0, "box": 0},
 order=0
 )

下面的示例用法展示了一些编程策略。

  • 示例用法(一):使用 get_context() 和 context 获取关卡的环境信息

  • 示例用法(二):学会获取己方(自己)玩家的信息

  • 示例用法(三):学会获取对方玩家的信息

  • 示例用法(四):获取与己方(自己)玩家距离最近的物品(宝石/宝箱)信息

  • 示例用法(五):获取与己方(自己)玩家距离最远的物品(宝石/宝箱)信息

  • 示例用法(六):获取与对方玩家距离最近的物品(宝石/宝箱)信息

  • 示例用法(七):获取与对方玩家距离最远的物品(宝石/宝箱)信息

  • 示例用法(八):计算己方(自己)与指定物品(宝石/宝箱)的距离

  • 示例用法(九):计算对方玩家与指定物品(宝石/宝箱)的距离

示例用法

(一)使用 get_context() 和 context 获取关卡的环境信息

提示

在编程的时候,有两种方法可以获取关卡的环境信息。可以使用 api.get_context() 获取或者通过 update(context) 的 context 来获取。

可以使用 api.get_context().height 或者 update(context) 的 context.height 来获取关卡(地图)的高度(行数)。

>>> # 示例代码一:获取关卡(地图)的高度(行数)
>>>
>>> import api
>>>
>>> def update(context):
>>>
>>>     # 使用 api.get_context().height 获取关卡地图的高度(地图的行数)
>>>     height = api.get_context().height
>>>
>>>     # 使用 context.height 获取关卡地图的高度(地图的行数)
>>>     height = context.height
>>>
>>>     return "S"  # "S" 表示静止不动

可以使用 api.get_context().width 或者 update(context) 的 context.width 来获取关卡(地图)的宽度(列数)。

>>> # 示例代码二:获取关卡(地图)的宽度(列数)
>>>
>>> import api
>>>
>>> def update(context):
>>>
>>>     # 使用 api.get_context().width 获取关卡地图的宽度(地图的列数)
>>>     width = api.get_context().width
>>>
>>>     # 使用 context.width 获取关卡地图的宽度(地图的列数)
>>>     width = context.width
>>>
>>>     return "S"  # "S" 表示静止不动

可以使用 api.get_context().exit 或者 update(context) 的 context.exit 来获取己方(自己)出口(Exit)信息。

>>> # 示例代码三:使用 api.get_context().exit 获取己方(自己)出口(Exit)信息
>>>
>>> import api
>>>
>>> def update(context):
>>>
>>>     # 获取己方(自己)出口(Exit)信息,注意目前并没有获取对方玩家(企鹅)的出口(Exit)信息的接口
>>>     self_exit = api.get_context().exit
>>>
>>>     return "S"  # "S" 表示静止不动
>>> # 示例代码四:使用 context.exit 获取己方(自己)出口(Exit)信息
>>>
>>> import api
>>>
>>> def update(context):
>>>
>>>     # 获取己方(自己)出口(Exit)信息,注意目前并没有获取对方玩家(企鹅)的出口(Exit)信息的接口
>>>     sel_exit = context.exit
>>>
>>>     return "S"  # "S" 表示静止不动

可以使用 api.get_context().maze 或者 update(context) 的 context.maze 来获取关卡的地图信息。

目前 api 库中没有提供可以获取对方玩家(企鹅)的出口(Exit)信息的接口,你只能通过目测获取对方玩家(企鹅)的出口(Exit)信息。

>>> # 示例代码五:使用 api.get_context().maze 获取获取关卡的地图信息
>>>
>>> import api
>>>
>>> def update(context):
>>>
>>>     # 获取关卡的地图信息
>>>     maze_map = api.get_context().maze
>>>
>>>     return "S"  # "S" 表示静止不动
>>> # 示例代码六:使用 context.maze 获取关卡的地图信息
>>>
>>> import api
>>>
>>> def update(context):
>>>
>>>     # 获取关卡的地图信息
>>>     maze_map = context.maze
>>>
>>>     return "S"  # "S" 表示静止不动

可以使用 api.get_context() 或者 update(context) 的 context 来获取己方(自己)玩家(企鹅)的信息,有两种方法,通过 me 或者 players[0]。

>>> # 示例代码七:使用 api.get_context() 获取己方(自己)玩家(企鹅)的信息
>>>
>>> import api
>>>
>>> def update(context):
>>>
>>>     # 获取己方(自己)玩家(企鹅)的信息,有两种方法,通过 me 或者 players[0]
>>>     me = api.get_context().me
>>>     me = api.get_context().players[0]     # players 中第一个对象永远是自己(企鹅)
>>>
>>>     return "S"  # "S" 表示静止不动
>>> # 示例代码八:使用 context 获取己方(自己)玩家(企鹅)的信息
>>>
>>> import api
>>>
>>> def update(context):
>>>
>>>     # 获取己方(自己)玩家(企鹅)的信息,有两种方法,通过 me 或者 players[0]
>>>     me = context.me
>>>     me = context.players[0]     # players 中第一个对象永远是自己(企鹅)
>>>
>>>     return "S"  # "S" 表示静止不动

可以使用 api.get_context().players[1] 或者 update(context) 的 context.players[1] 来获取对方玩家(企鹅)的信息。

>>> # 示例代码九:使用 api.get_context() 获取对方玩家(企鹅)的信息
>>>
>>> import api
>>>
>>> def update(context):
>>>
>>>     # 获取对方玩家(企鹅)的信息
>>>     enemy = api.get_context().players[1]  # players 中第二个对象永远是对方玩家(企鹅)
>>>
>>>     return "S"  # "S" 表示静止不动
>>> # 示例代码十:使用 context 获取对方玩家(企鹅)的信息
>>>
>>> import api
>>>
>>> def update(context):
>>>
>>>     # 获取对方玩家(企鹅)的信息
>>>     enemy = context.players[1]  # players 中第二个对象永远是对方玩家(企鹅)
>>>
>>>     return "S"  # "S" 表示静止不动

可以使用 api.get_context().items 或者 update(context) 的 context.items 来获取关卡中当前回合所有物品(宝石/宝箱)的信息。

>>> # 示例代码十一:使用 api.get_context() 获取关卡中当前回合的物品信息
>>>
>>> import api
>>>
>>> def update(context):
>>>
>>>     # 获取关卡中当前回合的物品信息
>>>     items = api.get_context().items
>>>     box = items["box"]                # 获取宝箱信息
>>>     pink_gem = items["pink_gem"]      # 获取粉色宝石信息
>>>     red_gem = items["red_gem"]        # 获取红色宝石信息
>>>     yellow_gem = items["yellow_gem"]  # 获取黄色宝石信息
>>>     purple_gem = items["purple_gem"]  # 获取紫色宝石信息
>>>     blue_gem = items["blue_gem"]      # 获取蓝色宝石信息
>>>
>>>     return "S"  # "S" 表示静止不动
>>> # 示例代码十二:使用 context 获取关卡中当前回合的物品信息
>>>
>>> import api
>>>
>>> def update(context):
>>>
>>>     # 获取关卡中当前回合的物品信息
>>>     items = context.items
>>>     box = items["box"]                # 获取宝箱信息
>>>     pink_gem = items["pink_gem"]      # 获取粉色宝石信息
>>>     red_gem = items["red_gem"]        # 获取红色宝石信息
>>>     yellow_gem = items["yellow_gem"]  # 获取黄色宝石信息
>>>     purple_gem = items["purple_gem"]  # 获取紫色宝石信息
>>>     blue_gem = items["blue_gem"]      # 获取蓝色宝石信息
>>>
>>>     return "S"  # "S" 表示静止不动

可以使用 api.get_context().round 或者 update(context) 的 context.round 来获取当前所处回合。

>>> # 示例代码十三:使用 api.get_context() 获取当前所处回合
>>>
>>> import api
>>>
>>> def update(context):
>>>
>>>     # 获取当前所处回合
>>>     game_round = api.get_context().round
>>>
>>>     return "S"  # "S" 表示静止不动
>>> # 示例代码十四:使用 context 获取当前所处回合
>>>
>>> import api
>>>
>>> def update(context):
>>>
>>>     # 获取当前所处回合
>>>     game_round = context.round
>>>
>>>     return "S"  # "S" 表示静止不动

有关 get_context()Context 的更详细用法可以在文档中查看。

(二)学会获取己方(自己)玩家的信息

提示

在和对方 PK 过程中,我们可能需要根据己方(自己)已收集的物品来调整我们的决策;

可以使用 context.me 或者 api.get_context().me 获取己方(自己)的信息

>>> # 示例代码一:获取己方(自己)玩家(企鹅)的信息
>>>
>>> import api
>>>
>>> def update(context):
>>>     # 获取己方(自己)玩家(企鹅)的信息,两种方法
>>>     me = context.me
>>>     me = api.get_context().me
>>>
>>>     return "S"  # "S" 表示静止不动

可以使用 context.me.id 或者 api.get_context().me.id 获取己方(自己)的 id 信息

>>> # 示例代码二:获取己方(自己)玩家(企鹅)的id
>>>
>>> import api
>>>
>>> def update(context):
>>>     # 获取己方(自己)玩家(企鹅)的信息,两种方法
>>>     me = context.me
>>>     me = api.get_context().me
>>>
>>>     # 获取己方(自己)玩家(企鹅)的 id
>>>     id = me.id
>>>
>>>     return "S"  # "S" 表示静止不动

可以使用 context.me.row 或者 api.get_context().me.row 获取自己的行坐标信息

>>> # 示例代码三:获取己方(自己)玩家(企鹅)的行坐标和列坐标
>>>
>>> import api
>>>
>>> def update(context):
>>>     # 获取己方(自己)玩家(企鹅)的信息,两种方法
>>>     me = context.me
>>>     me = api.get_context().me
>>>
>>>     # 获取己方(自己)玩家(企鹅)的行坐标
>>>     row = me.row
>>>
>>>     return "S"  # "S" 表示静止不动

可以使用 context.me.col 或者 api.get_context().me.col 获取自己的列坐标信息

>>> # 示例代码四:获取己方(自己)玩家(企鹅)的行坐标和列坐标
>>>
>>> import api
>>>
>>> def update(context):
>>>     # 获取己方(自己)玩家(企鹅)的信息,两种方法
>>>     me = context.me
>>>     me = api.get_context().me
>>>
>>>     # 获取己方(自己)玩家(企鹅)的列坐标
>>>     col = me.col
>>>
>>>     return "S"  # "S" 表示静止不动

可以使用 context.me.enemy 或者 api.get_context().me.enemy 获取自己的剩余体力

>>> # 示例代码五:获取己方(自己)玩家(企鹅)的剩余体力
>>>
>>> import api
>>>
>>> def update(context):
>>>     # 获取己方(自己)玩家(企鹅)的信息,两种方法
>>>     me = context.me
>>>     me = api.get_context().me
>>>
>>>     # 获取己方(自己)玩家(企鹅)的剩余体力
>>>     energy = me.energy
>>>
>>>     return "S"  # "S" 表示静止不动

可以使用 context.me.score 或者 api.get_context().me.score 获取自己的得分信息

>>> # 示例代码六:获取己方(自己)玩家(企鹅)截止到当前回合的得分
>>>
>>> import api
>>>
>>> def update(context):
>>>     # 获取己方(自己)玩家(企鹅)的信息,两种方法
>>>     me = context.me
>>>     me = api.get_context().me
>>>
>>>     # 获取己方(自己)玩家(企鹅)截止到当前回合的得分
>>>     score = me.score
>>>
>>>     return "S"  # "S" 表示静止不动

使用 context.me.item_count 或者 api.get_context().me.item_count 获取自己收集的物品(宝石和宝箱)信息

>>> # 示例代码七:获取己方(自己)玩家(企鹅)截止到当前回合收集的物品(宝石和宝箱)信息
>>>
>>> import api
>>>
>>> def update(context):
>>>     # 获取己方(自己)玩家(企鹅)的信息,两种方法
>>>     me = context.me
>>>     me = api.get_context().me
>>>
>>>     # 获取己方(自己)玩家企鹅截止到当前回合收集到的物品(宝石/宝箱)信息
>>>     item_count = me.item_count
>>>
>>>     return "S"  # "S" 表示静止不动

有关 Player 的更详细的用法可以在文档中查看。

(三)学会获取对方玩家的信息

提示

在和对方 PK 过程中,我们可能需要根据对方已收集的物品信息/得分信息/位置(坐标)信息来调整我们的决策;

可以使用 context.players[1] 或者 api.get_context().players[1] 获取对方玩家的信息

>>> # 示例代码一:获取对方玩家(企鹅)的信息
>>>
>>> import api
>>>
>>> def update(context):
>>>     # 获取对方玩家(企鹅)的信息,两种方法
>>>     enemy = context.players[1]
>>>     enemy = api.get_context().players[1]
>>>
>>>     return "S"  # "S" 表示静止不动

可以使用 context.players[1].id 或者 api.get_context().players[1].id 获取对方玩家的 id 信息

>>> # 示例代码二:获取己方(自己)玩家(企鹅)的id
>>>
>>> import api
>>>
>>> def update(context):
>>>     # 获取对方玩家(企鹅)的信息,两种方法
>>>     enemy = context.players[1]
>>>     enemy = api.get_context().players[1]
>>>
>>>     # 获取对方玩家(企鹅)的 id
>>>     id = enemy.id
>>>
>>>     return "S"  # "S" 表示静止不动

可以使用 context.players[1].row 或者 api.get_context().players[1].row 获取对方的行坐标信息

>>> # 示例代码三:获取对方玩家(企鹅)的行坐标
>>>
>>> import api
>>>
>>> def update(context):
>>>     # 获取对方玩家(企鹅)的信息,两种方法
>>>     enemy = context.players[1]
>>>     enemy = api.get_context().players[1]
>>>
>>>     # 获取对方玩家(企鹅)的行坐标
>>>     row = enemy.row
>>>
>>>     return "S"  # "S" 表示静止不动

可以使用 context.players[1].col 或者 api.get_context().players[1].col 获取对方的列坐标信息

>>> # 示例代码四:获取对方玩家(企鹅)的列坐标
>>>
>>> import api
>>>
>>> def update(context):
>>>     # 获取对方玩家(企鹅)的信息,两种方法
>>>     enemy = context.players[1]
>>>     enemy = api.get_context().players[1]
>>>
>>>     # 获取对方玩家(企鹅)的列坐标
>>>     col = enemy.col
>>>
>>>     return "S"  # "S" 表示静止不动

可以使用 context.players[1].energy 或者 api.get_context().players[1].energy 获取对方玩家的剩余体力

>>> # 示例代码五:获取对方玩家(企鹅)的剩余体力
>>>
>>> import api
>>>
>>> def update(context):
>>>     # 获取对方玩家(企鹅)的信息,两种方法
>>>     enemy = context.players[1]
>>>     enemy = api.get_context().players[1]
>>>
>>>     # 获取对方玩家(企鹅)的剩余体力
>>>     energy = enemy.energy
>>>
>>>     return "S"  # "S" 表示静止不动

可以使用 context.players[1].score 或者 api.get_context().players[1].score 获取对方玩家的得分信息

>>> # 示例代码六:获取对方玩家(企鹅)截止到当前回合的得分
>>>
>>> import api
>>>
>>> def update(context):
>>>     # 获取对方玩家(企鹅)的信息,两种方法
>>>     enemy = context.players[1]
>>>     enemy = api.get_context().players[1]
>>>
>>>     # 获取对方玩家(企鹅)截止到当前回合的得分
>>>     score = enemy.score
>>>
>>>     return "S"  # "S" 表示静止不动

可以使用 context.players[1].item_count 或者 api.get_context().players[1].item_count 获取对方玩家收集的物品(宝石和宝箱)信息

>>> # 示例代码七:获取对方玩家(企鹅)截止到当前回合收集的物品(宝石和宝箱)信息
>>>
>>> import api
>>>
>>> def update(context):
>>>     # 获取对方玩家(企鹅)的信息,两种方法
>>>     enemy = context.players[1]
>>>     enemy = api.get_context().players[1]
>>>
>>>     # 获取对方玩家企鹅截止到当前回合收集到的物品(宝石/宝箱)信息
>>>     item_count = enemy.item_count
>>>
>>>     return "S"  # "S" 表示静止不动

有关 Player 的更详细的用法可以在文档中查看。

(四)获取与己方(自己)玩家距离最近的物品(宝石/宝箱)信息

可以使用 closest_item() 来获取距离己方(自己)玩家(企鹅)最近的宝石信息。

>>> # 示例代码一:获取与己方(自己)玩家(企鹅)距离最近的宝石信息
>>>
>>> import api
>>>
>>> def update(context):
>>>
>>>     # 获取当前回合中所有宝石的信息
>>>     items = context.items
>>>     gem_list = items["yellow_gem"] + items["pink_gem"] + items["blue_gem"] + items["red_gem"] + items["purple_gem"]
>>>
>>>     # 使用 api.check.closest_item 获取距离自己最近的宝石信息
>>>     target_gem = api.check.closest_item(gem_list)
>>>
>>>     return "S"  # "S" 表示静止不动

可以使用 closest_item() 来获取距离己方(自己)玩家(企鹅)最近的宝箱信息。

>>> # 示例代码二:获取与己方(自己)玩家(企鹅)距离最近的宝箱信息
>>>
>>> import api
>>>
>>> def update(context):
>>>
>>>     # 获取当前回合中所有宝箱的信息
>>>     items = context.items
>>>     box_list = items["box"]
>>>
>>>     # 使用 api.check.closest_item 获取距离自己最近的宝箱信息
>>>     target_box = api.check.closest_item(box_list)
>>>
>>>     return "S"  # "S" 表示静止不动

有关 Item 的更详细的用法可以在文档中查看。

(五)获取与己方(自己)玩家距离最远的物品(宝石/宝箱)信息

可以使用 for 循环 和 path() 的方法来获取与己方(自己)距离最远的宝石信息。

>>> # 示例代码一:获取与己方(自己)玩家(企鹅)距离最远的宝石信息
>>>
>>> import api
>>>
>>> def update(context):
>>>     # 获取己方(自己)玩家(企鹅)信息
>>>     me = context.me
>>>
>>>     # 获取关卡中当前回合所有物品的信息
>>>     items = context.items
>>>     pink_gem_list = items["pink_gem"]      # 获取粉色宝石信息
>>>     red_gem_list = items["red_gem"]        # 获取红色宝石信息
>>>     yellow_gem_list = items["yellow_gem"]  # 获取黄色宝石信息
>>>     purple_gem_list = items["purple_gem"]  # 获取紫色宝石信息
>>>     blue_gem_list = items["blue_gem"]      # 获取蓝色宝石信息
>>>
>>>     # 遍历所有的宝石,获取与己方(自己)玩家(企鹅)距离最远的宝石
>>>     farthest_gem = None
>>>     max_dist = -float("inf")
>>>     for gem in pink_gem_list + red_gem_list + yellow_gem_list + purple_gem_list + blue_gem_list:
>>>         dist = len(api.check.path(start=(me.row, me.col), end=(gem.row, gem.col)))
>>>         if dist > max_dist:
>>>             farthest_gem = gem
>>>             max_dist = dist
>>>
>>>     return "S"  # "S" 表示静止不动

可以使用 for 循环 和 path() 的方法来获取与己方(自己)距离最远的宝箱信息。

>>> # 示例代码二:获取与己方(自己)玩家(企鹅)距离最远的宝箱信息
>>>
>>> import api
>>>
>>> def update(context):
>>>     # 获取己方(自己)玩家(企鹅)信息
>>>     me = context.me
>>>
>>>     # 获取关卡中当前回合所有物品的信息
>>>     items = context.items
>>>     box_list = items["box"]                # 获取宝箱信息
>>>
>>>     # 遍历所有的宝箱(box),获取与己方(自己)玩家(企鹅)距离最远的宝箱(box)
>>>     farthest_box = None
>>>     max_dist = -float("inf")
>>>     for box in box_list:
>>>         dist = len(api.check.path(start=(me.row, me.col), end=(box.row, box.col)))
>>>         if dist > max_dist:
>>>             farthest_box = box
>>>             max_dist = dist
>>>
>>>     return "S"  # "S" 表示静止不动

有关 Item 的更详细的用法可以在文档中查看。

(六)获取与对方玩家距离最近的物品(宝石/宝箱)信息

可以使用 for 循环 和 path() 的方法来获取与对方玩家(企鹅)距离最近的宝石信息。

>>> # 示例代码一:获取与对方玩家(企鹅)距离最近的宝石信息
>>>
>>> import api
>>>
>>> def update(context):
>>>     # 获取对方玩家信息
>>>     enemy = context.players[1]
>>>
>>>     # 获取关卡中当前回合所有物品的信息
>>>     items = context.items
>>>     pink_gem_list = items["pink_gem"]      # 获取粉色宝石信息
>>>     red_gem_list = items["red_gem"]        # 获取红色宝石信息
>>>     yellow_gem_list = items["yellow_gem"]  # 获取黄色宝石信息
>>>     purple_gem_list = items["purple_gem"]  # 获取紫色宝石信息
>>>     blue_gem_list = items["blue_gem"]      # 获取蓝色宝石信息
>>>
>>>     # 遍历所有的宝石,获取与对方玩家(企鹅)距离最近的宝石
>>>     closest_gem = None
>>>     min_dist = float("inf")
>>>     for gem in pink_gem_list + red_gem_list + yellow_gem_list + purple_gem_list + blue_gem_list:
>>>         dist = len(api.check.path(start=(enemy.row, enemy.col), end=(gem.row, gem.col)))
>>>         if dist < min_dist:
>>>             closest_gem = gem
>>>             min_dist = dist
>>>
>>>     return "S"  # "S" 表示静止不动

可以使用 for 循环 和 path() 的方法来获取与对方玩家(企鹅)距离最近的宝箱信息。

>>> # 示例代码三:获取与对方玩家(企鹅)距离最近的宝箱(box)信息
>>>
>>> import api
>>>
>>> def update(context):
>>>     # 获取对方玩家信息
>>>     enemy = context.players[1]
>>>
>>>     # 获取关卡中当前回合所有物品的信息
>>>     items = context.items
>>>     box_list = items["box"]  # 获取宝箱信息
>>>
>>>     # 遍历所有宝箱(box),获取与对方玩家(企鹅)距离最近的宝箱(box)
>>>     closest_box = None
>>>     min_dist = float("inf")
>>>     for box in box_list:
>>>         dist = len(api.check.path(start=(enemy.row, enemy.col), end=(box.row, box.col)))
>>>         if dist < min_dist:
>>>             closest_box = box
>>>             min_dist = dist
>>>
>>>     return "S"  # "S" 表示静止不动

有关 Item 的更详细的用法可以在文档中查看。

(七)获取与对方玩家距离最远的物品(宝石/宝箱)信息

可以使用 for 循环 和 path() 的方法来获取与对方玩家(企鹅)距离最远的宝石信息。

>>> # 示例代码二:获取与对方玩家(企鹅)距离最远的宝石信息
>>>
>>> import api
>>>
>>> def update(context):
>>>     # 获取对方玩家信息
>>>     enemy = context.players[1]
>>>
>>>     # 获取关卡中当前回合所有物品的信息
>>>     items = context.items
>>>     pink_gem_list = items["pink_gem"]      # 获取粉色宝石信息
>>>     red_gem_list = items["red_gem"]        # 获取红色宝石信息
>>>     yellow_gem_list = items["yellow_gem"]  # 获取黄色宝石信息
>>>     purple_gem_list = items["purple_gem"]  # 获取紫色宝石信息
>>>     blue_gem_list = items["blue_gem"]      # 获取蓝色宝石信息
>>>
>>>     # 遍历所有的宝石,获取与对方玩家(企鹅)距离最远的宝石
>>>     farthest_gem = None
>>>     max_dist = -float("inf")
>>>     for gem in pink_gem_list + red_gem_list + yellow_gem_list + purple_gem_list + blue_gem_list:
>>>         dist = len(api.check.path(start=(enemy.row, enemy.col), end=(gem.row, gem.col)))
>>>         if dist > max_dist:
>>>             farthest_gem = gem
>>>             max_dist = dist
>>>
>>>     return "S"  # "S" 表示静止不动

可以使用 for 循环 和 path() 的方法来获取与对方玩家(企鹅)距离最远的宝箱信息。

>>> # 示例代码四:获取与对方玩家(企鹅)距离最远的宝箱(box)信息
>>>
>>> import api
>>>
>>> def update(context):
>>>     # 获取对方玩家信息
>>>     enemy = context.players[1]
>>>
>>>     # 获取关卡中当前回合所有物品的信息
>>>     items = context.items
>>>     box_list = items["box"]  # 获取宝箱信息
>>>
>>>     # 遍历所有宝箱(box),获取与对方玩家(企鹅)距离最远的宝箱(box)
>>>     farthest_box = None
>>>     max_dist = -float("inf")
>>>     for box in box_list:
>>>         dist = len(api.check.path(start=(enemy.row, enemy.col), end=(box.row, box.col)))
>>>         if dist > max_dist:
>>>             farthest_box = box
>>>             max_dist = dist
>>>
>>>     return "S"  # "S" 表示静止不动

有关 Item 的更详细的用法可以在文档中查看。

(八)计算己方(自己)与指定物品(宝石/宝箱)的距离

计算己方(自己)玩家与指定宝石的距离

>>> # 示例代码一:计算己方(自己)玩家与指定宝石的距离
>>>
>>> import api
>>> import math
>>>
>>> def update(context):
>>>     # 己方玩家(自己)
>>>     me = context.me
>>>
>>>     items = context.items
>>>     # 假设指定宝石为第一个粉色宝石
>>>     target_gem = items["pink_gem"][0]
>>>
>>>     # 计算己方玩家(自己)到指定宝石的距离
>>>     me_dist = len(api.check.path(start=(me.row, me.col), end=(target_gem.row, target_gem.col)))
>>>
>>>     return "S"  # "S" 表示静止不动

计算己方(自己)玩家与指定宝箱的距离

>>> # 示例代码二:计算己方(自己)玩家到指定宝箱的距离
>>>
>>> import api
>>> import math
>>>
>>> def update(context):
>>>     # 己方玩家(自己)
>>>     me = context.me
>>>
>>>     items = context.items
>>>     # 假定目标宝箱是第一个宝箱
>>>     target_box = items["box"][0]
>>>
>>>     # 计算己方玩家(自己)到指定宝箱的距离
>>>     me_dist = len(api.check.path(start=(me.row, me.col), end=(target_box.row, target_box.col)))
>>>
>>>     return "S"  # "S" 表示静止不动

(九)计算对方玩家与指定物品(宝石/宝箱)的距离

计算对方玩家与指定宝石的距离

>>> # 示例代码一:计算对方玩家到指定宝石的距离
>>>
>>> import api
>>> import math
>>>
>>> def update(context):
>>>     # 对方玩家
>>>     enemy = context.players[1]
>>>
>>>     items = context.items
>>>     # 假设指定宝石为第一个粉色宝石
>>>     target_gem = items["pink_gem"][0]
>>>
>>>     # 计算对方玩家到指定宝石的距离
>>>     enemy_dist = len(api.check.path(start=(enemy.row, enemy.col), end=(target_gem.row, target_gem.col)))
>>>
>>>     return "S"  # "S" 表示静止不动

计算对方玩家与指定宝箱的距离

>>> # 示例代码二:计算对方玩家与指定宝箱的距离
>>>
>>> import api
>>> import math
>>>
>>> def update(context):
>>>     # 对方玩家
>>>     enemy = context.players[1]
>>>
>>>     items = context.items
>>>     # 假定目标宝箱是第一个宝箱
>>>     target_box = items["box"][0]
>>>
>>>     # 计算对方玩家到指定宝箱的距离
>>>     enemy_dist = len(api.check.path(start=(enemy.row, enemy.col), end=(target_box.row, target_box.col)))
>>>
>>>     return "S"  # "S" 表示静止不动

Functions

get_context()

获取环境上下文信息。上下文信息的用法,请见 Context

set_item_name([item101, item102, item103, ...])

自定义 items 类名。默认情况下,items 类名为 "pink_gem", "red_gem", "yellow_gem", "purple_gem", "blue_gem", "box"。

Classes

Context()

环境上下文信息

Player(id, row, col, direction, energy, ...)

Player 类,包含用户 id,行列坐标,当前朝向,体力。context.me 或者 context.players 中存储的信息都是 Player 类的实例, 我们可以通过此类接口查看 player 的各项信息。

Item(row, col)

Item 类,可访问具体物品的行列坐标。使用 context.items 可获得场上所有物品的实例,并查看其实例信息。

Exit(row, col)

Exit 类,可访问出口的行列坐标。使用 context.exit 是 Exit 的一个实例,可以查看我方出口的横纵坐标。

Variables

context

上下文信息实例,请见 Context