第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课:简易成绩单——计算平均分、总分
下节课你将学习:
- 计算多个成绩的总分和平均分
- 格式化输出漂亮的成绩单
- 判断成绩等级
- 添加成绩评语
- 制作完整的成绩管理系统
预习思考:
- 如何计算多个数字的平均值?
- 如何让成绩单看起来更专业?
- 如何根据分数给出不同评语?
💬 给家长的话
亲爱的家长:
今天孩子学习了制作交互式故事,这是将编程与创意结合的有趣方式,能培养逻辑思维和创造力。
孩子今天学会了:
- ✅ 使用条件语句创建分支故事
- ✅ 根据用户选择改变故事走向
- ✅ 管理复杂的故事线和状态
- ✅ 制作互动式冒险游戏
- ✅ 结合编程和创意写作
交互式故事的价值:
| 技能 | 在故事中的应用 | 教育意义 | 能力培养 |
|------|--------------|---------|---------|
| 条件判断 | 根据选择显示不同内容 | 逻辑思维 | 决策能力 |
| 状态管理 | 追踪故事进度和物品 | 系统思维 | 管理能力 |
| 用户交互 | 获取用户选择并响应 | 交互设计 | 用户体验 |
| 故事创作 | 设计情节和结局 | 创造力 | 表达能力 |
您可以这样做:
创意活动:
- 家庭故事:一起创作家庭冒险故事
- 角色扮演:根据故事进行角色扮演
- 故事接龙:轮流添加故事分支
- 编程展示:让孩子展示自己创作的故事
思维训练:
- 讨论:一个好的互动故事需要什么?
- 思考:如何设计有趣的选择和后果?
- 设计:一起创作一个简单的互动故事
- 改进:如何让故事更有吸引力?
温馨提示:
- 互动故事是编程创意的很好体现
- 鼓励孩子发挥想象力
- 通过故事学习编程概念更有趣
- 可以保存优秀的故事作品
🏆 今日成就
完成了今天的学习,你:
📖 学会了制作交互式故事
🎭 掌握了分支故事设计
🎮 创建了冒险游戏
✍️ 结合了编程和创意
🎯 提升了逻辑和创造力
挑战任务:
- 创作自己的侦探破案故事
- 设计时间旅行冒险游戏
- 制作家庭互动故事
- 为朋友创作个性化故事
🌟 编程心法
故事是人类的魔法
编程是逻辑的艺术
当故事遇见编程
就诞生了交互的世界
每个选择都是分叉路
每个决定都改变结局
用代码编织情节
用逻辑构建世界
你是故事的创作者
也是世界的建筑师
记住:编程不仅是冷冰冰的代码,也可以是温暖的故事。用代码创造世界,用逻辑编织梦想!
第17课结束。你现在已经是交互式故事创作者了!
实践任务:
1. 创作侦探破案互动故事
2. 设计时间旅行冒险游戏
3. 制作家庭主题互动故事
4. 为特殊日子创作纪念故事
下节课,让我们学习制作成绩单,用编程帮助学习!
第18课见!📊