[导读]:这是Scratch蓝桥杯真题解析第111讲。
蓝桥杯选拔赛现已更名为STEMA,即STEM 能力测试,是蓝桥杯大赛组委会与美国普林斯顿多文化教育研究中心合作推出的考试项目。STEM能力测试致力于综合评价学生的 STEM 水平,对学生的科技素养、逻辑思维和编程能力等三方面进行客观科学的测试。
烟花特效,本题是2023年3月12日举行的第14届蓝桥杯STEMA考试Scratch图形化编程真题初/中级组编程部分第4题,是初级组最后一题。题目要求创作一个烟花特效作品,用鼠标点击舞台任意位置时,在正下方出现一个烟花竖直向上移动,当移动到鼠标指针点击位置时爆炸,形成10个方向的烟花分裂效果。
先来看看题目的要求吧。
一.题目说明
编程实现:
烟花特效。
具体要求:
1). 运行程序,背景如图所示;
2). 用鼠标点击舞台星空中任意位置时,在鼠标正下方的地平线位置(舞台下方边缘)出现一个烟花,烟花竖直向上移动(颜色随机);
3). 当烟花移动到鼠标指针点击位置时爆炸,形成10个方向的烟花分裂效果(造型随机),且烟花分裂后在移动过程中逐渐变的透明;
4).分裂出的烟花,碰到舞台任意边缘时消失;
5). 舞台上可以同时显示多个烟花。
评判标准:
- 3分:满足”具体要求”中的1);
- 4分:满足”具体要求”中的2);
- 7分:满足”具体要求”中的3);
- 7分:满足”具体要求”中的4);
- 4分:满足”具体要求”中的5)。
二.效果预览
在编程之前,先来看一下作品的完整效果吧:
三.思路分析
本题提供了两个角色,分别是上升和炸开,如图所示:
其中炸开角色有5个造型,如图所示:
其中上升角色功能比较简,当点击鼠标时,就生成一个克隆体,向上移动到鼠标所在位置,然后消失。炸开角色是本作品的重难点,当上升角色消失时,要瞬间生成10个克隆体,形成10个方向上的烟花分裂效果,在这个过程中会碰到如下几个棘手的问题:
- 如何瞬间生成10个克隆体
- 怎么设置克隆体的方向
- 如何避免克隆体生成克隆体
其中,第一点比较简单,只需要将克隆过程定义成自制积木,然后勾选”运行时不刷新屏幕“。由于每个克隆体都有各自的方向,因此在生成克隆体的时候,需要设置好方向。10个克隆体围成一圈,两个克隆体之间的夹角是360 / 10 = 36。每生成一个克隆体,将本体旋转36度即可。相对比较麻烦的是第三点,很多同学都会想到使用广播,即在上升角色消失时发送一个广播消息,炸开角色在接收到广播消息时瞬间生成10个克隆体。但是,这里有一个陷阱,就是本体和克隆体都会接收广播,因而都会执行生成克隆体的代码,如此一来就会出现大量的克隆体。1个本体,生成10个克隆体,然后每个克隆体又生成10个克隆体,想想就有点可怕。如何避免克隆体生成克隆体呢?超平老师给你提供两个思路。思路一是不使用事件广播机制,利用滑行指令将上升角色的运动时间确定下来,比如1秒。在炸开角色中,检测是否按下鼠标,当按下鼠标时,等待1秒,然后开始生成克隆体。思路二是利用私有变量区分本体和克隆体,当接收到广播消息时,只让本体进行克隆操作。
接下来,我们就以思路一为例,进入具体的编程实现环节。
四.编程实现
根据题目描述和思路分析,我们可以分角色来编写程序:
- 上升角色
- 炸开角色
1. 上升角色默认情况下,上升角色处于隐藏状态,当在舞台上点击鼠标时,生成一个克隆体,这部分代码如下:
这里定义了两个变量”x坐标“和”y坐标“,用来记录鼠标的坐标。一旦生成克隆体,就让克隆体向上运动直到鼠标所在位置,要实现角色向上移动,常见的方式有:
- 重复执行直到 + 面向0方向 + 移动10步
- 重复执行直到 + 将y增加10
- 在1秒滑行到x、y
很显然,对于终点确定的运动,使用第三种方式更为简单,这也为我们使用思路一创造了条件。在上升角色中,增加代码如下:
说明三点:1). 由于两个角色的颜色是一致的,所以这里使用变量”颜色“来保存随机的颜色值;2). 在Scratch中,颜色值的范围通常是1~100,但是适当的将范围变大,可以随机出更为丰富的颜色;3). 每个克隆体都是从在鼠标正下方的地平线位置出发,其x坐标就是鼠标的x坐标,y坐标就是舞台下边缘,你可以设置为-180,大一点和小一点都是可以的。
2. 炸开角色
根据前面的思路分析,在炸开角色中,同样的需要对按下鼠标操作进行判断,在炸开角色中编写代码如下:
这里之所以等待1秒,是因为上升角色的运动持续了1秒钟,自制积木克隆的代码如下:
代码非常简单,先将本体移到鼠标所在位置,然后重复执行10次克隆指令,每克隆一个,就将本体右转36度,此处的重点是需要勾选”运行时不刷新屏幕“选项,如图:
一旦生成克隆体,就需要让克隆体运动起来,直到碰到舞台边缘,删除克隆体,对应的代码如下:
简要说明三点:
1). 炸开克隆体和上升角色的颜色是一致的;
2). 炸开角色有5个造型,需要在5个造型之间随机一个造型;
3). 烟花在移动过程中逐渐变透明,这是通过虚像特效来实现的,先将虚像设置为0,在移动过程中,每次增加1,当然这个数值可以自行调整。
至此,我们的烟花特效作品就创作好了,赶紧运行程序欣赏一下灿烂的烟花效果吧。
五.总结与思考
本题是初/中级组编程部分第4题,分数为25分,积木块数量56个左右 ,涉及到的知识点主要包括:
- 运动编程,重点是不同方式的特点和使用场景;
- 外观编程,包括显示、隐藏、切换造型和虚像特效;
- 循环编程,三种不同循环的特点和使用场景;
- 随机数指令;
- 变量;
- 自制积木,重点是不刷新屏幕的用法;
- 克隆编程,尤其是克隆的特点和陷阱。
本题代码不多,逻辑也并不复杂,但却难住了很多孩子。究其原因,还是对于克隆编程理解得不够透彻,一不小心就陷入了克隆编程的陷阱。可以说,这是一道非常棒的题目,通过创作本题,相信每个孩子对克隆编程有一个更深入的理解。
再给你留一道思考题吧,前面的思路分析中提到,我们还可以使用事件广播机制,结合私有变量,确保只有本体在接收到广播消息时进行克隆,具体代码该如何实现呢,赶紧动手尝试一下吧。
如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香