带孩子玩Scratch编程:学龄前趣味程序(15)

上一篇

(15) 太阳神 Ra

程序目标描述

应 Ethan 小朋友的强烈要求,本集题材又回到了植物大战僵尸。这次我们模拟太阳神僵尸 Ra 吸走太阳的效果。游戏在 10秒钟内随机释放 10枚太阳,玩家要抢在太阳被 Ra 吸走之前点中它们,点中的次数显示在屏幕左上方。

收集素材

在 https://plantsvszombies.fandom.com/wiki/ra_zombie/gallery

下载 Ra Zombie 的 PNG 素材,可以下载1个正常状态的 Ra,和 1个正在吸收太阳的 Ra。分别保存为 Ra_zombie 和 Ra_zombie2。

场景布置

舞台背景选择 Scratch 内置的侏罗纪背景图片 “Jurassic”。

角色上传 Ra_zombie,之后进入“造型”活页卡中,在左侧造型栏底部找到“上传造型”按钮,再给它添加一个 Ra_zombie2 的第二造型(正在吸收太阳状态的造型)。在造型编辑器中修改两个造型的大小,让他们适合屏幕。

如果不想麻烦,也可以直接使用 Scratch 的内置角色,如 Max ,代替 Ra zombie。那样的话,需要注意在后边的代码中,所有 Ra_zombie 要替换为 Max。

最后,添加一个 Scratch 内置角色 Sun,并在角色的属性窗口中,将 Sun 的大小修改为 50。

代码搭建

Sun:

Ra_zombie:

运行

如前文描述。

讲解

如果前面的例程都完成了,相信在这个程序中,你不会感到有太陌生的内容。这个程序还是用克隆体的子程序去实现飞行效果,主程序只负责初始化(计分清零、隐藏本体)、不断随机改变位置并克隆自己。其中,“将[虚像]特效设定为(100)”是为了隐藏本体。

有一点比较怪的,是在克隆体的飞行效果中,用到了一个比较复杂的运算式。其中包括了一个除法,以及一个“平方根(  )”函数积木。这个算式保证了太阳飞向 Ra 的速度,会在靠近 Ra 时越来越快。具体而言,太阳飞行速度的平方反比于到 Ra 的距离,这种情况和天体之间的万有引力、正负电荷之间的静电引力都服从相同的规律。

最后,为了在吸到太阳后,给 Ra 施加一个动作效果,我们让太阳的克隆体在“碰到 [Ra_zombie]”之后“广播[消息1]”。Ra_zombie 的代码可以处理“当接收到[消息1]”事件,那就是切换成 Ra_zombie2 造型,短暂地持续 0.4 秒,再换回正常的造型。

总的来说,搭建和理解这个程序有一定难度。需要仔细哦。

带孩子玩Scratch编程:学龄前趣味程序(14)

上一篇

(14) 计时投篮机

程序目标描述

这集我们用很少的几块积木,让篮球实现了抛物线运动。为了增加游戏的趣味性,篮球投出的力度将取决于投出(按空格键)的时机。等等,这个拖把是怎么回事?像很多低级的电子游戏一样,它是作为力度指示计,当拖把偏转角度最大时,投球的力度也最大。屏幕左上角显示了命中次数的计数器,以及一个计时器。完成后,跟爸爸比一比谁 30秒内投进的球更多吧。

场景布置

舞台背景选择 Scratch 内置的 “Basketball 2”。

角色选择 Scratch 内置的 “Andie”(坐轮椅的运动员) 和 “Basketball” (篮球)、 “Broom” (扫把)和 “Bowl”(碗) 共 4个角色。

按上面的图布置。

同时,在“变量”积木箱中,将“我的变量”前面的勾打上,用于显示得分。在“侦测”积木箱中,将“计时器”前面的勾打上,用于显示游戏时间。

代码搭建

Andie(下面这 2 行是可选代码,只负责在投篮时变换 Andie 的造型):

Broom(下面这段代码负责在游戏中让扫把不断改变角度):

Bowl(下面这四行用于侦测命中并计分):

Basketball:

运行

如前文描述。

讲解

