第17课:交互式故事书——制作分支故事

🎯 本课目标

  • 使用条件语句创建分支故事
  • 根据用户选择展示不同情节
  • 制作有趣的互动故事
  • 管理复杂的故事线
  • 添加故事选项和结局

📖 趣味引入:成为故事创作者

想象一下:你是一个故事创作者,但这次不是写普通的故事:

  • 🎭 读者可以决定主角的行动
  • 🔀 每个选择都会改变故事走向
  • 🎮 读者是故事的"导演"
  • 📖 同一个故事可以有多种结局

今天,让我们一起成为交互式故事创作者,用Python制作可以互动的故事书!


🔧 第一部分:基础分支故事

1.1 最简单的分支故事

# 最简单的分支故事
print("📖 欢迎来到魔法森林")
print("=" * 30)

print("\n你在森林里遇到两条路:")
print("1. 🌳 左边的阳光小路")
print("2. 🌲 右边的阴暗小径")

choice = input("\n你的选择 (1/2): ")

if choice == "1":
    print("\n你选择了阳光小路...")
    print("阳光透过树叶洒在地上,鸟儿在歌唱。")
    print("你发现了一个装满金币的宝箱!💰")
    print("结局:你成为了富翁!")
    
elif choice == "2":
    print("\n你选择了阴暗小径...")
    print("四周静悄悄的,只有风吹过树叶的声音。")
    print("突然,一只大灰狼跳了出来!🐺")
    print("你赶紧跑回了起点。")
    print("结局:有惊无险,平安回家。")
    
else:
    print("\n你在路口犹豫不决...")
    print("天黑了,你只好原路返回。")
    print("结局:无功而返。")

print("\n📖 故事结束!")

1.2 多级分支故事

# 多级分支故事
print("🧙♂️ 魔法学校入学记")
print("=" * 30)

print("\n欢迎来到魔法学校!今天是入学第一天。")

# 第一级选择
print("\n早餐时间到了,你去餐厅发现:")
print("1. 🍎 水果和麦片(健康选择)")
print("2. 🍰 蛋糕和糖果(甜蜜选择)")

choice1 = input("\n你的选择 (1/2): ")

if choice1 == "1":
    print("\n你选择了健康早餐,感觉精力充沛!")
    print("上午的魔法课你学得很快。")
    
    # 第二级选择
    print("\n午饭时间,你的选择是:")
    print("1. 🥪 三明治和牛奶")
    print("2. 🍔 汉堡和薯条")
    
    choice2 = input("\n你的选择 (1/2): ")
    
    if choice2 == "1":
        print("\n营养午餐让你下午精神饱满!")
        print("魔法考试你得了A+!🎉")
        print("结局:成为优秀魔法学生")
        
    elif choice2 == "2":
        print("\n快餐让你有点困,下午上课打瞌睡。")
        print("魔法考试勉强及格。")
        print("结局:普通魔法学生")
        
    else:
        print("\n你没吃午饭,饿得没力气。")
        print("魔法考试不及格。")
        print("结局:需要补考")

elif choice1 == "2":
    print("\n你吃了太多甜食,上课时肚子疼。")
    print("错过了重要的魔法讲解。")
    
    # 第二级选择
    print("\n下午你想:")
    print("1. 📚 去图书馆补习")
    print("2. ⚽ 去操场玩")
    
    choice2 = input("\n你的选择 (1/2): ")
    
    if choice2 == "1":
        print("\n你在图书馆认真学习,补上了知识。")
        print("魔法考试得了B。")
        print("结局:通过努力赶上进度")
        
    elif choice2 == "2":
        print("\n你玩得太开心,完全忘了学习。")
        print("魔法考试不及格。")
        print("结局:需要从头学起")
        
    else:
        print("\n你在宿舍睡觉,什么也没做。")
        print("魔法考试0分。")
        print("结局:被留级")

else:
    print("\n你睡过了头,没吃早餐。")
    print("饿着肚子上课,什么也学不进去。")
    print("结局:需要重新开始")

print("\n📖 你的魔法学校第一天结束了!")

