|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我正在制作一个文本冒险游戏,使用命名元组来定义地点。
- Location = namedtuple('Location', ['desc', 'ldesc', 'func', 'dirloc'])
- entrance = foyer = None
- entrance = Location('地牢入口', (
- '你现在在一片小树林的小空地上。'
- '北面可见一扇大的镶铁门,嵌在小山上,小山突起于空地的中心。'
- '阳光照耀在你身上,鸟儿在歌唱。'), None,
- {'north':foyer, 'south':None, 'east':None, 'west':None, 'up':None, 'down':None})
- foyer = Location('门厅', ('你现在在一个中等大小的石头房间里。'
- '四面八方都刻有壁龛。'
- '一条通道向西延伸,另一条向北延伸。'
- '地面上的脚印通向西通道。'),
- None,
- {'north':None, 'south':entrance, 'east':None, 'west':None, 'up':None, 'down':None})
复制代码
当 foyer 的 Location 被重新赋值时,我需要在 entrance 的字典 dictloc 中自动更新 foyer 变量。
我该怎么做?我已经在互联网上搜索了很多文章,但没有找到相关的内容。
您可以使用函数或类来解决这个问题。下面是一种使用类的解决方案:
创建一个 LocationManager 类,用于管理所有位置。在该类中,创建一个字典,用于存储所有位置及其名称。
当您重新定义 foyer 变量时,只需调用 LocationManager 类中的 update_location() 方法即可自动更新字典中的 foyer 位置。
以下是一个示例代码:
- from collections import namedtuple
- class LocationManager:
- def __init__(self):
- self.locations = {}
- def add_location(self, name, desc, ldesc, func, dirloc):
- location = namedtuple('Location', ['desc', 'ldesc', 'func', 'dirloc'])(desc, ldesc, func, dirloc)
- self.locations[name] = location
- def update_location(self, name, desc, ldesc, func, dirloc):
- if name in self.locations:
- location = namedtuple('Location', ['desc', 'ldesc', 'func', 'dirloc'])(desc, ldesc, func, dirloc)
- self.locations[name] = location
- # 创建一个 LocationManager 实例
- lm = LocationManager()
- # 添加 foyer 和 entrance 位置
- lm.add_location('foyer', '门厅', ('你现在在一个中等大小的石头房间里。'
- '四面八方都刻有壁龛。'
- '一条通道向西延伸,另一条向北延伸。'
- '地面上的脚印通向西通道。'), None,
- {'north':None, 'south':'entrance', 'east':None, 'west':None, 'up':None, 'down':None})
- lm.add_location('entrance', '地牢入口', (
- '你现在在一片小树林的小空地上。'
- '北面可见一扇大的镶铁门,嵌在小山上,小山突起于空地的中心。'
- '阳光照耀在你身上,鸟儿在歌唱。'), None,
- {'north':'foyer', 'south':None, 'east':None, 'west':None, 'up':None, 'down':None})
- # 重新定义 foyer 位置
- lm.update_location('foyer', '新门厅', ('这是新门厅的描述'), None,
- {'north':None, 'south':'entrance', 'east':None, 'west':None, 'up':None, 'down':None})
- # 现在 foyer 的描述已经更新了,可以打印查看
- print(lm.locations['foyer'].desc)
复制代码
输出结果:
|
|