Files
AICODE2026/3-lessons/AICODE-06/AICODE06-07 魔幻俄罗斯方块(下).md
Rocky 4f95086d55 feat: 新增 AICODE-06 魔幻俄罗斯方块第6-7课教案及 demo
- AICODE06-06 魔幻俄罗斯方块(上):工程师思维启蒙,Level 0 需求文档 + 压力测试 + 结果溯源
- AICODE06-07 魔幻俄罗斯方块(下):增量需求文档 + 魔改升级 + 成果路演
- demo/demo-level0.html:完整基础俄罗斯方块(含虚影、暂停、升级)
- demo/demo-level1-bomb.html:炸弹方块示例(含粒子爆炸特效)

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 14:37:58 +02:00

18 KiB
Raw Blame History

课时, 主题, 核心能力, 核心工具, 时长, 透明化层级, 适用路线
课时 主题 核心能力 核心工具 时长 透明化层级 适用路线
7 魔幻俄罗斯方块(下)— 魔改升级 + 成果路演
拆解力
共创力
表达力
Kimi 2.5
90分钟 过程层 AICODE-06

1. 课程目标

知识目标:

  • 理解「功能扩展」的本质:在已有基础上,通过新一轮需求文档 + 生成 + 验收来增加功能
  • 理解「需求冲突」的概念:新功能的规则可能跟已有功能产生交互,需要提前想清楚
  • 理解路演不只是展示结果,而是展示「设计决策」——你为什么这样设计

能力目标:

  • 能独立完成「想法 → 需求文档 → 压力测试 → 生成 → 验收 → 迭代」完整流程(共创力)
  • 能在验收时主动测试功能之间的交互,发现潜在冲突(拆解力)
  • 能用 3 分钟路演清楚说明:加了什么功能、需求文档改了几版、遇到什么问题怎么解决的(表达力)

情感目标:

  • 体验「每个人的游戏都不一样」带来的成就感和个性化自豪感
  • 建立「我能用需求文档控制 AI 做出我想要的东西」的自信
  • 感受从「做一个大家都一样的游戏」到「做一个只属于我的游戏」的跨越

2. 核心概念与误概念预设

核心概念认知层级:

概念 学生类比 认知层级
功能扩展 在基础款手机上加功能——不是重新做一台手机,而是在已有基础上增加 理解层
需求冲突 新加了一条规则跟原来的规则打架了——就像「所有人说话不准超过10秒」和「发言人可以不限时间」同时存在 应用层
增量需求文档 只写「新加的部分」以及「新部分跟原有部分的交互规则」,不需要把全部需求重写一遍 理解层
路演 = 决策展示 路演不是说「我做了什么」,而是说「我为什么这样设计」——设计背后的思考才是最有价值的 迁移层

典型误概念表:

编号 误概念 正确认知 激发策略
M1 加新功能要把整个游戏重新做一遍 在已有代码基础上增加功能,只需要写「新功能的需求文档」 演示「增量需求文档」的写法,只写新加的部分
M2 新功能加进去就算完成了,不用测试已有功能 新功能可能跟已有功能冲突,必须测试两者的交互 举例:加了「炸弹」,炸弹爆炸后会不会触发消行?触发的话是几分?
M3 需求文档越来越长越好,把所有想法都写进去 本次迭代只写「这次新加的功能」,保持文档聚焦 「这次 AI 只需要知道新加什么,不需要把整个游戏重新理解一遍」
M4 路演只要展示游戏好不好玩就行 路演的核心是展示你的思考:你加了什么、为什么加、需求文档改了几版、遇到什么问题 对比两种路演:一个只展示功能,一个讲设计决策,让学生投票哪个更精彩
M5 没写清楚的需求可以让 AI 自己发挥 「让 AI 自己发挥」的部分你就失去了控制,结果可能跟你想的完全不同 「你让 AI 自己发挥了哪里?那里 AI 做出来的跟你想的一样吗?」

3. 教学准备

工具与环境:

  • 每台电脑已登录 Kimi 2.5,网络正常
  • 学生上节课第6课完成的俄罗斯方块 HTML 文件保存在桌面
  • 投影可切换至任意学生屏幕
  • 准备路演计时器3分钟倒计时

教学资源:

  • 教师准备「增量需求文档」提示词见第5节
  • 教师准备几个功能想法的参考清单防止学生没有灵感见第5节
  • 教师准备路演结构引导卡见第5节路演前发给学生
  • 学生资源第6课完成的俄罗斯方块 HTML 文件

