You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Replit平台实现Python文字冒险游戏的存档与读档功能

Python文字冒险游戏存档读档功能实现方案

核心实现思路

  • 采用单个JSON文件存储全部游戏进度,替代分散的多个txt文件,统一管理状态更方便
  • 存档内容包含:玩家名称、当前所处的游戏阶段、背包数据、XP值、饥饿值、口渴值全部核心状态
  • 游戏启动时自动检测存档文件存在性,询问用户是否加载存档
  • 每完成一个关键选择后自动触发存档,不需要用户手动操作,避免进度丢失

完整修改后代码

# 导入依赖
import random
import replit
import time
import json
import os

# 全局状态变量
backpack = ["手电筒", "一瓶水", "一个苹果", "一条毯子"]
player_name = ""
current_stage = "intro"
xp = 100
hunger = 100
thirst = 100
SAVE_FILE = "save.json"

# 存档函数
def save_game():
    save_data = {
        "player_name": player_name,
        "current_stage": current_stage,
        "backpack": backpack,
        "xp": xp,
        "hunger": hunger,
        "thirst": thirst
    }
    with open(SAVE_FILE, "w", encoding="utf-8") as f:
        json.dump(save_data, f, ensure_ascii=False)

# 读档函数
def load_game():
    global player_name, current_stage, backpack, xp, hunger, thirst
    with open(SAVE_FILE, "r", encoding="utf-8") as f:
        save_data = json.load(f)
    player_name = save_data["player_name"]
    current_stage = save_data["current_stage"]
    backpack = save_data["backpack"]
    xp = save_data["xp"]
    hunger = save_data["hunger"]
    thirst = save_data["thirst"]

def horror_start():
    global current_stage
    current_stage = "horror_start"
    save_game()
    print("随着你深入派对,你开始感到偏头痛")
    time.sleep(1)
    print("g")

def chorus():
    global current_stage, xp, hunger
    current_stage = "chorus"
    save_game()
    time.sleep(1)
    food = input("你肚子饿了,你是要从冰箱拿吃的还是吃背包里的苹果:\n")
    if food in ["苹果", "apple", "Apple"]:
        xp = 110
        hunger = 100
        print("你吃了个苹果,HP涨到110!饥饿值回满")
    elif food in ["冰箱", "fridge", "Fridge"]:
        food2 = input("里面有两块蛋糕和意面,你选哪个?\n")
        if food2 == "意面":
            xp = 179
            hunger = 100
            print("你选了意面,HP涨到179!")
            time.sleep(1)
            print("饥饿值回满!")
        elif food2 in ["蛋糕", "cake", "Cake"]:
            xp = 100
            hunger = 76
            print("你选了蛋糕,吃完肚子有点疼,HP降到100")
            time.sleep(1)
            print("饥饿值只涨了一点,现在76%")
    else:
        xp = 70
        hunger = 70
        print("你决定什么都不吃,HP降到70")
    save_game()
    print("你当前的状态如下:\n")
    print(f"{xp} 是你的XP值")
    print(f"{hunger}% 是你的饥饿值")
    print(f"{thirst}% 是你的口渴值")
    time.sleep(1)
    print("当前内容暂告一段落")
    horror_start()

def secondary():
    global current_stage, xp, thirst, backpack
    current_stage = "secondary"
    save_game()
    time.sleep(1)
    print("门开了...")
    time.sleep(1)
    print("你的朋友在门口欢迎你,手里拿着一盒...巧克力?")
    time.sleep(2)
    print("巧克力看起来发霉了,还有点融化的痕迹")
    time.sleep(2)
    print("你走进房子,热浪拍在你的皮肤上")
    time.sleep(2)
    drinks = input("背景放着音乐,你看到冰箱里有这些饮料:emerge、怪兽、芬达、可乐、百事,你拿哪个?\n")
    if drinks in ["e", "emerge", "Emerge"]:
        emerge = input("你拿了emerge,现在要喝吗?(y/n)\n")
        if emerge == "y":
            xp = 170
            thirst = 100
            print("你喝了emerge,HP涨到170!")
        elif emerge == "n":
            backpack.append("Emerge饮料")
            print("已经放到你的背包里了")
    elif drinks in ["m", "monster", "Monster", "怪兽"]:
        monster = input("你拿了怪兽,现在要喝吗?(y/n)\n")
        if monster == "y":
            xp = 156
            thirst = 100
            print("你喝了怪兽,HP涨到156")
        elif monster == "n":
            backpack.append("怪兽饮料")
            print("已经放到你的背包里了")
    elif drinks in ["f", "fanta", "Fanta", "芬达"]:
        fanta = input("你拿了芬达,现在要喝吗?(y/n)\n")
        if fanta == "y":
            xp = 159
            thirst = 100
            print("你喝了芬达,HP涨到159!")
        elif fanta == "n":
            backpack.append("芬达")
            print("已经放到你的背包里了")
    elif drinks in ["c", "coke", "Coke", "cola", "Cola", "可乐"]:
        coke = input("你拿了可乐,现在要喝吗?(y/n)\n")
        if coke == "y":
            xp = 162
            thirst = 100
            print("你喝了可乐,HP涨到162!")
        elif coke == "n":
            backpack.append("可乐")
            print("已经放到你的背包里了")
    elif drinks in ["p", "pepsi", "Pepsi", "百事"]:
        pepsi = input("你拿了百事,现在要喝吗?(y/n)\n")
        if pepsi == "y":
            xp = 166
            thirst = 100
            print("你喝了百事,HP涨到166!")
        elif pepsi == "n":
            backpack.append("百事")
            print("已经放到你的背包里了")
    save_game()
    print("你当前的XP是:")
    print(xp)
    time.sleep(4)
    replit.clear()
    chorus()