🎮 第二部分:冒险故事游戏

2.1 森林冒险

# 森林冒险故事
print("🌲 神秘森林大冒险")
print("=" * 40)

# 故事状态
has_map = False
has_torch = False
treasure_found = False
health = 100

print(f"\n你的生命值:❤️ {health}")
print("\n你来到了神秘森林的入口...")

# 故事开始
print("\n你看到地上有一个旧背包,要打开吗?")
print("1. ✅ 打开背包")
print("2. ❌ 绕过去")

choice = input("\n你的选择 (1/2): ")

if choice == "1":
    print("\n你打开了背包,发现一张地图和一个手电筒!")
    has_map = True
    has_torch = True
    print("获得:🗺️ 地图")
    print("获得:🔦 手电筒")
else:
    print("\n你决定不打开背包,继续前进。")

# 继续冒险
print("\n🌳 你走进森林深处...")
print("前面有三条路:")
print("1. 🦌 跟着鹿的脚印")
print("2. 🏞️ 沿着小溪走")
print("3. 🧗 爬上小山")

choice = input("\n你的选择 (1/2/3): ")

if choice == "1":
    print("\n你跟着鹿的脚印,来到一片空地。")
    
    if has_map:
        print("地图显示这里可能有宝藏!")
        print("你要挖掘吗?")
        print("1. ⛏️ 挖掘")
        print("2. 🚶 离开")
        
        dig_choice = input("你的选择 (1/2): ")
        
        if dig_choice == "1":
            print("\n你挖出了一个宝箱!💰")
            treasure_found = True
            health += 20
            print("生命值 +20!")
        else:
            print("\n你离开了空地。")
    else:
        print("你不知道这里有什么,于是离开了。")
        
elif choice == "2":
    print("\n你沿着小溪走,来到一个山洞前。")
    
    if has_torch:
        print("用手电筒照进山洞,发现一个宝箱!")
        treasure_found = True
        health += 10
        print("获得宝藏!生命值 +10")
    else:
        print("山洞太暗了,你不敢进去。")
        health -= 10
        print("被蝙蝠吓到,生命值 -10")
        
elif choice == "3":
    print("\n你爬上小山,看到整个森林。")
    
    if has_map:
        print("结合地图,你发现了宝藏的位置!")
        treasure_found = True
        health += 15
        print("找到宝藏!生命值 +15")
    else:
        print("风景很美,但没有发现什么特别的东西。")

# 结局
print(f"\n{'='*40}")
print("🎮 冒险结束!")
print(f"{'='*40}")

print(f"\n📊 冒险统计:")
print(f"  最终生命值:❤️ {health}")
print(f"  获得地图:{'✅' if has_map else '❌'}")
print(f"  获得手电筒:{'✅' if has_torch else '❌'}")
print(f"  找到宝藏:{'✅' if treasure_found else '❌'}")

print(f"\n📖 结局:")

if treasure_found and health >= 100:
    print("🏆 完美结局:你带着宝藏健康归来!")
elif treasure_found:
    print("💰 成功结局:你找到了宝藏!")
elif health >= 80:
    print("😊 平安结局:你平安回家。")
else:
    print("💪 努力结局:下次会更幸运!")

2.2 太空探险

# 太空探险故事
print("🚀 星际探险家")
print("=" * 40)

# 飞船状态
fuel = 100
oxygen = 100
credits = 0
discoveries = []

print("\n欢迎,星际探险家!")
print("你的任务:探索未知星系")

