Python文本游戏保存功能
嗨,我一直在用python做一个文本冒险游戏,游戏已经变得很大了,只需一次就可以完成,所以我尝试用pickle做一个保存功能,这样它就可以将我的主要变量(如location、gold和inventory)保存到一个.txt文件中 但是我无法让它加载新变量,加载和保存功能位于代码的底部。 提前谢谢Python文本游戏保存功能,python,python-2.7,adventure,Python,Python 2.7,Adventure,嗨,我一直在用python做一个文本冒险游戏,游戏已经变得很大了,只需一次就可以完成,所以我尝试用pickle做一个保存功能,这样它就可以将我的主要变量(如location、gold和inventory)保存到一个.txt文件中 但是我无法让它加载新变量,加载和保存功能位于代码的底部。 提前谢谢 def do_save(self, arg): savegame = open('savegame.txt', 'w') pickle.dump(inventory, savegame
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)
只需对所有保存的数据进行一次酸洗
savegameDict['inventory'] = inventory
savegameDict['gold'] = gold
savegameDict['location'] = location
pickle.dump(savegameDict, savegame)
然后把整张纸腌回去装
savegameDict = pickle.load(loadgame)
同样,当pickle写入和读取二进制文件而不是文本时,使用
wb
和rb
以二进制模式打开文件。此代码的第一个问题是,您永远不会关闭文件,因为流将保持打开状态,因此永远不要忘记使用savegame.close()
第二个问题在于文件的打开方式。Pickle以二进制方式读取和写入文件,因此应使用二进制模式读取和写入文件(wb
和rb
,而不是w
和r
)
接下来是酸洗,这一部分更多的是一个建议,对于解决您所遇到的问题来说不是必需的。可以将多个项目Pickle到一个文件中,但更简单的解决方案可能是将它们放入一个对象中,例如一个包含所有3个值的元组:
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()
考虑到此解决方案只对文件执行一次读写操作,并且允许文件流在较短的时间内打开,因此资源占用较少。您是否尝试按转储到文件的顺序加载数据?调用加载函数后是否显示错误消息?