教师备课体验任务:

备课前,教师必须亲自完成以下操作:

  1. 选2-3个功能比如炸弹方块、速度加成、颜色主题各写一份增量需求文档实际提交 Kimi 测试生成质量
  2. 故意在一个功能的需求文档里漏写「与消行的交互规则」,观察 AI 会怎么处理
  3. 练习一遍 3 分钟路演,讲「设计决策」而不只是展示游戏

4. 教学流程

第一幕:联系 (Connect) — 10分钟 🔗

【环节】上节课回顾 + 功能发布 (10分钟)

师: 上节课结束前,我让你们想一个下节课要加的功能。现在每个人说出来——你想给你的俄罗斯方块加什么? 【每人快速说一个,教师写在白板/投屏上】

师: 我们来看一下大家想加的功能。 (读出清单)有没有一模一样的?

【分支A】若有学生选了相同的功能 师: 你们选了同样的功能,但你们的需求文档可能完全不一样——因为每个人对这个功能的设计可能不同。比如同样是「炸弹方块」,炸弹爆炸多大范围?爆炸后会不会消行?这些都是你自己决定的。

【分支B】若所有人都选了不同的功能 师: 大家选的都不一样——这节课结束,每个人的游戏都会跟别人的不一样。这就是今天最有意思的地方。

师: 来简单说一下——你想加的功能,最难描述清楚的是哪一条规则? 生: (各自说出预感最难写的部分) 师: 很好,记住这个预感。等会写需求文档的时候,那条规则要特别仔细写。 【诊断点:学生上节课课后是否真的想了,还是现在才开始想】【识别层】


第二幕:建构 (Construct) — 65分钟 🛠️

【分段一:写增量需求文档 + 压力测试】(20分钟)

预设误概念:

  • 误概念 M1加新功能要把整个游戏重做
  • 误概念 M3需求文档要把所有东西都写进去

讲解与演示 (Teach & Demo): (5分钟)

师: 今天写的需求文档,跟上节课不一样。上节课写的是「整个游戏的规则」,今天只写「新加的功能」。这叫增量需求文档。 【投屏展示增量需求文档提示词见第5节】

师: 有一个特别重要的部分——「与原有功能的交互规则」。我举个例子:你加了一个炸弹方块,炸弹爆炸了,爆炸范围里刚好有一整行被清空了——这算消行吗?算消行的话,得多少分? 生: ……这个我没想过。 师: 对,这就是功能交互。新功能和原有功能之间,总会有一些「撞在一起」的情况,需要提前想清楚。 【理解层:建立「功能之间有交互」的设计意识】

师: 我来演示一次——用「炸弹方块」功能写一份增量需求文档,然后做一次压力测试。 【教师演示:写需求 → 压力测试 → AI 提问 → 补漏洞,重点展示「交互规则」这部分】

学生实践 (Practice): (13分钟)

  1. 学生写自己的功能的增量需求文档(重点写清楚:功能规则 + 与消行/得分的交互规则)
  2. 执行「压力测试」提示词
  3. 针对 AI 提出的问题,补充完善需求文档

教师走动观察重点:

  • 学生是否写了「交互规则」这一部分?
  • 对于「AI 问了什么」感到最意外的问题是什么?

进度同步 (Checkpoint): (2分钟)

师: AI 压力测试问了你最意外的问题是什么? 生: 分享1-2条重点是「交互规则」相关的问题 师: 这类问题,如果不写清楚,加进去的功能会跟原来的规则「打架」,产生奇怪的结果。


【分段二:提交生成 → 测试交互 → 溯源迭代】(25分钟)

预设误概念:

  • 误概念 M2新功能加进去之后只测新功能就行
  • 误概念 M5没写清楚的部分让 AI 自己决定

讲解与演示 (Teach & Demo): (3分钟)

师: 把需求文档提交 Kimi有一个特别的要求——告诉 AI 「在已有代码基础上增加功能」,而不是「重新做一个游戏」。 【投屏展示「增量生成」提示词见第5节】

师: 生成之后,验收的时候要测两件事:

  • 第一:新功能有没有按需求做出来
  • 第二:原来的功能还正常吗(消行、得分、游戏结束,都要测)

师: 遇到不对的地方,还是同样的动作——溯源到需求文档,找到是哪条没说清楚,改需求,重新生成。

