我正在自学如何用 python 编写一个基本的游戏(基于文本 - 不使用 pygame)。(注意:我实际上并没有真正进入“游戏”部分,因为我想确保我首先弄清楚了基本的核心结构。)
我正试图弄清楚如何实现保存/加载场景,以便游戏会话可以在程序的信号运行之后持续存在。我做了一些搜索,一切似乎都指向酸洗或搁置是最好的解决方案。
我的测试场景是保存和加载一个类的单个实例。具体来说,我有一个名为 Characters() 的类,并且(为了测试)将该类的一个实例分配给一个名为 pc 的变量。Character 类的实例有一个名为 name 的属性,该属性最初设置为“DEFAULT”,但会在新游戏初始设置时根据用户输入进行更新。例如:
class Characters(object):
def __init__(self):
self.name = "DEFAULT"
pc = Characters()
pc.name = "Bob"
我还拥有(或将拥有)大量函数,这些函数使用分配给它们的变量来引用各种实例。例如,一个简单的例子可能是:
def print_name(character):
print character.name
def run():
print_name(pc)
run()
我计划有一个保存功能,它将用他们当前的信息(例如:更新的名称)打包 pc 实例(以及其他信息)。我还将有一个加载功能,允许用户玩一个保存的游戏而不是开始一个新游戏。根据我的阅读,负载可以像这样工作:
*assuming info was saved to a file called "save1"
*assuming the pc instance was shelved with "pc" as the key
import shelve
mysave = shelve.open("save1")
pc = mysave["pc"]
我的问题是,有没有办法让搁置加载“记住”与实例关联的变量名,并自动执行 << pc = mysave["pc"] >> 步骤?或者让我将该变量名称存储为字符串(例如作为键)并以某种方式使用该字符串创建具有正确名称(pc)的变量?
我将需要“保存”很多实例,并且可以通过循环自动执行该过程,但我不知道如何自动卸载到特定的变量名。我真的必须单独明确地重新分配每个人吗?我需要将实例分配回适当的变量名,因为我有一堆核心函数,它们使用变量名引用特定实例(如我上面给出的示例)。
想法?这是可能的,还是我没有看到完全不同的解决方案?
谢谢!
~肋骨