cPickle问题

时间:2012-12-10 07:10:59

标签: function pickle missing-data saving-data state-saving

所有

我目前正在尝试使用cPickle为我的Roguelike创建一个“save_game”功能。

save_game()正确地腌制游戏状态,但是如果我退出游戏,当我尝试重新打开已保存的游戏时,load_game()函数断然拒绝确认存在pickle文件(它只是告诉我没有保存的数据加载)。

这是save_game():

def save_game():
#Write the game data to a cPickled file
f = open('savegame', 'wb')
cPickle.dump('map',f, protocol=cPickle.HIGHEST_PROTOCOL)
cPickle.dump('objects',f, protocol=cPickle.HIGHEST_PROTOCOL)
cPickle.dump('player_index',f, protocol=cPickle.HIGHEST_PROTOCOL)
cPickle.dump('stairs_index', f, protocol=cPickle.HIGHEST_PROTOCOL)
cPickle.dump('inventory',f, protocol=cPickle.HIGHEST_PROTOCOL)
cPickle.dump('game_msgs',f, protocol=cPickle.HIGHEST_PROTOCOL)
cPickle.dump('game_state',f, protocol=cPickle.HIGHEST_PROTOCOL)
cPickle.dump('dungeon_level',f, protocol=cPickle.HIGHEST_PROTOCOL)
f.close()

这是load_game():

f = open('savegame', 'rb')
cPickle.load(f)

f.close()

我是在正确地做这个,还是所有的低音韵律? 洛尔

1 个答案:

答案 0 :(得分:2)

你最缺少的是pickle.load()需要分配加载到某个东西的东西。我的建议是将你要保存的所有内容放入一个字典中,然后挑选该字典,然后将其解开:

saveData = {'map': mapData,
            'objects': objectData}
pickle.dump(saveData, f, -1)

然后在load_game()中:

f = open...
saveData = pickle.load(f)
f.close()
mapData = saveData['map']
objectData = saveData['objects']
顺便说一句 - 我建议不要直接调用cPickle,特别是在你调试时 - 用pickle看到任何错误要容易得多,然后在一切正常时切换到cPickle。你也可以这样做:

try:
   import cPickle as pickleMod
except ImportError:
   import pickle as pickleMod

然后你的程序将会工作(尽管速度更慢),无论你正在使用什么样的python,它都可以让你更容易从pickle切换到cPickle或者在你完成编程时返回。祝你好运!