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
|
在当前时刻的地图中,获取给定行列的地图类型(行和列都是从 0 开始计数)。 |
|
给定行列位置,返回此位置周围(上下左右)的地图类型。返回的数据中,"U" 表示此位置上方区域, "D" 表示此位置下方区域, "L" 表示此位置左边区域, "R" 表示此位置右边区域。 |
|
计算得到图中从起点(start)到终点(end)的一条路线。更换 method 可以切换不同的寻路算法。目前支持 bfs, dfs, dijkstra, greedy, a*, d*lite, jps 算法。 |
|
计算从我的企鹅走向(end)的一条路线,并返回下一步推荐移动的方向(S, U, D, L, R 中的一个)。 |
|
将物品按寻路算法测得的距离排序,返回离我最近的物品实例。入参 items 为一个列表, 其中的每个元素是一个物品 |