簡體   English   中英

在基於 Python 的基於文本的 RPG 中保存/加載系統

[英]Save/Load System in Python Text-Based 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 設置為默認統計數據,並加載游戲,將所有玩家統計數據設置為默認值,而不是加載他們保存的統計數據。

我只需要對你的類定義做一個更正: self.maxhealth = 100 + self.defe應該是self.maxhealth = 100 + self.base_defe (我想這就是你的意思)。

這是一個在 OS X 上的 python 3.4.2 中運行並且似乎工作正常的測試:

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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM