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)

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

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

第二个问题在于打开文件的方式。 Pickle 以二进制方式读取和写入,因此应使用二进制模式读取和写入文件(wbrb 而不是 wr)。

接下来是酸洗,这部分更多的是建议,并不是解决您遇到的问题所必需的。可以将多个项目 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()

考虑到该解决方案只对文件进行一次读取和写入,因此占用的资源较少,并且允许文件流打开的时间更短。