2015-08-14 38 views
1

我试图在我的Python RPG中获得一个保存/加载系统,但只能部分弄清楚如何完成此操作。我已经看到关于这个主题的其他问题,但是他们没有一个真的适合我正在做的事情。在Python中保存/加载系统基于文本的RPG

class Player: 
    def __init__(self, name): 
     self.name = name 
     self.base_defe = 0 
     self.weap = "Rusty Sword" 
     self.wbow = "None" 
     self.armH = "Worn Helmet" 
     self.armB = "Worn Shirt" 
     self.armA = "Worn Gloves" 
     self.armL = "Worn Pants" 
     self.armF = "Worn Boots" 
     self.gold = 1000 
     self.orichalcum = 0 
     self.base_stre = 1 
     self.base_magi = 1 
     self.base_rang = 1 
     self.maxmana = 100 
     self.mana = self.maxmana 
     self.level = 1 
     self.exp = 0 
     self.maxexp = 100 
     self.expdiff = 50 
     self.pots = 0 
     self.arrows = 0 
     self.q1c = False 
     self.q2c = False 
     self.q3c = False 
     self.q1 = False 
     self.q2 = False 
     self.q3 = False 
     self.QuestActive = False 
     self.qtitle = "None" 
     self.maxhealth = 100 + self.defe 
     self.health = self.maxhealth 
     self.inventory = ["Rusty Sword", 
          "Worn Shirt", 
          "Worn Pants", 
          "Worn Boots", 
          "Worn Helmet", 
          "Worn Gloves"] 
     self.spells = [] 

我也有一个名为PlayerIG变量表示的球员,但在功能设置,所以我不断收到类似的消息PlayerIG没有定义,当我尝试加载游戏。我尝试使用pickle创建一个保存/加载系统,并将所有内容放入字典中。保存它工作正常,但加载它肯定不会,因为每当我尝试加载它的所有变量被重置。我无法弄清楚如何让这个工作正常,但任何帮助将不胜感激。

已经给了我最多的问题的部分是:

def name(): 
    os.system('clear') 
    PlayerIG = Player(raw_input("What is your name?")) 
    print ("Prints story") 

原因是PlayerIG是代表球员,但每当我试图加载保存文件,:

def load(): 
    os.system('clear') 
    with open('savefile', 'rb') as f: 
     data = pickle.load(f) 
    print "Loaded last save state..." 
    option = raw_input(" ") 
    #data is equal to PlayerIG 

它给了我错误,例如PlayerIG不存在,或者每当我将PlayerIG设置在函数的外部时,它都会将PlayerIG设置为默认的统计信息,并且它会加载游戏,将所有玩家的统计信息设置为默认值,而不是加载已保存的统计信息。

+1

刚刚发布你的程序的,它不管你正在试图做的一部分,而不是无关的代码:https://stackoverflow.com/help/mcve –

+1

我想要做的是将这些变量保存到文本文件中,然后加载到我的游戏中。 “使用这些变量创建保存/加载系统” –

+0

您是否看过有关此主题的任何其他StackOverflow问题?这是一个经常被问到的问题。 –

回答

1

我只需要对你的班级定义进行一次更正:self.maxhealth = 100 + self.defe应该是self.maxhealth = 100 + self.base_defe(我认为这就是你的意思)。

这里是运行,似乎在Python 3.4.2 OS X做工精细的测试:

import pickle 

class Player: 
    def __init__(self, name): 
     self.name = name 
     self.base_defe = 0 
     self.weap = "Rusty Sword" 
     self.wbow = "None" 
     self.armH = "Worn Helmet" 
     self.armB = "Worn Shirt" 
     self.armA = "Worn Gloves" 
     self.armL = "Worn Pants" 
     self.armF = "Worn Boots" 
     self.gold = 1000 
     self.orichalcum = 0 
     self.base_stre = 1 
     self.base_magi = 1 
     self.base_rang = 1 
     self.maxmana = 100 
     self.mana = self.maxmana 
     self.level = 1 
     self.exp = 0 
     self.maxexp = 100 
     self.expdiff = 50 
     self.pots = 0 
     self.arrows = 0 
     self.q1c = False 
     self.q2c = False 
     self.q3c = False 
     self.q1 = False 
     self.q2 = False 
     self.q3 = False 
     self.QuestActive = False 
     self.qtitle = "None" 
     self.maxhealth = 100 + self.base_defe 
     self.health = self.maxhealth 
     self.inventory = ["Rusty Sword", 
          "Worn Shirt", 
          "Worn Pants", 
          "Worn Boots", 
          "Worn Helmet", 
          "Worn Gloves"] 
     self.spells = [] 

p = Player('Fred') 
p.exp = 100 
p.gold = 5000 

with open('fred.player', 'wb') as f: 
    pickle.dump(p, f) 

with open('fred.player', 'rb') as f: 
    p2 = pickle.load(f) 

print('Loaded player "%s" with %d exp and %d gold.' % (p2.name, p2.exp, p2.gold)) 
+0

所以代码工作!我的唯一错误是在它加载并进入主菜单后显示统计信息为默认值。我知道代码的工作原理是因为在加载之后,我使它显示统计信息,就像它在菜单中一样。 –

+1

好吧,我想通了,我只需要在加载函数中将PlayerIG设置为全局。 –