Python文本游戏保存功能

时间:2017-12-27 10:36:42

标签: python python-2.7 adventure

嗨我一直在使用python进行文本冒险,游戏只需要一次性完成,所以我尝试用pickle创建一个保存功能,这样可以保存我的主要变量,如位置,黄金和库存到.txt文件 但我无法加载新变量,加载和保存功能位于代码的底部。 提前谢谢。

def do_save(self, arg):
    savegame = open('savegame.txt', 'w') 
    pickle.dump(inventory, savegame)
    pickle.dump(gold, savegame)
    pickle.dump(location, savegame)




def do_load(self,arg):
    loadgame = open('savegame.txt', 'r') 
    inventory = pickle.load(loadgame)
    location = pickle.load(loadgame)
    gold = pickle.load(loadgame)

2 个答案:

答案 0 :(得分:1)

此代码的第一个问题是,您永远不会关闭可能(并且会)导致内存问题的文件,因为流将保持打开状态,所以永远不要忘记使用wb

关闭它

第二个问题在于文件的打开方式。 Pickle以二进制方式读写,因此应使用二进制模式(rbw而不是rdef do_save(self, arg): saveGame = open('savegame.txt', 'wb') saveValues = (inventory, gold, location) pickle.dump(saveValues, saveGame) saveGame.close() def do_load(self, arg): loadGame = open('savegame.txt', 'rb') loadValues = pickle.load(loadGame) inventory = loadValues[0] gold = loadValues[1] location = loadValues[2] loadGame.close() )读取和写入文件。

接下来,酸洗,这部分更像是一个建议,并不是解决你所遇到的问题的必要条件。可以将多个项目Pickle到一个文件中,但更简单的解决方案可能是将它们放入一个对象中,例如包含所有3个值的元组:

self.f0

此解决方案资源较少,因为它只读取和写入文件一次,并且允许文件流打开的时间更短。

答案 1 :(得分:0)

只需对所有已保存的数据进行一次腌制。

savegameDict['inventory'] = inventory
savegameDict['gold'] = gold
savegameDict['location'] = location
pickle.dump(savegameDict, savegame)

然后将整个字典腌制成装载。

savegameDict = pickle.load(loadgame)

同时使用带有wbrb的二进制模式打开文件,因为pickle写入并读取二进制而不是文本。