Context (环境信息类)

class Context

基类:BaseContext

环境上下文信息

Attributes Summary

done

返回本局是否结束

exit

出口位置

height

场景的高(地图的行数)

items

所有物品的横纵坐标,以字典形式提供。字典中的 key 为元素名称,value 是所有这类元素的列表。 列表中存储 Item 实例,可以获取此实例的行列坐标。如果环境中不包含某个物品, 则此物品 key 中的值为空列表。

maze

返回 2D 地图上的静态地图信息,仅含道路类型(ROAD)和墙类型(WALL),不包含其他地图元素信息。

me

当前我的信息,返回 Player

players

所有用户 (Player) 信息。

round

用户当前回合数

step

返回当前帧数

width

场景的宽(地图的列数)

Attributes Documentation

done

返回本局是否结束

返回

True/False

返回类型

bool

exit

出口位置

返回

出口实例,可获取出口的行列坐标

返回类型

Exit

../_images/context_exit.png

实际案例

>>> # 方法一:通过 api.get_context() 获取环境信息
>>> import api
>>> context = api.get_context()
>>> e = context.exit
>>> e.row
4
>>> # 方法二:通过 def update(context) 获取环境信息
>>> def update(context):
>>>     e = context.exit
height

场景的高(地图的行数)

返回

高度(行数)

返回类型

int

../_images/context_height.png

实际案例

>>> # 方法一:通过 api.get_context() 获取环境信息
>>> import api
>>> context = api.get_context()
>>> context.height
5
>>> # 方法二:通过 def update(context) 获取环境信息
>>> def update(context):
>>>     h = context.height
items

所有物品的横纵坐标,以字典形式提供。字典中的 key 为元素名称,value 是所有这类元素的列表。 列表中存储 Item 实例,可以获取此实例的行列坐标。如果环境中不包含某个物品, 则此物品 key 中的值为空列表。

环境中的物品可能包含 宝石 和 宝箱:

  • 宝石:获取时积分 +1。一共五种类型,每种对应英文如下
    • 红宝石:red_gem

    • 蓝宝石:blue_gem

    • 粉宝石:pink_gem

    • 黄宝石:yellow_gem

    • 紫宝石:purple_gem

  • 宝箱 (box): 获取后有随机奖惩

Tips:如集齐一套宝石可获得额外 5 积分,累计有效

返回

以物品的类型名为 key,可获取所有的这类物品(Item)列表。

返回类型

dict[str, list[Item]]

../_images/context_items.png

实际案例

>>> # 方法一:通过 api.get_context() 获取环境信息
>>> import api
>>> context = api.get_context()
>>> items = context.items  # 获取当前回合的物品信息
>>> items
{
    'pink_gem': [Item(row=2, col=2), Item(row=3, col=2)],
    'red_gem': [],
    'yellow_gem': [],
    'purple_gem': [],
    'blue_gem': [],
    'box': []
}
>>> pink_gem = items["pink_gem"][0]  # 获取粉色宝石信息
>>> pink_gem
Item(row=2, col=2)
>>> pink_gem.row
2
>>> len(items["pink_gem"]) == 2
True
>>> # 方法二:通过 def update(context) 获取环境信息
>>> def update(context):
>>>     items = context.items
maze

返回 2D 地图上的静态地图信息,仅含道路类型(ROAD)和墙类型(WALL),不包含其他地图元素信息。

返回

返回 2D 字符串矩阵信息

返回类型

list[list[str]]

../_images/context_maze.png

实际案例

>>> # 方法一:通过 api.get_context() 获取环境信息
>>> import api
>>> context = api.get_context()
>>> context.maze
[['WALL', 'WALL', 'WALL', 'WALL', 'WALL'],
 ['WALL', 'ROAD', 'ROAD', 'ROAD', 'WALL'],
 ['WALL', 'ROAD', 'ROAD', 'ROAD', 'WALL'],
 ['WALL', 'ROAD', 'ROAD', 'ROAD', 'WALL'],
 ['WALL', 'ROAD', 'WALL', 'ROAD', 'WALL']]
>>> # 方法二:通过 def update(context) 获取环境信息
>>> def update(context):
>>>     maze = context.maze
me

当前我的信息,返回 Player

返回

Player 类,记录 id,坐标,朝向等信息

返回类型

Player

../_images/context_me.png

实际案例

>>> # 方法一:通过 api.get_context() 获取环境信息
>>> import api
>>> context = api.get_context()
>>> me = context.me
>>> me.row
1
>>> me.col
1
>>> me.energy
100
>>> me.direction
"D"
>>> me.finished
False
>>> me.score
10.2
>>> me.item_count
{"red_gem": 0, "blue_gem": 1, "pink_gem": 1, "yellow_gem": 3, "purple_gem": 0, "box": 0}
>>> # 方法二:通过 def update(context) 获取环境信息
>>> def update(context):
>>>     me = context.me
players

所有用户 (Player) 信息。

返回

所有用户的行列坐标。返回类型为字典, key 为 ID (int 形式,且你的 ID 永远是 0,其他人的 ID 从 1 开始计数), value 为 Player 的实例, 可从实例中调出此 player 的信息,如横纵坐标、体力值等。

返回类型

dict[int, Player]

../_images/context_players.png

实际案例

>>> # 方法一:通过 api.get_context() 获取环境信息
>>> import api
>>> context = api.get_context()
>>> players = context.players
>>> p0 = players[0]   # 选手列表中第 0 号(0 号永远是你)
>>> p0.energy  # 剩余体力
100
>>> p1 = players[1]   # 选手列表中第 1 号(1 号和 1 号之后永远是其他人)
>>> p1.col
3
>>> p1.item_count
{"red_gem": 0, "blue_gem": 1, "pink_gem": 1, "yellow_gem": 3, "purple_gem": 0, "box": 0}
>>> # 方法二:通过 def update(context) 获取环境信息
>>> def update(context):
>>>     players = context.players
round

用户当前回合数

返回

回合数

返回类型

int

实际案例

>>> context.round
1
step

返回当前帧数

返回

帧数

返回类型

int

width

场景的宽(地图的列数)

返回

宽度(列数)

返回类型

int

../_images/context_width.png

实际案例

>>> # 方法一:通过 api.get_context() 获取环境信息
>>> import api
>>> context = api.get_context()
>>> context.width
5
>>> # 方法二:通过 def update(context) 获取环境信息
>>> def update(context):
>>>     w = context.width