嗨我一直在使用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)
答案 0 :(得分:1)
此代码的第一个问题是,您永远不会关闭可能(并且会)导致内存问题的文件,因为流将保持打开状态,所以永远不要忘记使用wb
第二个问题在于文件的打开方式。 Pickle以二进制方式读写,因此应使用二进制模式(rb
和w
而不是r
和def 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)
同时使用带有wb
和rb
的二进制模式打开文件,因为pickle写入并读取二进制而不是文本。