check (检查)

api.check 中,提供了多种查找信息的功能。

  • 示例用法(一):使用 position() 获取地图中指定位置(坐标)的地图网格元素类型

  • 示例用法(二):使用 surrounding() 获取地图中指定位置(坐标)周围(上下左右)的地图网格元素类型

  • 示例用法(三):使用 path() 获取企鹅向指定地点(位置/坐标)移动的路线信息

  • 示例用法(四):使用 next() 获取己方企鹅向指定地点(位置/坐标)移动的推荐移动方向

  • 示例用法(五):使用 closest_item() 获取(找到)关卡中距离己方企鹅最近的物品(宝石/宝箱等)信息

示例用法

(一)使用 position() 获取地图中指定位置(坐标)的地图网格元素类型

  • 在地图中,有两种类型的地图网格类型,即 “WALL”和 “ROAD”。

  • “WALL”(墙壁) 类型的网格是不可通行的,”ROAD”(通路) 类型的网格是可行走的。

提示

为了避免企鹅行走到地图网格为 “WALL” 类型的网格导致体力的浪费,可以使用该函数来判断将要前进的网格类型是否为可行走类型。

>>> # 示例代码:使用 position() 判断企鹅将要到达的位置(地图网格)是否为可通行类型("ROAD")
>>>
>>> import api
>>>
>>> def update(context):
>>>     map = context.maze  # 获取关卡的地图信息
>>>     me = context.me  # 获取个人信息
>>>
>>>     # 判断企鹅上侧位置(坐标)的网格类型是否为 "ROAD" 类型
>>>     if me.row - 1 >= 0:  # 避免将要检查的位置(坐标)超出 map 的范围
>>>         if api.check.position(row=me.row-1, col=me.col) == "ROAD":
>>>             return "U"  # 企鹅当前位置(坐标)的上侧为 "ROAD" 的可通行类型网格,控制企鹅向上移动
>>>
>>>     # 判断企鹅下侧位置(坐标)的网格类型是否为 "ROAD" 类型
>>>     if me.row + 1 < context.height:  # 避免将要检查的位置(坐标)超出 map 的范围
>>>         if api.check.position(row=me.row+1, col=me.col) == "ROAD":
>>>             return "D"  # 企鹅当前位置(坐标)的下侧为 "ROAD" 的可通行类型网格,控制企鹅向下移动
>>>
>>>     # 判断企鹅左侧位置(坐标)的网格类型是否为 "ROAD" 类型
>>>     if me.col - 1 >= 0:  # 避免将要检查的位置(坐标)超出 map 的范围
>>>         if api.check.position(row=me.row, col=me.col-1) == "ROAD":
>>>             return "L"  # 企鹅当前位置(坐标)的左侧为 "ROAD" 的可通行类型网格,控制企鹅向左移动
>>>
>>>     # 判断企鹅右侧位置(坐标)的网格类型是否为 "ROAD" 类型
>>>     if me.col + 1 < context.width:  # 避免将要检查的位置(坐标)超出 map 的范围
>>>         if api.check.position(row=me.row, col=me.col+1) == "ROAD":
>>>             return "R"  # 企鹅当前位置(坐标)的右侧为 "ROAD" 的可通行类型网格,控制企鹅向右移动
>>>
>>>     return "S"  # "S" 表示静止不动

你可以在文档中了解 position() 更详细的使用细节。

(二)使用 surrounding() 获取地图中指定位置(坐标)周围(上下左右)的地图网格元素类型

  • 在地图中,有两种类型的地图网格类型,即 “WALL”和 “ROAD”。

  • “WALL”(墙壁) 类型的网格是不可通行的,”ROAD”(通路) 类型的网格是可行走的。

提示

为了避免企鹅行走到地图网格为 “WALL” 类型的网格导致体力的浪费,可以使用该函数来获取企鹅当前位置(坐标)周围的网格类型并做出移动决策。

