我已经开始开发基于文本的冒险游戏。该环境的行为类似于 Sierra 游戏,但没有图形界面,所有命令都是文本。
目前,游戏中的任何对象(例如角色、房间、物品等)都由字典定义。键是数据值的名称(名称、描述等),如下所示:
flash_light={
'name':'Flashlight',
'desc':'A flashlight, probably belonging to an eningeer on the ship.',
'consumable':False
}
玩家的物品栏和全局物品栏是字典,其中键是用来调用物品的“代号”字符串,物品是引用它的字典。比如说,如果你想拿一个你在房间里找到的物品,房间的字典有一个属性,可以将房间的库存作为一个列表来跟踪。此列表包含作为其中项目“代号”的字符串。
my_room={
'name':'My Room',
'codename':'my_room',
'desc':'A hot, stuffy room shared with 3 other passengers. My trunk is here.\
The door is on the NORTH wall.',
'access':True,
'direc':{'north':'st_hall_1'},
'inven':['flashlight']
}
在命令确定您要求拿走的物品实际上在房间里之后,它会运行:
current_pos.inven().remove(target)
player_inv.update({target:global_inv[target]})
这些行从房间的清单列表中删除字符串,然后将键和项目添加到玩家的清单字典中。键是您尝试获取的对象的字符串名称,该项目在字符串名称处定义为 GLOBAL 库存中的字典。
我有这么多关于程序的调用的原因是,当我将字典引用到其他字典时,我一直遇到问题(即一个房间有一个它连接到的房间的列表),而这些字典可能还没有定义。我使函数尽可能通用,并使用 string-to-call-a-dict 来避免将未定义的名称作为参数提供。
我的主要问题是:如果可能的话,我怎样才能提高效率? 或者,我构建系统的方式,是否需要进行重大重组才能改进?