青少年 Python 入门 | 项目实战——「龙之谷」文字冒险游戏
青少年 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 分钟内做出一个能跑的东西。学生看到自己的选择真的影响剧情走向,动力就来了。""" 龙之谷 — 文字冒险游戏(第一课时版本) """defscene_start():"""开场场景"""print()print(" ╔══════════════════════════════════╗")print(" ║ 龙 之 谷 ║")print(" ║ Dragon Valley ║")print(" ╚══════════════════════════════════╝")print()print(" 你是来自村庄的年轻冒险者。")print(" 传说龙之谷深处藏着一颗「龙晶宝石」,")print(" 得到它的人可以实现一个愿望。")print()print(" 你站在山谷入口。前方有两条路——")print(" 1. 幽暗森林(阴暗但路程短)")print(" 2. 河岸小道(明亮但路程长)")print()choice=input(" 你的选择(1/2):")ifchoice=="1":scene_dark_forest()elifchoice=="2":scene_river_path()else:print(" 你犹豫不决,站在原地...天黑了。")print(" [游戏结束] 冒险还没开始就结束了。")return# 结束游戏defscene_dark_forest():"""幽暗森林场景"""print()print(" --- 幽暗森林 ---")print(" 树木遮天蔽日,光线昏暗。")print(" 前方传来低沉的吼声——是野狼!")print()print(" 1. 拔剑战斗")print(" 2. 悄悄绕过去")print(" 3. 扔一块肉引诱它")print()choice=input(" 你的选择(1/2/3):")ifchoice=="1":print()print(" 你拔出剑,经过一番搏斗,赶走了野狼。")print(" 虽然受了点轻伤,但你继续前进...")scene_dragon_cave()elifchoice=="2":print()print(" 你蹑手蹑脚试图绕过去——")print(" 咔嚓!踩断了一根树枝。野狼扑了过来!")print(" 你狼狈地逃出了森林。")print(" [游戏结束] 绕路失败。")elifchoice=="3":print()print(" 你把肉扔向远处,野狼追了过去。")print(" 你趁机穿过森林,毫发无伤!")scene_dragon_cave()else:print(" 野狼不等你犹豫,直接扑了过来!")print(" [游戏结束]")defscene_river_path():"""河岸小道场景"""print()print(" --- 河岸小道 ---")print(" 沿着河流前进,阳光洒在水面上,很美。")print(" 前方有一位老人在钓鱼。")print()print(" 1. 上前搭话")print(" 2. 不理他,继续走")print()choice=input(" 你的选择(1/2):")ifchoice=="1":print()print(" 老人抬起头,微笑着说:")print(" 「年轻人,送你一件小礼物。」")print(" 他递给你一个【护身符】。")print(" (获得道具:护身符——可以抵挡一次伤害)")scene_dragon_cave()elifchoice=="2":print()print(" 你从老人身边走过,他没有抬头。")print(" 走了一段路,你发现前面就是龙穴了。")scene_dragon_cave()else:print(" 你一脚踩滑,掉进了河里...")print(" [游戏结束]")defscene_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"