学生实践 (Practice): (19分钟)

  1. 把需求文档提交 Kimi基于已有代码增加新功能
  2. 验收:新功能测试 + 原有功能回归测试
  3. 记录「结果跟预期不一样」的地方
  4. 溯源到需求文档 → 修改 → 重新生成
  5. 重复迭代,直到功能符合预期

教师走动观察重点:

  • 新功能和消行之间的交互是否符合需求文档的设计?
  • 是否有学生因为新功能导致原有功能出问题(回归 bug
  • 学生是否在需求文档里找到了回归 bug 的根源?

进度同步 (Checkpoint): (3分钟)

师: 你加的新功能,有没有让原来的某个功能出问题?怎么溯源到需求文档的? 【诊断点:学生是否理解「新功能可能影响旧功能」,并能溯源到需求文档里的交互规则】【应用层】

【分支A】若学生发现了回归 bug 并成功溯源: 师: 非常好!你刚才发现的问题,在需求文档里是哪条交互规则没有写清楚?

【分支B】若学生说「没有出问题一切正常」 师: 那我们来测一个边界情况——你的新功能触发的同时,刚好消了一行,得分是怎么算的? 【主动暴露交互场景,测试是否真的没问题】


【分段三:路演准备】(10分钟)

预设误概念:

  • 误概念 M4路演只要展示游戏好不好玩就行

讲解与演示 (Teach & Demo): (3分钟)

师: 接下来每个人做一个 3 分钟路演。但我们的路演跟一般的展示不一样——不是「看,我做了个游戏」,而是「我为什么这样设计」。 【发放路演结构引导卡见第5节】

师: 路演要说三件事:

  1. 我加了什么功能,这个功能是什么效果
  2. 我的需求文档改了几版,每次改了什么
  3. 遇到的最难的地方是什么,怎么解决的

师: 注意第二和第三点——这才是最有价值的部分。任何人都能展示一个游戏,但你经历了哪些思考和决策,是只有你有的。

学生实践 (Practice): (7分钟)

学生准备路演,按三点结构整理思路(不需要写逐字稿,想清楚就行)。 教师走动帮助学生回忆「需求文档改了几版」「哪里卡住了怎么解决的」。


第三幕:反思 (Contemplate) — 10分钟 🤔

【环节】成果路演 (8分钟)

每位学生 3 分钟路演按人数调整6人小班每人约 1.5 分钟,重点展示设计决策)。

师: (每人路演后)你的需求文档改了几版?最关键的那次修改是什么?

【环节】互评 (2分钟)

师: 刚才大家展示的游戏里,哪个功能的需求文档你觉得写得最清楚? 师: 哪个功能的设计,是你之前没想到可以这样做的? 【诊断点:学生是否能评价「需求清晰度」,而不只是「游戏好不好玩」】


第四幕:延续 (Continue) — 5分钟 🚀

【环节】抽象总结 (3分钟)

师: 两节课,你们从零做了一个俄罗斯方块,还加了自己设计的功能。我们用的核心方法是什么? 生: 写需求文档,让 AI 做,然后验收,有问题就改需求文档…… 师: 对。这个流程有个名字:需求 → 设计 → 实现 → 验收 → 迭代。这是真实的工程师每天都在做的事情。 师: 你们今天做的,跟真实的产品开发,步骤上是完全一样的。

师: 最后一个问题:如果今天你的功能需求文档第一版就做对了,是因为你运气好,还是需求写得好? 生: 需求写得好? 师: 对。运气不可靠,清晰的需求才可靠。这是今天最重要的一句话。

【环节】下节预告 (2分钟)

师: 接下来的课程,你们会进入更大的项目。今天学到的方法——需求文档、压力测试、结果溯源——会一直用到。你们已经会了,后面只是把项目变得更复杂。


5. AI 助教使用指南

增量需求文档模板(学生填写):

# 新功能需求文档:[功能名称]

## 功能描述
[用一两句话说清楚这个功能是什么]

## 触发条件
[什么情况下这个功能会出现/触发?]

## 功能规则
[这个功能具体怎么运作?每条规则尽量具体]

## 与原有功能的交互规则
- 与消行的交互:[这个功能触发时,如果同时消了行,怎么处理?]
- 与得分的交互:[这个功能会影响得分吗?怎么影响?]
- 与游戏结束的交互:[游戏结束时,这个功能有没有特殊处理?]

