Python文本游戏保存功能

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

嗨,我一直在用python做一个文本冒险游戏,游戏已经变得很大了,只需一次就可以完成,所以我尝试用pickle做一个保存功能,这样它就可以将我的主要变量(如location、gold和inventory)保存到一个.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)

只需对所有保存的数据进行一次酸洗

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()

考虑到此解决方案只对文件执行一次读写操作,并且允许文件流在较短的时间内打开,因此资源占用较少。

您是否尝试按转储到文件的顺序加载数据?调用加载函数后是否显示错误消息?