2015-08-14 2 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 не определенно, когда я пытаюсь загрузить игру. Я попытался создать систему save/load, используя 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 в функцию нагрузки глобально. –

Смежные вопросы