为什么用 Scratch 教数学:写游戏比刷题更上瘾
孩子做口算题会嫌烦,但如果让他自己写一个出题游戏、让电脑出 20 道题、答对加分答错扣血,他会主动玩半小时。这就是从"被做题"变成"出题给别人做"的角色反转带来的内驱力。
Scratch 做数学游戏还有一个隐藏好处:孩子在写游戏的过程中,必须真的搞懂加法、乘法、比较大小、随机数这些概念。他写"答对加 10 分"的时候,脑子里要想清楚什么叫"答对"、什么时候加分、加多少。这种为了让游戏跑通而主动理解数学的过程,比刷十页练习册都深刻。
最好的数学教育,不是让孩子刷题,而是让他亲手把数学规则写成游戏。
- 变量Scratch 里的"分数""血量""当前关卡"都是变量。
- 随机数从 1 到 100 随机取一个数,作为题目的因数。
- 条件判断如果玩家答案等于正确答案,就加分。
- 侦测积木检测角色有没有碰到迷宫墙,决定能不能移动。
数学闯关游戏:随机出题与计分判定
我们来做一个"数学大冒险"游戏:角色是一个小猫,舞台上方显示一道加法题,玩家按数字键回答,答对加分、答错扣血。
第一步,建立两个变量:分数和血量。在 Scratch 的"变量"分类里点"建立变量",输入名字,舞台左上角就会出现这两个数字的显示框。
第二步,建立两个新变量:甲和乙,分别代表题目里的两个加数。我们让它们每次都随机变成 1 到 100 之间的数:
当绿旗被点击
将分数设为 0
将血量设为 3
重复执行
将 甲 设为 随机从 1 到 100
将 乙 设为 随机从 1 到 100
说 甲 + 乙 = ? 两秒
等待回答
如果 回答 = 甲 + 乙 那么
将分数增加 10
否则
将血量减少 1
如果 血量 = 0 那么
停止全部脚本
这段脚本就是一个完整的出题循环。孩子写完之后会发现:原来"说甲+乙=?"里的甲和乙是变量,每次都不一样,电脑自动出题。这里用到了运算积木里的加法和比较,和数学课上学的符号一一对应。
变量与运算:让题目自动生成
上一节我们已经用到了变量。变量在 Scratch 里就是一个"贴了标签的盒子",你可以往里面放数字,也可以随时改它。舞台上显示的分数和血量,就是两个盒子里当前的数字。
运算积木在绿色分类里,包含加减乘除、比较大小、与或非逻辑运算。做数学游戏时最常用的是:
| 运算积木 | 用途 | 示例 |
|---|---|---|
| 加法 | 算正确答案 | 甲 + 乙 |
| 乘法 | 做乘法闯关 | 甲 × 乙 |
| 大于 | 判断难度等级 | 分数 > 100 |
| 随机数 | 随机出题 | 随机从 1 到 100 |
| 取余数 | 判断奇偶 | 数字 mod 2 = 0 |
孩子可以自己扩展:把加法改成乘法、把题目范围改成 1 到 1000、把分数加到一定数量就升级难度。每改一次,游戏就会变一个样子,这种参数化思维是从积木编程过渡到代码编程的关键一步。
条件分支:答对进下一关,答错扣血重来
上一节的游戏只有一种难度。我们再加一个"关卡"变量:分数每到 50 分,关卡加 1,题目范围变大。
如果 分数 = 50 那么
将关卡增加 1
说 "进入第" + 关卡 + "关" 两秒
当绿旗被点击
将关卡设为 1
重复执行
如果 关卡 = 1 那么
将 甲 设为 随机从 1 到 10
将 乙 设为 随机从 1 到 10
否则如果 关卡 = 2 那么
将 甲 设为 随机从 1 到 50
将 乙 设为 随机从 1 到 50
这里出现了多分支条件:如果关卡是 1 就出 10 以内的题,关卡是 2 就出 50 以内的题。这其实就是程序设计里的"分支结构",和成年程序员写的 if-else 是完全一样的逻辑。
孩子在写这个逻辑的时候,会自然地理解"什么叫条件""条件满足时做什么""条件不满足时做什么"。这些概念在数学课上是抽象的,在游戏里是具体的。
迷宫寻路:用侦测积木写碰撞检测
除了数学题,Scratch 还能做经典的迷宫寻路游戏。孩子要控制一个小球从迷宫起点走到终点,碰到墙就弹回去。这个游戏的核心是碰撞检测。
先在舞台背景上画一个迷宫,墙用黑色。然后给小球写脚本:
当绿旗被点击
重复执行
如果 按下上箭头 那么 改变 y 坐标 5
如果 按下下箭头 那么 改变 y 坐标 -5
如果 按下右箭头 那么 改变 x 坐标 5
如果 按下左箭头 那么 改变 x 坐标 -5
如果 碰到颜色 黑色 那么
移动 -10 步
说 "撞墙了!" 1 秒
"碰到颜色黑色"就是侦测积木,它会检测小球当前所在位置下面有没有黑色像素。一旦碰到墙,就把小球往后退 10 步,等于把它"弹"回安全位置。
这种碰撞检测是所有动作游戏的基础。孩子理解了这个逻辑,以后做平台跳跃游戏、赛车游戏、打飞机游戏都能复用同一套思路。
- 键盘事件用方向键控制角色移动。
- 坐标系统舞台有 x 和 y 坐标,角色位置由坐标决定。
- 侦测检测颜色碰撞,决定角色能不能进入某个区域。
- 回退动作撞墙后反向移动,把角色拉回安全位置。
逻辑谜题:用与或非组合出推理关卡
数学游戏之外,还可以做逻辑谜题。比如一个三开关谜题:舞台上有三个开关 A、B、C,玩家要按照"必须同时打开 A 和 B,或者打开 C"的规则才能通关。
当角色被点击
切换造型 开
广播 检查条件
当收到 检查条件
如果 (开关A = 开 且 开关B = 开) 或 (开关C = 开) 那么
说 "通关!" 2 秒
广播 打开宝箱
这里"且"和"或"是逻辑运算积木。孩子要设计谜题时,必须先想清楚:什么条件组合才能触发结果?这种把自然语言翻译成逻辑表达式的能力,是数学和编程共通的核心素养。
再进阶一步,可以做"谁是凶手"类推理游戏:给出三个嫌疑人,每个嫌疑人说一句话,其中一句是真两句是假,玩家通过排除法找出真凶。这种谜题本质上就是一个布尔逻辑求解器,孩子在设计关卡的时候,就把逻辑运算玩明白了。
发布与对战:把游戏分享给同学互玩
游戏做完之后,最重要的一步是分享出去。在 Scratch 社区点"分享"按钮,孩子就能得到一个链接,发给同学玩。同学会留言说"你这个游戏太难了""能不能加个跳关按钮",这种来自真实玩家的反馈,是最好的学习动力。
还可以做对战版:两个玩家用同一台电脑,一个按 A 键出题,一个按数字键回答,比谁先答对。这种多人互动会让孩子反复打磨游戏的平衡性和难度曲线。
- 先玩三遍:分享前自己玩三遍,看有没有 bug、难度合不合理。
- 再邀请三人:找三个同学试玩,收集他们的真实反馈。
- 最后迭代:根据反馈改一版,发布 1.1 版本。
写游戏的终点不是发布,而是根据玩家反馈把游戏改得更好。这个过程本身就是产品思维训练。