Python 文字游戏保存功能
Python text game save feature
你好,我一直在 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)
只需对所有保存的数据进行一次酸洗。
savegameDict['inventory'] = inventory
savegameDict['gold'] = gold
savegameDict['location'] = location
pickle.dump(savegameDict, savegame)
并且只需将整个字典 pickle 回来以供加载。
savegameDict = pickle.load(loadgame)
同时使用 wb
和 rb
的二进制模式打开您的文件,因为 pickle 写入和读取二进制而不是文本。
此代码的第一个问题是您永远不会关闭可能(并且将会)导致内存问题的文件,因为流将保持打开状态,因此永远不要忘记使用 savegame.close()
[=16 关闭它=]
第二个问题在于打开文件的方式。 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()
考虑到该解决方案只对文件进行一次读取和写入,因此占用的资源较少,并且允许文件流打开的时间更短。
你好,我一直在 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)
只需对所有保存的数据进行一次酸洗。
savegameDict['inventory'] = inventory
savegameDict['gold'] = gold
savegameDict['location'] = location
pickle.dump(savegameDict, savegame)
并且只需将整个字典 pickle 回来以供加载。
savegameDict = pickle.load(loadgame)
同时使用 wb
和 rb
的二进制模式打开您的文件,因为 pickle 写入和读取二进制而不是文本。
此代码的第一个问题是您永远不会关闭可能(并且将会)导致内存问题的文件,因为流将保持打开状态,因此永远不要忘记使用 savegame.close()
[=16 关闭它=]
第二个问题在于打开文件的方式。 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()
考虑到该解决方案只对文件进行一次读取和写入,因此占用的资源较少,并且允许文件流打开的时间更短。