[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第4讲。
第12届蓝桥杯青少年组国赛于2021年5月29日举行,本次赛事仍然采取了在线考试。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。
Scratch切换子弹,本题是第12届蓝桥杯Scratch国赛真题编程部分第4题,初级组和中级组都有此题。题目要求考生编程实现切换子弹效果,按1发射火焰弹,按2发射火焰散弹,本题难度系数为3,分值为80分。
先来看看题目的详细说明吧。
题目说明
编程实现:
切换子弹
具体要求:
1). 点击绿旗,呈现对应的角色与背景;
![图片[1]-scratch切换子弹_第12届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-33.png)
2). 按下数字键1,发射1类型子弹-火焰弹;
![图片[2]-scratch切换子弹_第12届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-34.png)
3). 按下数字键2,发射2类型子弹-火焰散弹;
![图片[3]-scratch切换子弹_第12届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-35.png)
4). 再次按下数字键1,发射1类型子弹-火焰弹;
5). 子弹为持续发射状态,数字键1与数字键2可以持续切换发射子弹的类型。
评判标准:
- 5分:满足要求1;
- 25分:满足要求2
- 25分:满足要求3;
- 10分:满足要求4;
- 15分:满足要求5。
效果预览
先来看看作品的完整效果吧:
思路分析
本题逻辑比较简单,当按下数字键1时,沿着正前方不停地发射火焰弹,当按下数字键2时,沿着5个方向同时发射火焰散弹。
本题只有两个角色,其中子弹角色是重点,几乎所有的代码都是在子弹角色中来编写的。
按键处理,我们可以使用事件模块中的“当按下xx键”指令,也可以使用控制模块中的“如果…那么”指令结合侦测模块中的“按下xx键”指令。不停的发射子弹,这需要使用Scratch中的克隆技术。
本题的难点在于,如何沿着5个方向同时发射火焰散弹,这会用到Scratch克隆中的一个小技巧,稍后详细为你介绍。
程序实现
接下来,我们就分3步来编写程序:
- 实现按键处理
- 发射1类型子弹-火焰弹
- 发射2类型子弹-火焰散弹
1. 实现按键处理
针对按键处理,根据前面的介绍,有两种方式实现,不过我还是比较推荐第二种方式,也就是使用“如果…那么”指令结合“按下xx键”指令,原因很简单,使用这种方式,只有在点击绿旗之后才能启动程序,如果使用第一种方式,不用点击绿旗,直接按键盘就可以启动程序。
切换到子弹角色,编写代码如下:
![图片[4]-scratch切换子弹_第12届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-36.png)
注意:很多刚开始学编程的孩子,经常会漏掉这里的”重复执行“指令,导致没有任何效果,切记,”如果…那么“指令只能执行一次,通常需要和”重复执行“指令配合使用。
接下来就需要分别处理发射两种不同的子弹了。
2. 发射1类型子弹-火焰弹
1类型子弹始终沿着90度方向发射,因此,只需要将子弹角色设置为90度,不停的克隆即可,只是要控制一下克隆子弹的频率,通常的做法就是等待一下,比如0.05秒,这部分的代码如下:
![图片[5]-scratch切换子弹_第12届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-37.png)
一旦生成了子弹克隆体,就可以让它不停地向前移动,直到碰到舞台边缘消失,代码如下:
![图片[6]-scratch切换子弹_第12届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-38.png)
这样一来,1类型子弹就可以成功发射出去了。
3. 发射2类型子弹-火焰散弹
这是本题的重点,也是难点,沿着5个不同的方向发射子弹,意味着我们需要在按下数字键2的时候,一次性克隆5个子弹,并设置不同的方向。看起来挺简单的,大部分学生都会这么写:
![图片[7]-scratch切换子弹_第12届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-39.png)
从逻辑上来讲,这么写没有任何问题,但是效果看起来却有点奇怪,如下图所示:
![图片[8]-scratch切换子弹_第12届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-40.png)
眼尖的你,估计已经发现了,这里的5颗子弹并不是同时发射出去的,明显的有先后顺序。
尽管这里没有”等待1秒“指令,但是代码执行还是要占用时间的,所以这里的5颗子弹还是有先后顺序的,也就导致出现了上图所示的效果。
(O_O)? 能否让5颗子弹同时克隆出来呢?
当然能,今天超平老师就教你一招,借助自制积木就可以,将克隆5颗子弹的程序定义成自制积木,如图所示:
![图片[9]-scratch切换子弹_第12届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-41.png)
同时确保在定义自制积木的时候,勾选左下角的”运行时不刷新屏幕“,如图:
![图片[10]-scratch切换子弹_第12届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-42-1024x784.png)
然后在程序中使用自制积木来替换刚才的代码,如图:
![图片[11]-scratch切换子弹_第12届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-43.png)
那么,你可能要问了,这里的”运行时不刷新屏幕“是个啥意思呢?
其实,更确切地说,“运行时不刷新屏幕”,是不刷新舞台。其作用是,使得自制积木中的代码在执行时省去舞台刷新的步骤,并在整个自制积木执行完毕后再刷新屏幕。
由于刷新舞台会消耗计算机资源,需要一定的时间,因此使用“运行时不刷新屏幕”功能可以使特定的代码加快执行效率,缩短运行时间,但是用户无法通过舞台看到程序运行过程中的效果变化,可以简单的理解这部分的代码是同时执行的。
除了本例中的确保多个子弹同时克隆的效果,还可以用于Scratch画笔瞬间绘制好图形,以及角色碰撞时控制其行为的物理引擎等。
总之,“运行时不刷新屏幕”功能为在Scratch中实现更多更丰富的效果提供了可能,是一个比较强大的功能。
至此,发射2类型子弹的效果也完成了。
总结与思考
本题相对较为简单,重点考察了下面4个知识点:
- 按键处理程序,建议使用”如果…那么“和”按下xx键“组合方式;
- 克隆的使用,重点是克隆3指令的含义和用法;
- 自制积木的使用,分为定义和调用两个阶段;
- ”运行时不刷新屏幕“设置项的意义和妙用;
最后需要强调一下,不管是发射1类型子弹还是2类型子弹,其克隆体运动的代码都是一样的,都是通过重复执行”移到10步“来实现的。有的同学可能在想,使用”将x坐标增加10“不是也可以吗?
这个还真不行,使用”将x坐标增加10“指令除了x坐标发生变化之外,还有一个隐含信息,那就是它始终面向右方,也就是90度。这就导致,所有的子弹只会沿着90度方向发射出去,而这里的2类型子弹,子弹是沿着5个不同方向发射出去的。
实际上,我们可以这么理解,”将x坐标增加10“只是”面向方向“ + ”移动10步“组合的一个特例,如果x增加的是正数,那么方向就是90度,如果x增加的是负数,那么方向就是-90度。
关于角色的运动,在Scratch中有3种实现方式,我们需要根据具体的问题,具体分析,然后采取最优的方案,这也是计算思维的实际运用和体现。
需要素材和源代码的,可以转到这里,切换子弹-2021.5.29蓝桥杯国赛第4题。
暂无评论内容