Python文本RPG:如何保存/加载

Python文本RPG:如何保存/加载,python,Python,如果我做错了,请提前原谅我,我是编程和堆栈溢出的绝对初学者。我正在使用Python3.8.3来创建一个文本RPG,我对目前的结果感到满意。但是,我已经到了需要添加保存/加载游戏功能的地步。游戏运行得很好,但正如预期的那样,每次运行程序时,它都会清除所有进度 这是我的“开始”菜单,其中需要加载选项: game_start = True print("Welcome to my RPG!") while game_start == True: start_menu = i

如果我做错了,请提前原谅我,我是编程和堆栈溢出的绝对初学者。我正在使用Python3.8.3来创建一个文本RPG,我对目前的结果感到满意。但是,我已经到了需要添加保存/加载游戏功能的地步。游戏运行得很好,但正如预期的那样,每次运行程序时,它都会清除所有进度

这是我的“开始”菜单,其中需要加载选项:

game_start = True
print("Welcome to my RPG!")
while game_start == True:
    start_menu = int(input("Would you like to 1) Start a New Game 2) Load a previous game, or 3) Quit? "))
    if start_menu == 1:
        print("Let's begin the adventure!")
        game_start = False
    elif start_menu == 2:
        print("I'd load a game but this hasn't been implemented yet.")
    elif start_menu == 3:
        print("Thanks for playing!")
        quit()
    else:
        print("Please choose 1, 2, or 3. ") 
下面是保存游戏选项的位置:

# Town menu
def town():
    town_menu = "You're in town. Command? \n"
    town_menu += "(i)nn, back to (c)ombat, (w)eapon shop, a(r)mor shop, (d)isplay stats, (e)quip, (s)ave game, (q)uit game\n"
    combat_active = False
    in_town = True
    while in_town:
        # Prompt  for command in town
        town_choice = input(town_menu)
        if town_choice == 'q':
            quit_game()
        elif town_choice == 's':
            print("I'd save but I don't know how to program that yet.")
任何帮助都将不胜感激。我三周前开始编程,所以这对我来说是全新的。谢谢

编辑:以下是我认为返回时需要进行的统计和列表:

# Initial Stats
hero = {
    'name': char_name,
    'max_health': 15,
    'current_health': 15,
    'max_mana': 0,
    'current_mana': 0,
    'exp': 0,
    'strength': 7,
    'agility': 5,
    'resilience': 2,
    'level': 1,
    'gold': 120,
    'tier' : 1,
}

# Inventory here
inventory = {
#   'medicinal herb': 2,
#   'goblin ear': 3,
    }

equipped_weapon = weapon
equipped_armor = armor
equipped_shield = shield

# Equipped list
equipped = {
    'weapon' : equipped_weapon,
    'armor' : equipped_armor,
    'shield' : equipped_shield,
    }
此代码中列出的值是初始种子值。随着比赛的进行,他们会随着时间的推移而改变

第二次编辑:感谢John,我认为他的代码建议是有效的。以下是最终的相关代码:

import json # At the top
    # In start menu
    elif start_menu == 2:
        print("Loading game...")
        with open('hero.json') as infile:
            hero = json.load(infile)
        with open('inventory.json') as infile:
            inventory = json.load(infile)
        with open('equipped.json') as infile:
            equipped = json.load(infile)
        game_start = False
        new_game = False

if new_game == True:
   # seed the hero, inventory, equipped stats for a new game

# Saving game in town
        elif town_choice == 's':
            print("Saving game...")
            hero
            with open('hero.json', 'w') as outfile:
                json.dump(hero, outfile)
            inventory
            with open('inventory.json', 'w') as outfile:
                json.dump(inventory, outfile)
            equipped
            with open('equipped.json', 'w') as outfile:
                json.dump(equipped, outfile)

我认为json将是一个很好的选择

保存代码:

import json
hero = {
    'name': 'fred',
    'max_health': 100,
    # etc.
}
with open('hero.json', 'w') as outfile:
    json.dump(hero, outfile)
加载代码:

import json
with open('hero.json') as infile:
    hero = json.load(infile)

然后,您将使用非常类似的代码来保存/加载库存、装备物品等。

您需要保存什么样的数据?欢迎使用!您希望存储和调用哪些数据?您可以将对象、数据存储为或数据库。如果您不确定,我建议您从JSON开始,但如果您还没有确定,您可能希望了解dicts。如果你想要最直接的路线,只需要用一些自定义格式的文件。嘿,约翰,谢谢你的快速回复。我将在返回主帖子时发布我认为与保留相关的所有代码。给我一些。我想你应该四处看看。假设您有一个
Player
对象,该对象有一个
location
字段(以及其他字段,如果您想实现库存、货币等),该字段表示您的播放器的当前位置(因此您也必须执行
location
对象),并且您将有一个方法以特定格式保存
Player
对象(可以是txt文件或json文件中的简单文本)还有另一种从保存的格式重新创建
Player
对象的方法。我用相关代码更新了帖子。ggorlen,我在别处看到过pickle和json文件,但我对它们一无所知。如果你有关于如何将它们添加到python程序的指南/教程,我肯定可以使用它。NoeXWolf,我同意这听起来很方便。但我无法用Python做到这一点,是吗?我选择Python是因为我是一名网络管理员,我听说Python脚本可以帮助我提升我的职业生涯。尽管如此,我当然愿意稍后将此游戏移植到其他语言!谢谢John,我现在正在我的程序中尝试这一点。以此类推因为我是新手,所以很清楚:在我的程序开始时,我只需要一行“导入json”,对吗?或者我把它放在“保存”和“加载”两个部分?你只需要一次(假设保存/加载代码在同一个文件中)。再次感谢!我添加了代码,它似乎可以工作(也添加到post中)