## 验收标准
[我怎么测试这个功能做对了列出2-3条可以测试的情况]

「增量生成」提示词:

我已经有一个俄罗斯方块游戏(代码在下面)。
现在我需要在这个基础上增加一个新功能,需求如下:

[粘贴你的增量需求文档]

要求:
1. 在已有代码基础上增加这个功能,不要改变原有功能的行为
2. 严格按照需求文档实现,不要添加文档里没有提到的内容
3. 输出完整的 HTML 文件(内联 CSS 和 JS

已有代码:
[粘贴你的游戏 HTML 代码]

功能灵感参考清单(学生没有想法时参考):

功能 一句话说明
炸弹方块 特殊方块,落地后炸掉周围一圈
速度加成方块 碰到就让下落速度加快 5 秒
冻结方块 碰到就让当前方块暂停 3 秒不下落
彩虹模式 消行的时候屏幕闪一下彩虹色
双人模式 两个人在同一个游戏区域交替操控
Boss 行 每隔 10 行出现一行不能被普通消行消掉的「Boss 行」
方块预言家 显示接下来 3 个方块而不只是 1 个
重力反转 消 4 行一次触发 5 秒重力反转,方块往上飞

路演结构引导卡(课前发给学生):

我的路演3分钟

1. 我加了什么功能30秒
   → 演示给大家看

2. 我的需求文档改了几版1分钟
   → 第一版写完之后AI 问了我什么让我意外的问题?
   → 我改了哪里?改完之后结果有什么变化?

3. 最难的地方1分钟
   → 我遇到的最难描述清楚的规则是什么?
   → 最后是怎么写清楚的?
   → 有没有发现新功能让原来的功能出了问题?怎么解决的?

4. 如果重来一次30秒
   → 需求文档哪里会写得不一样?

6. 教师指南

本课技术备注:

增量开发策略:把已有的 HTML 代码粘贴给 Kimi让它在基础上增加功能比重新生成稳定得多。如果 Kimi 倾向于重写整个游戏,在提示词里加「请务必基于我提供的代码修改,不要重新生成整个游戏」。

功能复杂度控制:炸弹方块、速度加成、冻结方块是低复杂度功能,适合大多数学生。重力反转、双人模式是高复杂度功能,适合进度快的学生挑战。教师可以根据学生能力在发清单时口头引导。

常见问题 FAQ

问题 应对
「加了新功能之后原来的功能坏了」 先检查需求文档里「与原有功能的交互规则」写了什么;如果没写,补上去重新生成
「Kimi 加功能之后把整个游戏重写了,之前的功能不见了」 提示词里强调「在已有代码基础上修改」;或者把原有代码中关键的函数名告诉 Kimi要求保留
「我想要的功能 AI 做不出来」 先检查需求文档是否足够具体;可以要求 AI「只实现这一个功能不要改其他任何部分」确实做不到的记录进 Backlog 留待下次
「路演不知道说什么」 引导卡上的4个问题逐一回答就够了重点提醒「不需要说得很完整说你觉得最有意思的那件事就行」
「时间不够,功能还没做完」 没关系,路演时说「我加了什么功能、需求文档写到第几版、还差什么没完成」也是完整的路演——这本身就是真实工程师的日常

课堂风险预案:

  • 如果多名学生选了同一个功能(比如炸弹方块):利用这个机会对比两个人的需求文档——相同的功能,两份需求文档有什么不同?最终生成的结果有什么不同?这是很好的教学素材。
  • 如果某个学生的功能过于复杂(比如联机对战):引导学生做「最小可行版本」——先只实现最核心的规则,其余的加进 Backlog下次再加。

7. 5分钟日常AI挑战

本周挑战: 再加一个功能,或者把这次没做完的功能完成 挑战说明: 用同样的方法——写增量需求文档、压力测试、生成、验收——自己在家给游戏再加一个功能(或者完成这节课没完成的部分)。下节课展示。 下节课分享: 选 2-3 位同学展示在家加的功能,重点说「需求文档是怎么写的」


8. 拓展任务

拓展一(推荐): 给你的游戏加一个「暂停功能」——按 P 键暂停,再按 P 键继续;暂停时显示一个半透明遮罩 拓展二(挑战): 给你的游戏写一份「完整的 Level 0 + Level 1 需求文档合并版」——把上节课的需求文档和今天的增量需求文档合并成一份完整的文档,让任何人读了都能理解整个游戏的所有规则