青少年 Python 入门 | 项目实战——「龙之谷」文字冒险游戏

青少年 Python 入门 | 项目实战——「龙之谷」文字冒险游戏

适合人群:Python 入门(建议 5~9 年级),学完 if / while / input / 函数后的综合项目
项目定位:2 课时完整项目(120 分钟),成品是一个可玩的剧情游戏
教学目标if/elif/else 多分支决策树、while 游戏主循环、def 函数模块化、random 随机事件、游戏状态管理


目录

  1. 为什么用文字冒险游戏教编程
  2. 第一课时:搭建游戏骨架
  3. 第二课时:丰富剧情与系统
  4. 完整代码与运行效果
  5. 教学指南
  6. 拓展方向

1. 为什么用文字冒险游戏教编程

课堂中最常见的问题

学生问:“老师,我写这些 forif 到底能干什么?”

文字冒险游戏是最好的答案。它把编程里最核心的几个概念变成了看得见摸得着的体验:

编程概念 在游戏中的体现
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"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青年编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值