我正在自学如何用python写一个基本的游戏(基于文本-不使用pygame)。(注意:我实际上还没有讲到“游戏”部分,因为我想确保我首先弄清楚了基本的核心结构。)
我正试图弄清楚如何实现保存/加载场景,以便游戏会话可以在程序的单一运行之后继续存在。我做了一些搜索,似乎所有的东西都指向酸洗或搁置是最好的解决方案。
我的测试场景是保存和加载类的单个实例。具体地说,我有一个名为Characters()的类,并且(出于测试目的)将该类的一个实例赋给了一个名为pc的变量。Character类的实例具有一个名为name的属性,该属性最初设置为"DEFAULT",但将根据用户在初始设置新游戏时的输入进行更新。对于ex:
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)?
我将需要“保存”大量实例,并且可以通过循环自动执行该过程,但我不知道如何自动卸载到特定的变量名。我真的需要逐个明确地重新指定每一个吗?我需要将实例赋值回适当的变量名bc。我有一堆核心函数,它们使用变量名引用特定的实例(就像我上面给出的例子)。
想法?这是可能的吗,还是有一种我看不到的完全不同的解决方案?
谢谢!
~排骨
发布于 2013-05-31 08:23:05
当然,做这样的事情是可能的。因为工具架本身就像一个字典,所以只需将所有字符实例保存在一个实际的字典实例中,并使用它们的变量名作为键。例如:
class Character(object):
def __init__(self, name="DEFAULT"):
self.name = name
pc = Character("Bob")
def print_name(character):
print character.name
def run():
print_name(pc)
run()
import shelve
mysave = shelve.open("save1")
# save all Character instances without the default name
mysave["all characters"] = {varname:value for varname,value in
globals().iteritems() if
isinstance(value, Character) and
value.name != "DEFAULT"}
mysave.close()
del pc
mysave = shelve.open("save1")
globals().update(mysave["all characters"])
mysave.close()
run()https://stackoverflow.com/questions/16846868
复制相似问题