while fuel > 0 and oxygen > 0:
    print(f"\n{'='*30}")
    print(f"飞船状态:")
    print(f"⛽ 燃料:{fuel}%")
    print(f"💨 氧气:{oxygen}%")
    print(f"💰 信用币:{credits}")
    print(f"🔭 发现数:{len(discoveries)}")
    print(f"{'='*30}")
    
    print("\n前方有三个星球:")
    print("1. 🪐 绿色星球 - 可能适合居住")
    print("2. 🔴 红色星球 - 可能有矿物")
    print("3. 🔵 蓝色星球 - 可能有水源")
    print("4. 🏠 返回基地(结束探险)")
    
    choice = input("\n选择目的地 (1-4): ")
    
    if choice == "4":
        print("\n返回基地...")
        break
    
    # 消耗资源
    fuel -= 20
    oxygen -= 10
    
    if choice == "1":
        print("\n🚀 抵达绿色星球...")
        print("这里空气清新,有奇怪的植物。")
        
        print("\n你要:")
        print("1. 🌿 采集植物样本")
        print("2. 🏃 快速扫描后离开")
        
        action = input("你的选择 (1/2): ")
        
        if action == "1":
            discoveries.append("外星植物样本")
            credits += 50
            print("获得:外星植物样本")
            print("信用币 +50")
        else:
            print("进行了基础扫描。")
            
    elif choice == "2":
        print("\n🚀 抵达红色星球...")
        print("这里有很多矿物,但空气稀薄。")
        
        print("\n你要:")
        print("1. ⛏️ 开采矿物")
        print("2. 🚶 探索地表")
        
        action = input("你的选择 (1/2): ")
        
        if action == "1":
            oxygen -= 10  # 额外消耗
            discoveries.append("稀有矿物")
            credits += 100
            print("获得:稀有矿物")
            print("信用币 +100")
        else:
            discoveries.append("星球地图")
            print("获得:星球地图")
            
    elif choice == "3":
        print("\n🚀 抵达蓝色星球...")
        print("这里有大量水源!")
        
        print("\n你要:")
        print("1. 💧 采集水样")
        print("2. 🏊 探测水下")
        
        action = input("你的选择 (1/2): ")
        
        if action == "1":
            discoveries.append("外星水样")
            credits += 75
            print("获得:外星水样")
            print("信用币 +75")
        else:
            fuel -= 10  # 额外消耗
            discoveries.append("水下生物数据")
            credits += 120
            print("发现水下生物!信用币 +120")
    
    else:
        print("\n无效选择,在原地停留。")
        fuel -= 5
    
    # 检查资源
    if fuel <= 0:
        print("\n⚠️ 燃料耗尽!")
        break
    if oxygen <= 0:
        print("\n⚠️ 氧气耗尽!")
        break

# 结局
print(f"\n{'='*40}")
print("🚀 探险结束!")
print(f"{'='*40}")

print(f"\n📊 最终统计:")
print(f"  剩余燃料:{max(0, fuel)}%")
print(f"  剩余氧气:{max(0, oxygen)}%")
print(f"  信用币:{credits}")
print(f"  发现数量:{len(discoveries)}")

if discoveries:
    print(f"\n🔭 你的发现:")
    for i, discovery in enumerate(discoveries, 1):
        print(f"  {i}. {discovery}")

print(f"\n🎯 结局评价:")

if len(discoveries) >= 3 and credits >= 200:
    print("🏆 传奇探险家:伟大的发现!")
elif len(discoveries) >= 2 and credits >= 100:
    print("⭐ 优秀探险家:很有收获!")
elif len(discoveries) >= 1:
    print("👍 合格探险家:完成任务!")
elif fuel <= 0 or oxygen <= 0:
    print("💀 失败:资源耗尽!")
else:
    print("🆗 新手探险家:安全返回。")

🎨 第三部分:故事创作工具

3.1 故事编辑器

# 交互式故事编辑器
print("✍️ 交互式故事编辑器")
print("=" * 50)

# 故事数据结构
story = {
    "title": "",
    "author": "",
    "scenes": [],
    "endings": []
}

def create_scene(scene_number):
    """创建一个场景"""
    print(f"\n📝 创建场景 {scene_number}")
    print("-" * 30)
    
    scene = {
        "id": scene_number,
        "text": "",
        "choices": []
    }
    
    scene["text"] = input("场景描述:")
    
    # 添加选择
    choice_count = int(input("有几个选择?(1-3):"))
    
    for i in range(choice_count):
        print(f"\n选择 {i+1}:")
        choice_text = input("  选择文本:")
        next_scene = input("  下一个场景编号(0表示结束):")
        
        scene["choices"].append({
            "text": choice_text,
            "next": int(next_scene) if next_scene.isdigit() else 0
        })
    
    return scene

