所有
我目前正在尝试使用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()
我是在正确地做这个,还是所有的低音韵律? 洛尔
答案 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或者在你完成编程时返回。祝你好运!