【发布时间】:2015-05-30 19:46:56
【问题描述】:
我很绝望,因为我已经尝试了很长时间。
我正在制作一个文本冒险,其中一些用户输入选择玩家的 hp、dmg,你可以命名它。
我想做一个保存功能,但是每次加载,播放器都有默认参数。
例子:
class player:
def __init__(self, hp, dmg):
self.hp = hp
self.dmg = dmg
def save(obj):
save_file = open('C:\\Users\\XXXXX XXXX\\Desktop\\Game\\save.dat', 'wb')
pickle.dump(obj, save_file)
save_file.close()
def load():
load_file = open('C:\\Users\\XXXXX XXXX\\Desktop\\Game\\save.dat', 'rb')
loaded_game_data = pickle.load(load_file)
return loaded_game_data
def start():
player.hp = input('Player Hp')
player.dmg = input('Player Dmg')
player = player(0, 0)
start()
请不要只告诉我我做错了什么,还要告诉我如何做对。我真的很需要这个 - 谢谢!
我使用以下内容加载播放器:
>>>print(player.hp) # To make sure the HP is 0
0
>>>player.hp = 100 # I now change the HP to 100
>>>save(player) # Saving the player with 800 HP and 0 DMG
# Restarting Python
>>>load() # Loading the player
>>>print(player.hp) # Check if the HP is 100 as I saved it.
0 # The HP is 0...
# I expected 100 as I saved it.
【问题讨论】:
-
您的预期行为是什么?您想在什么时候腌制值以及何时检索它们?
-
只是给你一个小费。我看到您使用路径打开文件。如果您使用 r 选项,您可以确保将字符串作为原始输入。然后你不必转义反斜杠等。例如:
open(r'C:\Program\File1.txt') -
你是如何重启这个脚本的?展示如何创建实例,如何使用
save和load,以及如何运行脚本……然后停止它,我假设……然后重新启动它。您如何使用上述代码将对您需要做的事情产生影响,以使其做您想做的事——这从您的问题中不清楚。你越清楚你想做什么,你就会得到更好的答案。 -
您在文件中使用
player = player(0,0)吗?如果是这样,您将用一个实例player替换类player,因为它的属性值每次都为零。如果是这样,您应该将实例的名称更改为类名以外的名称。这很重要,因为pickle通过引用导入类,因此每次都必须从类中导入和重新创建实例——而不仅仅是在不读取文件的情况下“重构”它。
标签: python pickle python-3.4