def create_ending(ending_number):
    """创建一个结局"""
    print(f"\n🎯 创建结局 {ending_number}")
    print("-" * 30)
    
    ending = {
        "id": ending_number,
        "text": "",
        "type": ""
    }
    
    ending["text"] = input("结局描述:")
    
    print("\n结局类型:")
    print("1. 好结局")
    print("2. 坏结局")
    print("3. 中性结局")
    
    type_choice = input("选择类型 (1-3): ")
    
    if type_choice == "1":
        ending["type"] = "好结局"
    elif type_choice == "2":
        ending["type"] = "坏结局"
    else:
        ending["type"] = "中性结局"
    
    return ending

# 主编辑功能
print("欢迎使用交互式故事编辑器!")
print("\n首先,输入故事基本信息:")

story["title"] = input("故事标题:")
story["author"] = input("作者:")

# 创建场景
scenes_count = int(input("\n要创建几个场景?(1-5):"))
for i in range(scenes_count):
    story["scenes"].append(create_scene(i + 1))

# 创建结局
endings_count = int(input("\n要创建几个结局?(1-3):"))
for i in range(endings_count):
    story["endings"].append(create_ending(i + 1))

# 预览故事
print(f"\n{'='*50}")
print("📖 故事预览")
print(f"{'='*50}")

print(f"\n标题:{story['title']}")
print(f"作者:{story['author']}")

print(f"\n📋 场景列表:")
for scene in story["scenes"]:
    print(f"\n场景 {scene['id']}:")
    print(f"  {scene['text']}")
    
    for choice in scene["choices"]:
        print(f"  → {choice['text']} [前往场景 {choice['next']}]")

print(f"\n🎯 结局列表:")
for ending in story["endings"]:
    print(f"\n结局 {ending['id']} [{ending['type']}]:")
    print(f"  {ending['text']}")

# 保存故事
save = input("\n是否保存故事?(是/否): ")
if save.lower() in ["是", "yes", "y"]:
    filename = f"{story['title']}_故事.txt"
    
    with open(filename, "w", encoding="utf-8") as f:
        f.write(f"标题:{story['title']}\n")
        f.write(f"作者:{story['author']}\n\n")
        
        f.write("场景:\n")
        for scene in story["scenes"]:
            f.write(f"\n场景 {scene['id']}:\n")
            f.write(f"{scene['text']}\n")
            
            for choice in scene["choices"]:
                f.write(f"  {choice['text']} -> 场景 {choice['next']}\n")
        
        f.write("\n结局:\n")
        for ending in story["endings"]:
            f.write(f"\n结局 {ending['id']} [{ending['type']}]:\n")
            f.write(f"{ending['text']}\n")
    
    print(f"✅ 故事已保存到:{filename}")

3.2 简单的故事播放器

# 简单故事播放器
print("📖 故事播放器")
print("=" * 40)

# 预定义的故事
simple_story = {
    "title": "魔法学校的一天",
    "scenes": {
        1: {
            "text": "早上,你在魔法学校醒来。窗外阳光明媚。",
            "choices": [
                {"text": "起床吃早餐", "next": 2},
                {"text": "再睡一会儿", "next": 3}
            ]
        },
        2: {
            "text": "你吃了营养早餐,精神饱满地去上课。",
            "choices": [
                {"text": "认真听课", "next": 4},
                {"text": "偷偷玩魔法", "next": 5}
            ]
        },
        3: {
            "text": "你睡过了头,匆忙跑去教室。",
            "choices": [
                {"text": "向老师道歉", "next": 6},
                {"text": "悄悄溜进去", "next": 7}
            ]
        },
        4: {
            "text": "你学到了新魔法,老师表扬了你!",
            "choices": [
                {"text": "练习魔法", "next": 8},
                {"text": "帮助同学", "next": 9}
            ]
        }
    },
    "endings": {
        5: "你玩魔法时出了错,被罚打扫教室。",
        6: "老师原谅了你,但要你补上作业。",
        7: "你被发现了,被罚站一节课。",
        8: "你成为魔法高手,大家都羡慕你!",
        9: "你帮助了同学,交到了新朋友。"
    }
}

