【发布时间】:2015-10-29 18:52:11
【问题描述】:
我已经开始开发一款基于文本的冒险游戏。该环境的行为类似于 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 来避免给出未定义的名称作为参数。
我的主要问题是:如果可能,我怎样才能提高效率? 或者,我构建系统的方式,是否需要进行重大重组才能改进?
【问题讨论】:
-
我唯一的建议是将你的对象和房间变成类,这样你就可以将代码直接更新到对象。
标签: python dictionary game-engine text-based