要想实现抛物线的效果,我们必须有一个隐变量,那就是篮球在垂直方向上的速度。因为任何抛射出去的物体,其垂直速度都是不断改变的。这个程序用了一个小把戏,就是把篮球的方向用作了代表它垂直速度的变量。方向的取值可以是 -179~180,这对于我们游戏中的垂直速度而言,范围是足够大的。

篮球角色的“重复执行”代码块实现了篮球的飞行效果,每一次循环都会执行三个操作:
将 x 减少 10 —— “将 x坐标增加 -10
将 y 增加1个“垂直速度” —— “将 y坐标增加(方向)
将“垂直速度”减少 1 —— “左转(1)度”。

其实还有一个隐含的变化,那就是每一次循环也会消耗一个很短的时间。有时候,我们也称这些单次循环中的变化叫“微分”,时间的变化,叫时间的微分 dt,横坐标的变化,叫 x 的微分 dx,纵坐标的变化,叫 y 的微分 dy,垂直速度的变化,叫垂直速度 V 的微分 dV。而你最终看到的,是把每一次细微变化累积起来的效果,也就是篮球做抛物线的运动。

循环体中的三个操作,实际上是设定了 dx、dy、dV、dt 之间的关系,相当于构造了运动的微分方程。我们构造的微分方程符合物理学中的运动定律,因此,程序运行效果也看上去像真实的投篮一样。

当然,改变上述微分之间的关系,运动也会发生改变。如把 “将 x坐标增加 -10” 改为 -15 或 -5,就可以看到投出球的水平速度将变大、变小。而“左转(2)度”将呈现重力加速度翻倍的效果。

带孩子玩Scratch编程:学龄前趣味程序(13)

上一篇

(13) 卢瑟福散射

程序目标描述

这集要模拟一个量子物理学实验,我们用一个 α粒子,也就是图中的黄色小球,去轰击金原子核,也就是图中的小钻石。α粒子的运动路线,我们用画笔画下轨迹。

英国物理学家卢瑟福就是通过这种照片,确定了一个事实:在微观世界中,物质不是平均充满整个体积的,而是集中在一些稀疏而坚硬的小颗粒上,这些小颗粒就是原子核,它们集中了物质的大部分质量。只有这样,才能形成照片中的景像:大多数 α粒子可以穿越物质而过,但极少数 α粒子会被以很大角度偏折,甚至反弹回去。

场景布置

舞台背景选择 Scratch 内置的 “Xy-grid-20px”。

角色选择 Scratch 内置的 “Ball” 和 “Crystal”。

把小球摆到屏幕偏左的位置,水晶摆到屏幕偏右的位置。

代码搭建

在左侧积木分组栏下方,点“添加扩展”按钮,选择“画笔”扩展。之后,为 “Ball” 添加代码:

运行

如开篇图片所示,小球源源不断地从屏幕左侧射入,高度随机,并向屏幕右侧射去。当碰到钻石之后,将受到“散射”改变轨迹飞走。

“小球”代表的是物理实验中的 α粒子,“钻石”代表的是物质的原子核。但科学家在物理实验室里,不能直接看到“小球”和“钻石”,而只能通过云室摄像技术,记录下 α粒子的轨迹,如同我们程序中小球画出的蓝线。

α粒子的轨迹大部分是平行线,但也有少数呈现大角度偏转,科学家通过这种照片,判断出物质中必然有稀疏而坚硬的小颗粒。通过更精细的定量计算,卢瑟福证明了这些小颗粒是原子核,它们集中了物质的大部分质量,但尺寸及其微小。这个发现开启了物理学的新时代。

讲解

这个程序再次用到了“克隆(自己)”,让克隆体去执行飞行和画出轨迹的功能,本体则只是重复不断地改变 y坐标的高度。

这样设计程序,可以把一个复杂的任务分解成主程序和子程序,主程序就是小球重复不断地改变高度和克隆自己,子程序是克隆体飞行并画出轨迹。子程序会被主程序中的克隆指令触发,从而被多次调用。

如果不使用克隆,代码将变得复杂,子程序的重复执行将嵌入到主程序的重复执行之内,在搭建时更容易出错。

另一方面,克隆体的程序是可以并行执行的,如果我们缩短主程序中“等待(1)秒”的时间,例如改成 0.2 秒,我们可以看到多个小球同时发射并留下各自的轨迹。这是单线程程序无法实现的效果。