# 播放故事
print(f"🎬 开始故事:{simple_story['title']}")
print("=" * 40)

current_scene = 1
visited_scenes = []

while current_scene in simple_story["scenes"]:
    if current_scene in visited_scenes:
        print("\n(回到这里...)")
    
    scene = simple_story["scenes"][current_scene]
    visited_scenes.append(current_scene)
    
    print(f"\n{scene['text']}")
    
    # 显示选择
    print(f"\n你的选择:")
    for i, choice in enumerate(scene["choices"], 1):
        print(f"{i}. {choice['text']}")
    
    # 获取用户选择
    while True:
        try:
            user_choice = int(input(f"\n选择 (1-{len(scene['choices'])}): "))
            if 1 <= user_choice <= len(scene["choices"]):
                current_scene = scene["choices"][user_choice-1]["next"]
                break
            else:
                print("❌ 请选择有效的选项!")
        except ValueError:
            print("❌ 请输入数字!")

# 显示结局
if current_scene in simple_story["endings"]:
    print(f"\n📖 结局:")
    print(f"{simple_story['endings'][current_scene]}")
else:
    print("\n📖 故事中断了...")

print(f"\n🎬 故事结束!")
print(f"你经历了 {len(visited_scenes)} 个场景。")

🎪 第四部分:综合故事项目

项目1:侦探破案故事

# 侦探破案故事
print("🕵️♂️ 博物馆失窃案")
print("=" * 50)

# 游戏状态
clues = []
suspects = []
correct_suspect = "馆长"
score = 0

print("\n深夜,博物馆警报大作!")
print("镇馆之宝'星光宝石'被盗了!")
print("你,名侦探小柯,被请来调查此案。")

# 第一场景:现场调查
print(f"\n{'='*30}")
print("现场调查")
print(f"{'='*30}")

print("\n你来到案发现场,发现:")
print("1. 💎 展柜玻璃被打碎")
print("2. 👣 地上有奇怪的脚印")
print("3. 🔍 窗台有泥土")

choice = input("\n先调查什么?(1-3): ")

if choice == "1":
    print("\n你检查展柜,发现玻璃是从外面打碎的。")
    clues.append("玻璃外碎")
    score += 10
elif choice == "2":
    print("\n脚印显示盗贼穿44码鞋,身高约180cm。")
    clues.append("44码脚印")
    score += 10
else:
    print("\n泥土是博物馆花园的特有土壤。")
    clues.append("花园泥土")
    score += 10

# 第二场景:询问嫌疑人
print(f"\n{'='*30}")
print("询问嫌疑人")
print(f"{'='*30}")

print("\n有三名嫌疑人:")
print("1. 👨💼 馆长 - 最后离开博物馆")
print("2. 👮 保安 - 值班时打瞌睡")
print("3. 🧹 清洁工 - 案发时在附近")

suspects = ["馆长", "保安", "清洁工"]

while len(suspects) > 1:
    print(f"\n剩余嫌疑人:{', '.join(suspects)}")
    print("\n询问谁?")
    
    for i, suspect in enumerate(suspects, 1):
        print(f"{i}. {suspect}")
    print(f"{len(suspects)+1}. 我已经知道凶手了!")
    
    choice = input(f"\n选择 (1-{len(suspects)+1}): ")
    
    if choice == str(len(suspects)+1):
        break
    
    try:
        suspect_index = int(choice) - 1
        if 0 <= suspect_index < len(suspects):
            suspect = suspects[suspect_index]
            
            if suspect == "馆长":
                print(f"\n询问{subject}:")
                print("馆长:'我昨晚在办公室整理文件。'")
                print("但你注意到他鞋底有花园的泥土。")
                clues.append("馆长鞋泥")
                score += 20
                
            elif suspect == "保安":
                print(f"\n询问{subject}:")
                print("保安:'我太累了,不小心睡着了。'")
                print("他穿42码鞋,与脚印不符。")
                suspects.remove("保安")
                score += 10
                
            else:  # 清洁工
                print(f"\n询问{subject}:")
                print("清洁工:'我在打扫厕所,什么也没看见。'")
                print("他身高只有165cm,与脚印推断不符。")
                suspects.remove("清洁工")
                score += 10
    except:
        print("❌ 选择无效!")