def main():
    global current_stage, backpack
    current_stage = "main"
    save_game()
    print("提示:合理使用道具,操作不当HP随时会下降,游戏全程会提示你的HP状态...")
    time.sleep(4)
    pickup = input("你沿着危险的小路往下走到河谷,发现地上有一瓶闲置的水,但派对上肯定还有更多。你要捡起来吗?(y/n)\n")
    if pickup == "y":
        backpack.append("另一瓶水")
        inv = input("你现在要查看背包吗?(y/n)\n")
        if inv == "y":
            print("你现在背包里的所有物品:", backpack)
            secondary()
        elif inv == "n":
            secondary()
    elif pickup == "n":
        print("你走过沼泽,终于找到了房子,里面灯全亮着,还有音乐传出来。")
        time.sleep(4)
        replit.clear()
        secondary()

def intro():
    global current_stage
    current_stage = "intro"
    save_game()
    time.sleep(1)
    print(r"/  \    /  \ ____ |  |   ____  ____   _____  ____ ")
    print(r"\   \/\/   // __ \|  | _/ ___\/  _ \ /     \_/ __ ")
    print(r" \        /\  ___/|  |_\  \__(  <_> )  Y Y  \  ___/ ")
    print(r"  \__/\  /  \___  >____/\___  >____/|__|_|  /\___>")
    print("加载中...")
    print("小提示:这款游戏藏了很多秘密,从你选的饮料到救赎之路都有彩蛋,准备好开始了吗!")
    time.sleep(4)
    print("控制台即将清空,给你更好的游戏体验")
    time.sleep(5)
    replit.clear()
    print("游戏开始...")
    time.sleep(2)
    print("你下了船踏上潮湿的土地,其他人跟在你身后")
    time.sleep(2)
    print("你好像到了一个荒无人烟的地方,草都是湿的")
    time.sleep(2)
    inventory = input("你有一个背包,要看看里面有什么吗?(y/n)\n")
    if inventory == "n":
        main()
    elif inventory == "y":
        print("你现在背包里的所有物品:", backpack)
        main()

# 游戏启动逻辑
if __name__ == "__main__":
    # 检测是否有存档
    has_save = os.path.exists(SAVE_FILE)
    load_choice = "n"
    if has_save:
        load_choice = input("检测到存在游戏存档,是否加载上次进度?(y/n)\n")
    if load_choice == "y":
        load_game()
        print(f"欢迎回来 {player_name}!正在加载上次进度...")
        time.sleep(2)
        replit.clear()
        # 跳转到对应进度
        if current_stage == "intro":
            intro()
        elif current_stage == "main":
            main()
        elif current_stage == "secondary":
            secondary()
        elif current_stage == "chorus":
            chorus()
        elif current_stage == "horror_start":
            horror_start()
    else:
        # 删除旧存档开新档
        if has_save:
            os.remove(SAVE_FILE)
        start = True
        while start:
            game = input("这是一款恐怖悬疑类游戏,是否继续?(y/n)\n")
            if game == "y":
                print("好的,出发!")
                start = False
                player_name = input("欢迎来到Medolxa冒险家!请输入你的名字,开启这场神秘冒险:\n")
                time.sleep(1)
                print(f"太棒了,欢迎来到Medolxa {player_name}!")
                time.sleep(1)
                replit.clear()
                intro()
            elif game == "n":
                print("游戏已结束,准备好了随时回来!")
                start = False

功能说明

  • 每次玩家完成选择后会自动存档,退出游戏后下次启动会主动询问是否加载进度
  • 所有状态包括背包内容、属性值、当前游戏节点都会完整保存,读取后直接从断点继续
  • 兼容中英文输入选择,降低玩家操作门槛

内容的提问来源于stack exchange,提问作者Exotic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:45:02