不懂编程,也能陪孩子做出一个游戏?我用 WorkBuddy + Scratch 搭了「小猫接水果」,附完整积木脚本
01 孩子学 Scratch,家长不会编程能陪吗?
先说结论:能,而且家长"不会"反而是优势。
很多家长把 Scratch 让给培训班,理由是"我不懂代码,怕教错"。但 Scratch 的设计初衷就是让不懂代码的人也能编程——它本来就是积木,不是代码。
家长真正要做的不是"教",是陪着问问题:
| 家长该说的 | 不该说的 |
|---|---|
| "你觉得水果为什么会掉下来?" | "照老师说的拖,别问了" |
| "接住的时候,电脑怎么知道的?" | "这个我会,我帮你拖" |
| "漏掉一个扣血,那炸弹要不要扣?" | "别瞎改,会坏" |
孩子要的不是标准答案,是有人愿意听他解释。这一点,AI 替代不了,培训班也替代不了。
那 WorkBuddy 在这里扮演什么角色?——它把"家长不懂"这块短板补上。
我这次的做法是:把游戏规则用大白话描述给 WorkBuddy,让它输出 Scratch 的积木搭建步骤和脚本,我照着跟孩子一起拖。整个过程我没有手写一行代码,孩子全程参与决策:水果掉多快、要不要加炸弹、漏接扣几滴血。
02 准备工作:3 样东西就够了
角色与背景
| 角色 | 来源 | 命名 |
|---|---|---|
| 小猫 | 角色库搜 Cat 或 Cat2 | 小猫 |
| 水果 | 角色库搜 Apple,再添加多个造型 | 水果 |
| 炸弹 | 作为水果角色的一个造型 | 炸弹 |
背景随意,选个 Blue Sky 就行。
关键技巧:水果和炸弹共用一个角色。这样只需要写一套下落脚本,比建两个角色省一半功夫,孩子也更容易理解"它们是一类东西"。
新建变量
在「变量」分类里建这几个(都选"适用于所有角色"):
| 变量 | 作用 |
|---|---|
| 积分 | 接住 1 个水果 +1 |
| 血量 | 初始 3,漏接或吃炸弹 -1 |
| 速度 | 下落速度 |
| 随机X | 掉落前的水平位置 |
| 物品类型 | 标记"水果"还是"炸弹" |
记得把 积分 和 血量 勾上,让它们显示在舞台上。孩子看到数字跳动的那一刻,眼睛是会亮的。
03 小猫怎么左右动起来?
两个独立脚本,一个初始化,一个管移动。
脚本 A · 初始化
当 绿旗 被点击 设置 [血量 v] 为 [3] 设置 [积分 v] 为 [0] 移到 x: (0) y: (-130) 显示
脚本 B · 左右移动 + 边界限制
当 绿旗 被点击
重复执行
如果 <按下 [左移键 v] 键?> 那么
将x坐标增加 (-10)
结束
如果 <按下 [右移键 v] 键?> 那么
将x坐标增加 (10)
结束
如果 <(x 坐标) < (-220)> 那么
将x坐标设为 (-220)
结束
如果 <(x 坐标) > (220)> 那么
将x坐标设为 (220)
结束
end
适合问孩子的问题:"如果最后两行删掉,会发生什么?"
让他自己删、自己试。他会发现小猫能跑出屏幕——这就是边界条件,编程里最重要的概念之一,他自己撞出来的,比我讲十遍都管用。
04 水果怎么随机掉下来?
这是全篇最关键的一段,用到了两个核心概念:克隆和随机数。
脚本 C · 本体隐藏 + 持续克隆
当 绿旗 被点击 隐藏 当 绿旗 被点击 重复执行 等待 (1) 秒 克隆 [自己 v] end
脚本 D · 每个克隆体的行为
当 作为克隆体启动时
设置 [随机X v] 为 (在 (-200) 和 (200) 之间取随机数)
移到 x: (随机X) y: (180)
将 [速度 v] 设为 (在 (2) 和 (5) 之间取随机数)
显示
重复执行
将y坐标增加 (-速度)
如果 <(到 [小猫 v] 的距离) < (50)> 那么
将 [积分 v] 增加 (1)
删除此克隆体
结束
如果 <(y 坐标) < (-170)> 那么
将 [血量 v] 增加 (-1)
删除此克隆体
结束
end
为什么用"距离"而不是"碰到"?
这是最容易踩的坑。很多教程教用 碰到 [小猫] 判定,实测下来手感很差——Scratch 的碰到检测的是图形边缘,水果经常"擦"过去不算接住,孩子会觉得游戏在耍赖。
| 判定方式 | 手感 | 推荐度 |
|---|---|---|
| 碰到颜色 | 差,受背景色干扰 | ✗ |
| 碰到角色 | 一般,边缘检测不准 | △ |
| 到小猫的距离 < 50 | 好,稳定 | ✓ |
05 怎么让水果种类随机变?
给水果角色多塞几个造型就行。
操作步骤:
- 选中水果角色 → 「造型」标签
- 依次添加:Apple、Bananas、Orange、Strawberry、Watermelon、Peach
- 在克隆体脚本开头加两行:
将 [水果造型编号 v] 设为 (在 (1) 和 (造型数量) 之间取随机数) 换成造型 (水果造型编号)
别忘了问孩子:"造型数量能不能写成 1?会怎样?"
他会发现水果变成一种了。这个瞬间他理解了随机数范围和造型编号的关系——比课本上的定义清楚得多。
06 加个炸弹:游戏立刻好玩三倍
只有水果,玩两分钟就腻了。加个炸弹,孩子会自己开始"冒险"。
| 情况 | 结果 |
|---|---|
| 接住水果 | +1 分 |
| 漏掉水果 | -1 血 |
| 接住炸弹 | -1 血 |
| 漏掉炸弹 | 不扣血(不然太难) |
脚本 E · 水果/炸弹二选一
当 作为克隆体启动时
将 [是否炸弹 v] 设为 (在 (1) 和 (10) 之间取随机数)
如果 <(是否炸弹) > (8)> 那么
将 [物品类型 v] 设为 [炸弹]
换成造型 [炸弹 v]
否则
将 [物品类型 v] 设为 [水果]
将 [水果造型编号 v] 设为 (在 (1) 和 (5) 之间取随机数)
换成造型 (水果造型编号)
end
设置 [随机X v] 为 (在 (-200) 和 (200) 之间取随机数)
移到 x: (随机X) y: (180)
将 [速度 v] 设为 (在 (3) 和 (6) 之间取随机数)
显示
重复执行
将y坐标增加 (-速度)
如果 <(到 [小猫 v] 的距离) < (50)> 那么
如果 <(物品类型) = [炸弹]> 那么
将 [血量 v] 增加 (-1)
播放声音 [laser1 v] 等待播完
否则
将 [积分 v] 增加 (1)
播放声音 [pop v]
结束
删除此克隆体
结束
如果 <(y 坐标) < (-170)> 那么
如果 <(物品类型) = [水果]> 那么
将 [血量 v] 增加 (-1)
结束
删除此克隆体
结束
end
是否炸弹 > 8 意味着 10 次里约 2 次是炸弹(20%)。想更难就把 8 改小,这个数字让孩子自己调。
07 常见坑与排查清单
| 现象 | 原因 | 解决方法 |
|---|---|---|
| 水果不掉 | 本体没隐藏,或克隆脚本没挂 | 本体隐藏,确认绿旗脚本在跑 |
| 接住了不加分 | 判定方式不对 | 换成"到小猫的距离 < 50" |
| 血量瞬间归零 | 同帧反复扣血 | 扣血后立刻删除此克隆体 |
| 漏接炸弹也扣血 | 判定漏了物品类型 | 落底扣血前加一层物品类型 = 水果判断 |
| 小猫跑出屏幕 | 没写边界限制 | 加两行 x 坐标上下限 |
| 水果越掉越快直到看不见 | 速度累加没上限 | 给速度设个最大值 |
08 孩子做完这个,到底学到了什么?
不是为了"学会 Scratch",是这四件事:
| 概念 | 在游戏里的落点 |
|---|---|
| 克隆 | 一个水果变出一堆水果 |
| 随机数 | 位置、速度、种类都是随机的 |
| 条件判断 | 接住加分、漏掉扣血、炸弹要躲 |
| 边界条件 | 小猫不能跑出屏幕 |
但更重要的是他经历了一次完整的"想法 → 实现 → 出问题 → 改好"。
这个循环,比他做出什么游戏都值钱。
09 常见问题 FAQ
这次搭「小猫接水果」,我最大的感受是:AI 没有替我陪孩子,它只是把"我不懂"这个障碍挪走了。
障碍没了,我才有余力做真正重要的事——听他讲为什么要把炸弹概率调高,看他为了多接一个水果急得拍桌子。
如果你也想试试,游戏规则可以随便改:接住炸弹直接结束、连击加分、加个暂停道具。孩子的版本,应该由孩子说了算。