# 第三场景:指认凶手
print(f"\n{'='*30}")
print("指认凶手")
print(f"{'='*30}")

if len(suspects) == 1:
    print(f"\n只剩一个嫌疑人:{suspects[0]}")
    guess = suspects[0]
else:
    print("\n你认为凶手是谁?")
    for i, suspect in enumerate(["馆长", "保安", "清洁工"], 1):
        print(f"{i}. {suspect}")
    
    choice = input("\n选择 (1-3): ")
    
    if choice == "1":
        guess = "馆长"
    elif choice == "2":
        guess = "保安"
    else:
        guess = "清洁工"

# 结局
print(f"\n{'='*50}")
print("🕵️♂️ 真相大白")
print(f"{'='*50}")

print(f"\n你指认的凶手:{guess}")
print(f"真正的凶手:{correct_suspect}")

if guess == correct_suspect:
    score += 50
    print("\n✅ 正确!凶手就是馆长!")
    print("动机:他想卖掉宝石还赌债。")
    print("证据:鞋底的花园泥土和44码鞋码。")
    
    print(f"\n🎉 恭喜你破案了!")
    print("博物馆为你颁发荣誉侦探奖!🏆")
else:
    print(f"\n❌ 错误!真凶是{correct_suspect}!")
    print(f"{guess}是无辜的。")
    print("馆长逃脱了,宝石再也找不回来了...")

# 游戏统计
print(f"\n📊 游戏统计:")
print(f"  得分:{score}/100")
print(f"  收集线索:{len(clues)}个")
print(f"  正确指认:{'是' if guess == correct_suspect else '否'}")

if score >= 80:
    print(f"\n🏅 评价:神探级别!")
elif score >= 60:
    print(f"\n🥈 评价:优秀侦探!")
elif score >= 40:
    print(f"\n🥉 评价:合格侦探!")
else:
    print(f"\n💪 评价:新手侦探,继续努力!")

print(f"\n🔍 你收集的线索:")
for clue in clues:
    print(f"  • {clue}")

项目2:时间旅行冒险

# 时间旅行冒险
print("⏳ 时间旅行者的冒险")
print("=" * 50)

# 游戏状态
time_periods_visited = []
items_collected = []
current_time = "现代"
time_energy = 100
history_knowledge = 0

print("\n🔬 你发明了时间机器!")
print("但机器需要'历史能量'才能运行。")
print("你的任务:穿越时空,收集历史知识!")