>>> # 示例代码:使用 surrounding() 判断企鹅周围的网格类型是否为 "ROAD" 类型
>>>
>>> import api
>>>
>>> def update(context):
>>>     me = context.me  # 获取个人信息
>>>     surround_info = api.check.surrounding(row=me.row, col=me.col)  # 获取个人位置(坐标)周围的网格类型
>>>
>>>     # 控制企鹅向网格类型为 "ROAD" 的位置(坐标)移动
>>>     for d in surround_info:
>>>         if surround_info[d] == "ROAD":
>>>             return d
>>>
>>>     return "S"  # "S" 表示静止不动

你可以在文档中了解 surrounding() 更详细的使用细节。

(三)使用 path() 获取企鹅向指定地点(位置/坐标)移动的路线信息

  • 通过 path() 可以快速获取从当前位置(坐标)到另一个位置(坐标)的路线,有助于我们控制企鹅从一个地点(位置/坐标)移动到另一个地点(位置/坐标)。

  • 可以以企鹅的位置(坐标)为起点,指定一个位置(坐标)为终点(如宝石、宝箱、”ROAD” 类型的网格、出口等),得到起点和终点的路线。

如果我们想收集指定类型的宝石(如 pink_gem),可以使用 path() 获取从企鹅当前位置(坐标)到指定类型宝石的路线,并控制企鹅向指定类型的宝石移动。

>>> # 示例代码一:使用 path() 获取企鹅到指定类型的宝石的路线信息,控制企鹅向指定物品移动
>>>
>>> import api
>>>
>>> def update(context):
>>>     me = context.me  # 获取个人信息
>>>     items = context.items  # 获取物品(可能是宝石、宝箱等)列表
>>>
>>>     # 假定关卡中粉色宝石的数量不为零,获取粉色宝石列表中第一个宝石的信息
>>>     pink_gem = items["pink_gem"][0]
>>>     path = api.check.path(start=(me.row, me.col), end=(pink_gem.row, pink_gem.col))
>>>
>>>     # 控制企鹅向该粉色宝石移动
>>>     if path[1][0] == me.row - 1 and path[1][1] == me.col:  # 判断企鹅下一步需要移动到的位置(坐标)是否在当前位置的上侧
>>>         return "U"
>>>     if path[1][0] == me.row + 1 and path[1][1] == me.col:  # 判断企鹅下一步需要移动到的位置(坐标)是否在当前位置的下侧
>>>         return "D"
>>>     if path[1][0] == me.row and path[1][1] == me.col - 1:  # 判断企鹅下一步需要移动到的位置(坐标)是否在当前位置的左侧
>>>         return "L"
>>>     if path[1][0] == me.row and path[1][1] == me.col + 1:  # 判断企鹅下一步需要移动到的位置(坐标)是否在当前位置的右侧
>>>         return "R"
>>>
>>>     return "S"  # "S" 表示静止不动

如果我们想收集宝箱(box),可以使用 path() 获取从企鹅当前位置(坐标)到宝箱的路线,并控制企鹅向宝箱移动。

>>> # 示例代码二:使用 path() 获取企鹅到宝箱的路线信息,控制企鹅向宝箱移动
>>>
>>> import api
>>>
>>> def update(context):
>>>     me = context.me  # 获取个人信息
>>>     items = context.items  # 获取物品(可能是宝石、宝箱等)列表
>>>
>>>     # 假定关卡中存在宝箱
>>>     box = items["box"][0]
>>>     path = api.check.path(start=(me.row, me.col), end=(box.row, box.col))
>>>
>>>     # 控制企鹅向宝箱(box)移动
>>>     if path[1][0] == me.row - 1 and path[1][1] == me.col:  # 判断企鹅下一步需要移动到的位置(坐标)是否在当前位置的上侧
>>>         return "U"
>>>     if path[1][0] == me.row + 1 and path[1][1] == me.col:  # 判断企鹅下一步需要移动到的位置(坐标)是否在当前位置的下侧
>>>         return "D"
>>>     if path[1][0] == me.row and path[1][1] == me.col - 1:  # 判断企鹅下一步需要移动到的位置(坐标)是否在当前位置的左侧
>>>         return "L"
>>>     if path[1][0] == me.row and path[1][1] == me.col + 1:  # 判断企鹅下一步需要移动到的位置(坐标)是否在当前位置的右侧
>>>         return "R"
>>>
>>>     return "S"  # "S" 表示静止不动

