[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第26讲。
第13届蓝桥杯青少年组国赛于2022年5月29日举行,形式为在线考试。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。
货物运输,本题是第13届蓝桥杯Scratch国赛真题编程第4题,初级组和中级组都有此题。题目要求考生编程模拟货物运输效果,包括装载货物、卸载货物和满载货物行驶。
先来看看题目的要求吧。
题目说明
编程实现:
货物运输。
具体要求:
1). 点击绿旗,角色、背景如图所示;
![图片[1]-scratch货物运输_第13届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-236.png)
2). 每点击一次加号图标,货车上的货物增加1箱(货物最多摆放6箱,共三层,第一层3箱,第二层2箱,第三层1箱,摆放顺序为从第一层开始,每层按照从左到右的顺序摆放);
![图片[2]-scratch货物运输_第13届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-237.png)
3). 每点击一次减号图标,货车上的货物按照摆放顺序的相反顺序减少1箱;
4). 当货车上装满6箱货物后,载满货物的货车向舞台右侧行驶(能看到移动效果);
![图片[3]-scratch货物运输_第13届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-238.png)
5). 载满货物的货车行驶到舞台右侧边缘消失。
![图片[4]-scratch货物运输_第13届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-239.png)
评判标准:
- 10分:满足“具体要求”中的1);
- 20分:满足“具体要求”中的2);
- 20分:满足“具体要求”中的3);
- 20分:满足“具体要求”中的4);
- 10分:满足“具体要求”中的5)。
效果预览
在编程之前,先来看看作品的完整效果吧:
思路分析
本题一共要实现如下三个功能:
1). 装载货物
2). 卸载货物
3). 满载货物行驶
装载货物的过程,其实就是克隆货物的过程,卸载货物则是删除相应的克隆体,满载货物行驶,则是让克隆体和火车一起运动。
相信聪明的你已经发现了,处理都和克隆相关,所以解决本题的关键就是如何精确的控制每一个克隆体,包括它的位置、删除顺序。
在Scratch中,每个克隆体都和本体一样,具备相同的特征,包括它的大小、造型、位置等。为了区分不同的克隆体,我们可以借助私有变量,给每个克隆体添加一个ID,并设置为不同的值,然后我们就可以区分它们了。
编程实现
根据上面的思路分析,我们将分4步来编写程序:
- 装载货物
- 卸载货物
- 满载货物行驶
1. 装载货物
本题一共有4个角色,分别是货物、增加按钮、减少按钮和货车,如图所示:
![图片[5]-scratch货物运输_第13届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-240-899x1024.png)
其中,➕按钮和➖按钮一直位于舞台左上方,货车处于舞台的左下方,而货物装载的位置和货车相关,我们需要先设置好货车的位置,在货车角色中编写代码如下:
![图片[6]-scratch货物运输_第13届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-241.png)
当点击➕按钮的时候,给货车增加1箱货物,最多可以摆放6箱,为了记录货物的数量,我们建立一个变量”数量“,将其初始值设为0,在点击➕按钮时候,进行判断,如果数量小于6,则克隆货物,同时将数量增加1。
在增加按钮角色中,编写代码如下:
![图片[7]-scratch货物运输_第13届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-242.png)
需要说明的是,在Scratch中,我们可以在一个角色中克隆自己,也可以在一个角色中克隆其它角色。
每克隆一箱货物,我们都需要设置其ID,以区分不同的货物,同时要根据货物的ID来计算货物摆放的位置。6箱货物要分3层摆放,其中第一层3箱,第二层2箱,第三层1箱
其解决思路是这样的:先将货物本体移到第一箱货物的位置,如此一来,所有克隆出来的货物就都在此位置。接下来,根据货物ID来计算其位置偏移,如果ID小于4,则摆放到第一层,并在x坐标方向上向右偏移,偏移的距离和ID及货物长度有关;如果ID在3~6之间,则摆放到第二层,此时,y坐标需要向上偏移一箱货物的高度,x坐标则向右偏移;如果ID为6,则摆放到第三层,y坐标增加两箱货物的高度,x坐标增加1箱货物的长度。
在货物角色中编写代码如下:
![图片[8]-scratch货物运输_第13届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-243-503x1024.png)
注意:这里的变量”_ID“是私有变量,前面特地加了一个”_“,是便于区分全局变量和私有变量的。
执行代码,当我们点击➕按钮的时候,就可以按照题目要求装载货物了。
2. 卸载货物
当点击➖按钮的时候,货车上的货物按照摆放顺序的相反顺序减少1箱,换句话说,就是按照货物ID的相反顺序删除克隆体。如果当前数量为5,就删除ID为5的货物,同时数量就变成了4,再次点击➖按钮,则删除ID为4的货物。
你肯定已经找到规律了,就是每次删除的货物,其ID刚好等于当前的货物数量。在➖按钮角色中编写代码如下:
![图片[9]-scratch货物运输_第13届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-244.png)
然后切换到货物角色,接收”卸货“广播,完成卸货操作,其代码如下:
![图片[10]-scratch货物运输_第13届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-245.png)
再次回到➖按钮角色,接收”减少数量“广播,将数量减1,其代码如下:
![图片[11]-scratch货物运输_第13届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-246.png)
看到这里,你可能会有疑惑,直接在删除克隆体时将数量减1不就行了,为什么还要发送一个广播,在➖按钮角色中去减少数量呢,这不是变麻烦了吗?
这是个好问题,如果在删除克隆体之前,将数量减1,代码如图所示:
![图片[12]-scratch货物运输_第13届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-247.png)
只要点击➖按钮,所有的货物克隆体都会被删除,为什么呢?原因很简单,所有的克隆体都会接收”卸货“广播消息,都会执行这段代码,如果在一个克隆体删除之前,将数量减1,那么ID-1的货物刚好也满足条件”_ID=数量“,于是它也会被删除,依此类推,所有的克隆体都会满足这个条件,于是,所有的货物克隆体都被删除了。
3. 满载货物行驶
当货车上装满6箱货物后,载满货物的货车向舞台右侧行驶,此时货车和克隆体以相同的速度向右移动,直到舞台右边缘消失,装满货物的条件是什么呢?不就是”数量=6“么,是不是很简单。
切换到货车角色,在绿旗代码块下方,增加代码如下:
![图片[13]-scratch货物运输_第13届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-248.png)
注意这里的”等待0.1秒“指令,如果没有这个指令,可能会出现一点击绿旗货车就开始行驶的情况。因为上一次程序结束时,变量”数量“的值为6,当再次点击绿旗时,各个绿旗执行的顺序是随机的,一旦这段代码先执行,就立即满足数量=6的条件,因此,货车就开始向右移动了,增加一个”等待0.1秒“指令,可以确保其它角色的绿旗代码块先执行,数量就重新设置为0了。
相应的,货物要随货车一起前进,切换到货物角色,增加代码如下:
![图片[14]-scratch货物运输_第13届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-249.png)
说明两点:
1). 这里的速度要和货车的速度保持一致,即x坐标增加的步数是相同的,这里都是5步,但是”重复执行直到“指令中的条件并不一样,这是因为货车角色比较大,而货物角色比较小,所以他们到达右边缘时的x坐标是不一样的。
2). 这里的”等待数量=6“指令前面并没有添加”等待0.1秒“指令,其原因在于克隆体是在点击➕按钮时克隆出来的,因此不存在点击绿旗时就满足条件的情况。
至此,整个作品就创作好了,赶紧试试效果吧。
总结与思考
本题的总代码量为80个积木块左右,难度中等,涉及到的知识点主要包括:
- 事件编程,包括点击事件和事件广播机制;
- 克隆编程,熟练掌握克隆体的特性;
- 变量的使用,包括全局变量和私有变量,重点是私有变量和克隆的结合;
- Scratch坐标,熟悉舞台坐标系并灵活计算角色的坐标;
- 运动编程,灵活使用坐标来判断角色的位置。
从单个知识点来看,都是大家非常熟悉的内容,但是一旦需要将各个知识点融合起来解决一个具体需求时,部分考生就会遇到各种问题。这说明,对于知识点的学习是一方面,灵活运用则是另一方面,只要经过大量的编程实践,才能做到融会贯通,学以致用。
需要素材和源代码的,可以转到这里,货物运输-2022.5.29蓝桥杯国赛第4题。
暂无评论内容