while time_energy > 0 and len(time_periods_visited) < 5:
    print(f"\n{'='*30}")
    print(f"当前时间:{current_time}")
    print(f"⏳ 时间能量:{time_energy}")
    print(f"📚 历史知识:{history_knowledge}")
    print(f"📦 收集物品:{len(items_collected)}个")
    print(f"{'='*30}")
    
    # 显示可穿越的时间
    available_times = []
    
    if current_time == "现代":
        print("\n选择穿越到:")
        print("1. 🏺 古埃及(公元前3000年)")
        print("2. ⚔️ 中世纪欧洲(1000年)")
        print("3. 🚀 未来世界(3000年)")
        print("4. 🏠 结束旅行")
        
        available_times = ["古埃及", "中世纪", "未来"]
        
    elif current_time == "古埃及":
        print(f"\n你在古埃及金字塔前。")
        print("选择:")
        print("1. 🔍 探索金字塔")
        print("2. 👑 见法老")
        print("3. ⏳ 返回现代")
        
    elif current_time == "中世纪":
        print(f"\n你在中世纪城堡中。")
        print("选择:")
        print("1. 🏹 参加射箭比赛")
        print("2. 📜 参观图书馆")
        print("3. ⏳ 返回现代")
        
    elif current_time == "未来":
        print(f"\n你在未来城市。")
        print("选择:")
        print("1. 🤖 参观机器人工厂")
        print("2. 🚀 体验太空电梯")
        print("3. ⏳ 返回现代")
    
    choice = input(f"\n你的选择 (1-{'4' if current_time == '现代' else '3'}): ")
    
    # 处理选择
    if current_time == "现代":
        if choice == "4":
            print("\n结束时间旅行...")
            break
        elif choice in ["1", "2", "3"]:
            # 穿越消耗能量
            time_energy -= 20
            
            if choice == "1":
                current_time = "古埃及"
                time_periods_visited.append("古埃及")
                print("\n⏳ 穿越到古埃及!")
                print("你看到巨大的金字塔和尼罗河。")
                
            elif choice == "2":
                current_time = "中世纪"
                time_periods_visited.append("中世纪")
                print("\n⏳ 穿越到中世纪!")
                print("城堡、骑士、还有集市...")
                
            elif choice == "3":
                current_time = "未来"
                time_periods_visited.append("未来")
                print("\n⏳ 穿越到未来!")
                print("飞行汽车、机器人在天空穿梭!")
    
    elif current_time in ["古埃及", "中世纪", "未来"]:
        if choice == "3":
            # 返回现代
            current_time = "现代"
            print(f"\n⏳ 返回现代")
            time_energy -= 10
            
        elif choice == "1":
            # 探索选项1
            if current_time == "古埃及":
                print("\n你进入金字塔,发现:")
                print("1. 法老的黄金面具")
                print("2. 古老的莎草纸")
                
                find = input("带什么回去?(1/2): ")
                
                if find == "1":
                    items_collected.append("黄金面具")
                    history_knowledge += 30
                    print("获得:黄金面具 🎭")
                else:
                    items_collected.append("莎草纸")
                    history_knowledge += 20
                    print("获得:莎草纸 📜")
                    
            elif current_time == "中世纪":
                print("\n你赢得射箭比赛!奖品:")
                print("1. 银制奖杯")
                print("2. 骑士勋章")
                
                find = input("选择奖品?(1/2): ")
                
                if find == "1":
                    items_collected.append("银制奖杯")
                    history_knowledge += 25
                    print("获得:银制奖杯 🏆")
                else:
                    items_collected.append("骑士勋章")
                    history_knowledge += 15
                    print("获得:骑士勋章 🎖️")
                    
            elif current_time == "未来":
                print("\n机器人工厂送你:")
                print("1. 微型机器人")
                print("2. 未来芯片")
                
                find = input("选择哪个?(1/2): ")
                
                if find == "1":
                    items_collected.append("微型机器人")
                    history_knowledge += 40
                    print("获得:微型机器人 🤖")
                else:
                    items_collected.append("未来芯片")
                    history_knowledge += 35
                    print("获得:未来芯片 💿")
            
        elif choice == "2":
            # 探索选项2
            if current_time == "古埃及":
                print("\n你见到了法老,学到了:")
                print("• 金字塔建造方法")
                print("• 象形文字知识")
                history_knowledge += 25
                time_energy += 5
                print("知识+25,能量+5")
                
            elif current_time == "中世纪":
                print("\n在图书馆你读到:")
                print("• 骑士的准则")
                print("• 中世纪历史")
                history_knowledge += 20
                time_energy += 5
                print("知识+20,能量+5")
                
            elif current_time == "未来":
                print("\n乘坐太空电梯,你看到:")
                print("• 地球全景")
                print("• 太空站构造")
                history_knowledge += 30
                time_energy += 5
                print("知识+30,能量+5")

# 游戏结束
print(f"\n{'='*50}")
print("⏳ 时间旅行结束")
print(f"{'='*50}")

print(f"\n📊 旅行统计:")
print(f"  访问时期:{len(time_periods_visited)}个")
print(f"  剩余能量:{time_energy}")
print(f"  历史知识:{history_knowledge}")
print(f"  收集物品:{len(items_collected)}个")