如果我们想移动到己方出口(Exit),可以使用 path() 获取从企鹅当前位置(坐标)到出口的路线,并控制企鹅向己方出口移动。

>>> # 示例代码三:使用 path() 获取企鹅到出口(Exit)的路线信息,控制企鹅向宝箱移动
>>>
>>> import api
>>>
>>> def update(context):
>>>     me = context.me  # 获取个人信息
>>>     exit = context.exit  # 获取出口(Exit)的信息,exit中保存的是己方的出口信息
>>>
>>>     path = api.check.path(start=(me.row, me.col), end=(exit.row, exit.col))
>>>
>>>     # 控制企鹅向己方出口移动
>>>     if path[1][0] == me.row - 1 and path[1][1] == me.col:  # 判断企鹅下一步需要移动到的位置(坐标)是否在当前位置的上侧
>>>         return "U"
>>>     if path[1][0] == me.row + 1 and path[1][1] == me.col:  # 判断企鹅下一步需要移动到的位置(坐标)是否在当前位置的下侧
>>>         return "D"
>>>     if path[1][0] == me.row and path[1][1] == me.col - 1:  # 判断企鹅下一步需要移动到的位置(坐标)是否在当前位置的左侧
>>>         return "L"
>>>     if path[1][0] == me.row and path[1][1] == me.col + 1:  # 判断企鹅下一步需要移动到的位置(坐标)是否在当前位置的右侧
>>>         return "R"
>>>
>>>     return "S"  # "S" 表示静止不动

你可以在文档中了解 path() 更详细的使用细节。

(四)使用 next() 获取己方企鹅向指定地点(位置/坐标)移动的推荐移动方向

  • 通过 next() 可以快速获取企鹅从当前位置(坐标)到另一个位置(坐标)的移动方向。

  • path() 用于获取企鹅从当前位置(坐标)到另一个位置(坐标)的整个推荐路线信息,next() 用于获取企鹅向指定位置(坐标)移动的下一步推荐动作。

通过 next() 获取企鹅向指定类型宝石移动的下一步推荐动作。

>>> # 示例代码一:使用 next() 获取企鹅向指定类型宝石移动的下一步推荐动作
>>>
>>> import api
>>>
>>> def update(context):
>>>     items = context.items
>>>     # 假定关卡中粉色宝石的数量不为零,获取粉色宝石列表中第一个宝石的信息
>>>     pink_gem = items["pink_gem"][0]
>>>
>>>     # 根据粉色宝石的位置(坐标),确定下一步动作
>>>     return api.check.next(end=(pink_gem.row, pink_gem.col))

通过 next() 获取企鹅向宝箱(box)移动的下一步推荐动作。

>>> # 示例代码二:使用 next() 获取企鹅向宝箱移动的下一步推荐动作
>>>
>>> import api
>>>
>>> def update(context):
>>>     items = context.items
>>>     # 假定关卡中宝箱的数量不为零
>>>     box = items["box"][0]
>>>
>>>     # 根据宝箱的位置(坐标),确定下一步动作
>>>     return api.check.next(end=(box.row, box.col))

通过 next() 获取企鹅向己方出口(Exit)移动的下一步推荐动作。

