如何在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
相关产品推荐
相关产品推荐