if time_periods_visited:
    print(f"\n🌍 访问过的时期:")
    for period in time_periods_visited:
        print(f"  • {period}")

if items_collected:
    print(f"\n📦 收集的物品:")
    for item in items_collected:
        print(f"  • {item}")

print(f"\n🎯 结局评价:")

if history_knowledge >= 100:
    print("🏆 时间博士:你成为了历史专家!")
elif history_knowledge >= 70:
    print("⭐ 历史学家:对历史有了深刻理解!")
elif history_knowledge >= 40:
    print("👍 旅行家:有趣的时空之旅!")
elif time_energy <= 0:
    print("⚠️ 能量耗尽:时间机器没电了!")
else:
    print("🆗 新手旅行者:第一次尝试还不错!")

📅 下节课预告

第18课:简易成绩单——计算平均分、总分

下节课你将学习:

  1. 计算多个成绩的总分和平均分
  2. 格式化输出漂亮的成绩单
  3. 判断成绩等级
  4. 添加成绩评语
  5. 制作完整的成绩管理系统

预习思考

  1. 如何计算多个数字的平均值?
  2. 如何让成绩单看起来更专业?
  3. 如何根据分数给出不同评语?

💬 给家长的话

亲爱的家长

今天孩子学习了制作交互式故事,这是将编程与创意结合的有趣方式,能培养逻辑思维和创造力。

孩子今天学会了

  1. ✅ 使用条件语句创建分支故事
  2. ✅ 根据用户选择改变故事走向
  3. ✅ 管理复杂的故事线和状态
  4. ✅ 制作互动式冒险游戏
  5. ✅ 结合编程和创意写作

交互式故事的价值

| 技能 | 在故事中的应用 | 教育意义 | 能力培养 |

|------|--------------|---------|---------|

| 条件判断 | 根据选择显示不同内容 | 逻辑思维 | 决策能力 |

| 状态管理 | 追踪故事进度和物品 | 系统思维 | 管理能力 |

| 用户交互 | 获取用户选择并响应 | 交互设计 | 用户体验 |

| 故事创作 | 设计情节和结局 | 创造力 | 表达能力 |

您可以这样做

创意活动

  1. 家庭故事:一起创作家庭冒险故事
  2. 角色扮演:根据故事进行角色扮演
  3. 故事接龙:轮流添加故事分支
  4. 编程展示:让孩子展示自己创作的故事

思维训练

  1. 讨论:一个好的互动故事需要什么?
  2. 思考:如何设计有趣的选择和后果?
  3. 设计:一起创作一个简单的互动故事
  4. 改进:如何让故事更有吸引力?

温馨提示

  • 互动故事是编程创意的很好体现
  • 鼓励孩子发挥想象力
  • 通过故事学习编程概念更有趣
  • 可以保存优秀的故事作品

🏆 今日成就

完成了今天的学习,你:

📖 学会了制作交互式故事

🎭 掌握了分支故事设计

🎮 创建了冒险游戏

✍️ 结合了编程和创意

🎯 提升了逻辑和创造力

挑战任务

  1. 创作自己的侦探破案故事
  2. 设计时间旅行冒险游戏
  3. 制作家庭互动故事
  4. 为朋友创作个性化故事

🌟 编程心法

故事是人类的魔法
编程是逻辑的艺术
当故事遇见编程
就诞生了交互的世界
每个选择都是分叉路
每个决定都改变结局
用代码编织情节
用逻辑构建世界
你是故事的创作者
也是世界的建筑师

记住:编程不仅是冷冰冰的代码,也可以是温暖的故事。用代码创造世界,用逻辑编织梦想!


第17课结束。你现在已经是交互式故事创作者了!

实践任务:

1. 创作侦探破案互动故事

2. 设计时间旅行冒险游戏

3. 制作家庭主题互动故事

4. 为特殊日子创作纪念故事

下节课,让我们学习制作成绩单,用编程帮助学习!

第18课见!📊