>>> # 示例代码三:使用 next() 获取企鹅向己方出口(Exit)移动的下一步推荐动作
>>>
>>> import api
>>>
>>> def update(context):
>>>     # 获取己方出口(Exit)信息
>>>     exit = context.exit
>>>
>>>     # 根据己方出口(Exit)的位置(坐标),确定下一步动作
>>>     return api.check.next(end=(exit.row, exit.col))

你可以在文档中了解 next() 更详细的使用细节。

(五)使用 closest_item() 获取(找到)关卡中距离己方企鹅最近的物品(宝石/宝箱等)信息

  • 根据给定物品,通过使用 closest_item() 可以获取(找到)距离己方企鹅最近的物品(如宝石/宝箱等)。

通过 closest_item() 获取(找到)距离己方最近的粉色宝石(粉宝石 pink_gem)。

>>> # 示例代码一:使用 closest_item() 获取(找到)距离己方企鹅最近的粉色宝石(粉宝石 pink_gem)
>>>
>>> import api
>>>
>>> def update(context):
>>>    items = context.items
>>>
>>>    # 假定当前关卡中有多个粉色宝石(pink_gem)
>>>    pink_gem_list = items["pink_gem"]
>>>
>>>    # 获取(找到)距离己方企鹅最近的粉色宝石
>>>    closest_pink_gem = api.check.closest_item(pink_gem_list)
>>>
>>>    # 控制己方企鹅向距离最近的粉色宝石移动
>>>    return api.check.next(end=(closest_pink_gem.row, closest_pink_gem.col))

通过 closest_item() 获取(找到)距离己方最近的红色宝石(红宝色 red_gem)。

>>> # 示例代码二:使用 closest_item() 获取(找到)距离己方企鹅最近的红色宝石(红宝石 red_gem)
>>>
>>> import api
>>>
>>> def update(context):
>>>    items = context.items
>>>
>>>    # 假定当前关卡中有多个红色宝石(red_gem)
>>>    red_gem_list = items["red_gem"]
>>>
>>>    # 获取(找到)距离己方企鹅最近的红色宝石
>>>    closest_red_gem = api.check.closest_item(red_gem_list)
>>>
>>>    # 控制己方企鹅向距离最近的红色宝石移动
>>>    return api.check.next(end=(closest_red_gem.row, closest_red_gem.col))

通过 closest_item() 获取(找到)距离己方最近的黄色宝石(黄宝石 yellow_gem)。

>>> # 示例代码三:使用 closest_item() 获取(找到)距离己方企鹅最近的黄色宝石(黄宝石)
>>>
>>> import api
>>>
>>> def update(context):
>>>    items = context.items
>>>
>>>    # 假定当前关卡中有多个黄色宝石(yellow_gem)
>>>    yellow_gem_list = items["yellow_gem"]
>>>
>>>    # 获取(找到)距离己方企鹅最近的黄色宝石
>>>    closest_yellow_gem = api.check.closest_item(yellow_gem_list)
>>>
>>>    # 控制己方企鹅向距离最近的黄色宝石移动
>>>    return api.check.next(end=(closest_yellow_gem.row, closest_yellow_gem.col))

通过 closest_item() 获取(找到)距离己方最近的紫色宝石(紫宝石 purple_gem)。

>>> # 示例代码四:使用 closest_item() 获取(找到)距离己方企鹅最近的紫色宝石(紫宝石)
>>>
>>> import api
>>>
>>> def update(context):
>>>    items = context.items
>>>
>>>    # 假定当前关卡中有多个紫色宝石(purple_gem)
>>>    purple_gem_list = items["purple_gem"]
>>>
>>>    # 获取(找到)距离己方企鹅最近的紫色宝石
>>>    closest_purple_gem = api.check.closest_item(purple_gem_list)
>>>
>>>    # 控制己方企鹅向距离最近的紫色宝石移动
>>>    return api.check.next(end=(closest_purple_gem.row, closest_purple_gem.col))

通过 closest_item() 获取(找到)距离己方最近的蓝色宝石(蓝宝石 blue_gem)。

