【问题标题】:Save/Load System in Python Text-Based RPGPython 基于文本的 RPG 中的保存/加载系统
【发布时间】:2015-08-14 19:36:26
【问题描述】:

我试图在我的 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 设置为默认统计数据,并且它会加载游戏,将所有玩家统计数据设置为默认值,而不是加载他们保存的统计数据.

【问题讨论】:

  • 只需发布程序中执行您想做的任何事情的部分,而不是无关代码:stackoverflow.com/help/mcve
  • 我要做的是将这些变量保存到文本文件中,然后加载到我的游戏中。 “使用这些变量创建保存/加载系统”
  • 您是否查看过有关此主题的任何其他 StackOverflow 问题?这是一个常见问题。
  • 我有,但他们没有工作。
  • 请花时间阅读帮助部分,了解如何提问和获得帮助。你读过哪些问题? 什么没用?只是说“我尝试了一些东西,但没有用”并不能帮助任何人。

标签: python


【解决方案1】:

我只需要对你的类定义进行一次更正: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))

【讨论】:

  • 所以代码有效!我的唯一问题是在它加载并进入主菜单后它默认显示统计信息。我知道代码可以工作,因为在它加载后我让它像在菜单中一样显示统计信息。
  • 好吧,我发现我只需要将加载函数中的 PlayerIG 设置为全局。
猜你喜欢
  • 2019-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 2021-08-23
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多