青少年 Python 入门 | 项目实战——「龙之谷」文字冒险游戏
适合人群:Python 入门(建议 5~9 年级),学完
if/while/input/ 函数后的综合项目
项目定位:2 课时完整项目(120 分钟),成品是一个可玩的剧情游戏
教学目标:if/elif/else多分支决策树、while游戏主循环、def函数模块化、random随机事件、游戏状态管理
目录
1. 为什么用文字冒险游戏教编程
课堂中最常见的问题
学生问:“老师,我写这些
for和if到底能干什么?”
文字冒险游戏是最好的答案。它把编程里最核心的几个概念变成了看得见摸得着的体验:
| 编程概念 | 在游戏中的体现 |
|---|---|
if/elif/else |
玩家选择 A 路还是 B 路?不同选择不同剧情 |
while 循环 |
游戏主循环——只要没死没通关就一直玩 |
| 变量 | 生命值、金币、背包物品——全是变量 |
| 函数 | 战斗函数、商店函数、探索函数——各管一摊 |
random |
战斗伤害随机、宝箱掉落随机、遇到怪物随机 |
list / dict |
背包系统、怪物图鉴 |
本节课的成品
学生写完后的游戏运行起来是这样的:
[龙之谷] 文字冒险
你是一名年轻的冒险者,来到传说中的龙之谷寻找宝藏。
眼前有两条路——
1. 穿过幽暗的森林
2. 沿着河岸前进
你的选择:1
(进入森林...)
前方出现一只野狼!它看起来很饿。
1. 战斗
2. 逃跑
你的选择:
2. 第一课时:搭建游戏骨架
2.1 最小可玩版本——三个场景串联
第一课的目标不是写完整个游戏,而是在 30 分钟内做出一个能跑的东西。学生看到自己的选择真的影响剧情走向,动力就来了。
"""
龙之谷 — 文字冒险游戏(第一课时版本)
"""
def scene_start():
"""开场场景"""
print()
print(" ╔══════════════════════════════════╗")
print(" ║ 龙 之 谷 ║")
print(" ║ Dragon Valley ║")
print(" ╚══════════════════════════════════╝")
print()
print(" 你是来自村庄的年轻冒险者。")
print(" 传说龙之谷深处藏着一颗「龙晶宝石」,")
print(" 得到它的人可以实现一个愿望。")
print()
print(" 你站在山谷入口。前方有两条路——")
print(" 1. 幽暗森林(阴暗但路程短)")
print(" 2. 河岸小道(明亮但路程长)")
print()
choice = input(" 你的选择(1/2):")
if choice == "1":
scene_dark_forest()
elif choice == "2":
scene_river_path()
else:
print(" 你犹豫不决,站在原地...天黑了。")
print(" [游戏结束] 冒险还没开始就结束了。")
return # 结束游戏
def scene_dark_forest():
"""幽暗森林场景"""
print()
print(" --- 幽暗森林 ---")
print(" 树木遮天蔽日,光线昏暗。")
print(" 前方传来低沉的吼声——是野狼!")
print()
print(" 1. 拔剑战斗")
print(" 2. 悄悄绕过去")
print(" 3. 扔一块肉引诱它")
print()
choice = input(" 你的选择(1/2/3):")
if choice == "1":
print()
print(" 你拔出剑,经过一番搏斗,赶走了野狼。")
print(" 虽然受了点轻伤,但你继续前进...")
scene_dragon_cave()
elif choice == "2":
print()
print(" 你蹑手蹑脚试图绕过去——")
print(" 咔嚓!踩断了一根树枝。野狼扑了过来!")
print(" 你狼狈地逃出了森林。")
print(" [游戏结束] 绕路失败。")
elif choice == "3":
print()
print(" 你把肉扔向远处,野狼追了过去。")
print(" 你趁机穿过森林,毫发无伤!")
scene_dragon_cave()
else:
print(" 野狼不等你犹豫,直接扑了过来!")
print(" [游戏结束]")
def scene_river_path():
"""河岸小道场景"""
print()
print(" --- 河岸小道 ---")
print(" 沿着河流前进,阳光洒在水面上,很美。")
print(" 前方有一位老人在钓鱼。")
print()
print(" 1. 上前搭话")
print(" 2. 不理他,继续走")
print()
choice = input(" 你的选择(1/2):")
if choice == "1":
print()
print(" 老人抬起头,微笑着说:")
print(" 「年轻人,送你一件小礼物。」")
print(" 他递给你一个【护身符】。")
print(" (获得道具:护身符——可以抵挡一次伤害)")
scene_dragon_cave()
elif choice == "2":
print()
print(" 你从老人身边走过,他没有抬头。")
print(" 走了一段路,你发现前面就是龙穴了。")
scene_dragon_cave()
else:
print(" 你一脚踩滑,掉进了河里...")
print(" [游戏结束]")
def scene_dragon_cave():
"""龙穴——最终场景"""
print()
print(" --- 龙穴 ---")
print(" 你终于来到了龙穴入口。")
print(" 洞穴深处,一颗蓝色的宝石在发光——")
print(" 那就是传说中的「龙晶宝石」!")
print()
print(" (第一课时到此结束——宝石已经看到了!)")
print(" (下节课我们继续写龙穴的剧情。)")
print()
# 游戏入口
scene_start()
2.2 学生完成后的感受
运行完后,学生会发现:
- 选 1 和选 2 走的是完全不同的剧情
- 同一场景里选不同选项也有不同结果
- 有的选择会导致"游戏结束",有的能走到最后
- 从入口到龙穴,他们刚刚构建了一个决策树
此时引入概念水到渠成:
“你刚刚写的,在编程里叫分支结构。每一个
if都是剧情的一个分叉口。”
2.3 理解决策树——画出游戏地图
让学生拿出纸笔,画一张游戏流程图:
入口
/ \
森林 河岸
/ | \ / \
战斗 绕路 投食 搭话 无视
| | | | |
龙穴 死亡 龙穴 龙穴 龙穴
这张图就是程序的控制流。每个岔路口对应一个 if/elif/else。
3. 第二课时:丰富剧情与系统
第一课时结束后,学生已经有了一个能跑的骨架。第二课时的目标是加三个东西:战斗系统、背包系统、随机事件。
3.1 玩家状态——用字典存"我是谁"
player = {
"name": "冒险者",
"hp": 100, # 生命值
"max_hp": 100,
"gold": 0, # 金币
"items": [], # 背包(列表)
"has_amulet"

1444

被折叠的 条评论
为什么被折叠?