>>> # 示例代码五:使用 closest_item() 获取(找到)距离己方企鹅最近的蓝色宝石(蓝宝石)
>>>
>>> import api
>>>
>>> def update(context):
>>>    items = context.items
>>>
>>>    # 假定当前关卡中有多个蓝色宝石(blue_gem)
>>>    blue_gem_list = items["blue_gem"]
>>>
>>>    # 获取(找到)距离己方企鹅最近的蓝色宝石
>>>    closest_blue_gem = api.check.closest_item(blue_gem_list)
>>>
>>>    # 控制己方企鹅向距离最近的紫色宝石移动
>>>    return api.check.next(end=(closest_blue_gem.row, closest_blue_gem.col))

通过 closest_item() 获取(找到)距离己方最近的宝箱(box)。

>>> # 示例代码六:使用 closest_item() 获取(找到)距离己方企鹅最近的宝箱
>>>
>>> import api
>>>
>>> def update(context):
>>>    items = context.items
>>>
>>>    # 假定当前关卡中有多个宝箱(box)
>>>    box_list = items["box"]
>>>
>>>    # 获取(找到)距离己方企鹅最近的宝箱
>>>    closest_box = api.check.closest_item(box_list)
>>>
>>>    # 控制己方企鹅向距离最近的宝箱(box)移动
>>>    return api.check.next(end=(closest_box.row, closest_box.col))

通过 closest_item() 获取(找到)距离己方最近的宝石(gem)。

>>> # 示例代码七:使用 closest_item() 获取(找到)距离己方企鹅最近的宝石
>>>
>>> import api
>>>
>>> def update(context):
>>>    items = context.items
>>>
>>>    gem_list = items["red_gem"] + items["yellow_gem"] + items["pink_gem"] + items["blue_gem"] + items["purple_gem"]
>>>
>>>    # 获取(找到)距离己方企鹅最近的宝石
>>>    closest_gem = api.check.closest_item(gem_list)
>>>
>>>    # 控制己方企鹅向距离最近的宝石移动
>>>    return api.check.next(end=(closest_gem.row, closest_gem.col))

通过 closest_item() 获取(找到)距离己方最近的物品。

>>> # 示例代码七:使用 closest_item() 获取(找到)距离己方企鹅最近的宝石
>>>
>>> import api
>>>
>>> def update(context):
>>>    items = context.items
>>>
>>>    item_list = items["red_gem"] + items["yellow_gem"] + items["pink_gem"] + items["blue_gem"] + items["purple_gem"] + items["box"]
>>>
>>>    # 获取(找到)距离己方企鹅最近的物品
>>>    closest_item = api.check.closest_item(item_list)
>>>
>>>    # 控制己方企鹅向距离最近的物品移动
>>>    return api.check.next(end=(closest_item.row, closest_item.col))

你可以在文档中了解 closest_item() 更详细的使用细节。

Functions

position(row, col)

在当前时刻的地图中,获取给定行列的地图类型(行和列都是从 0 开始计数)。

surrounding(row, col)

给定行列位置,返回此位置周围(上下左右)的地图类型。返回的数据中,"U" 表示此位置上方区域, "D" 表示此位置下方区域, "L" 表示此位置左边区域, "R" 表示此位置右边区域。

path(start, end[, method, extra_obstacles, ...])

计算得到图中从起点(start)到终点(end)的一条路线。更换 method 可以切换不同的寻路算法。目前支持 bfs, dfs, dijkstra, greedy, a*, d*lite, jps 算法。

next(end)

计算从我的企鹅走向(end)的一条路线,并返回下一步推荐移动的方向(S, U, D, L, R 中的一个)。

closest_item(items)

将物品按寻路算法测得的距离排序,返回离我最近的物品实例。入参 items 为一个列表, 其中的每个元素是一个物品 Item 的实例。如果某个物品无法到达,则会被认定为无穷远。