货物运输-第13届蓝桥杯Scratch国赛真题第4题

[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第26讲。

第13届蓝桥杯青少年组国赛于2022年5月29日举行,形式为在线考试。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。

货物运输,本题是第13届蓝桥杯Scratch国赛真题编程第4题,初级组和中级组都有此题。题目要求考生编程模拟货物运输效果,包括装载货物、卸载货物和满载货物行驶。

先来看看题目的要求吧。

一.题目说明

编程实现:

货物运输。

具体要求:

1). 点击绿旗,角色、背景如图所示;

2). 每点击一次加号图标,货车上的货物增加1箱(货物最多摆放6箱,共三层,第一层3箱,第二层2箱,第三层1箱,摆放顺序为从第一层开始,每层按照从左到右的顺序摆放);

3). 每点击一次减号图标,货车上的货物按照摆放顺序的相反顺序减少1箱;

4). 当货车上装满6箱货物后,载满货物的货车向舞台右侧行驶(能看到移动效果);

5). 载满货物的货车行驶到舞台右侧边缘消失。

评判标准:

  • 10分:满足“具体要求”中的1);

  • 20分:满足“具体要求”中的2);

  • 20分:满足“具体要求”中的3);

  • 20分:满足“具体要求”中的4);

  • 10分:满足“具体要求”中的5)。

二.思路分析

本题一共要实现如下三个功能:

1). 装载货物

2). 卸载货物

3). 满载货物行驶

装载货物的过程,其实就是克隆货物的过程,卸载货物则是删除相应的克隆体,满载货物行驶,则是让克隆体和火车一起运动。

相信聪明的你已经发现了,处理都和克隆相关,所以解决本题的关键就是如何精确的控制每一个克隆体,包括它的位置、删除顺序。

在Scratch中,每个克隆体都和本体一样,具备相同的特征,包括它的大小、造型、位置等。为了区分不同的克隆体,我们可以借助私有变量,给每个克隆体添加一个ID,并设置为不同的值,然后我们就可以区分它们了。

三.编程实现

根据上面的思路分析,我们将分4步来编写程序:

  • 装载货物

  • 卸载货物

  • 满载货物行驶

1. 装载货物

本题一共有4个角色,分别是货物、增加按钮、减少按钮和货车,如图所示:

其中,➕按钮和➖按钮一直位于舞台左上方,货车处于舞台的左下方,而货物装载的位置和货车相关,我们需要先设置好货车的位置,在货车角色中编写代码如下:

当点击➕按钮的时候,给货车增加1箱货物,最多可以摆放6箱,为了记录货物的数量,我们建立一个变量”数量“,将其初始值设为0,在点击➕按钮时候,进行判断,如果数量小于6,则克隆货物,同时将数量增加1。

在增加按钮角色中,编写代码如下:

需要说明的是,在Scratch中,我们可以在一个角色中克隆自己,也可以在一个角色中克隆其它角色

每克隆一箱货物,我们都需要设置其ID,以区分不同的货物,同时要根据货物的ID来计算货物摆放的位置。6箱货物要分3层摆放,其中第一层3箱,第二层2箱,第三层1箱

其解决思路是这样的:先将货物本体移到第一箱货物的位置,如此一来,所有克隆出来的货物就都在此位置。接下来,根据货物ID来计算其位置偏移,如果ID小于4,则摆放到第一层,并在x坐标方向上向右偏移,偏移的距离和ID及货物长度有关;如果ID在3~6之间,则摆放到第二层,此时,y坐标需要向上偏移一箱货物的高度,x坐标则向右偏移;如果ID为6,则摆放到第三层,y坐标增加两箱货物的高度,x坐标增加1箱货物的长度。

在货物角色中编写代码如下:

注意:这里的变量”_ID“是私有变量,前面特地加了一个”_“,是便于区分全局变量和私有变量的。

执行代码,当我们点击➕按钮的时候,就可以按照题目要求装载货物了。

2. 卸载货物

当点击➖按钮的时候,货车上的货物按照摆放顺序的相反顺序减少1箱,换句话说,就是按照货物ID的相反顺序删除克隆体。如果当前数量为5,就删除ID为5的货物,同时数量就变成了4,再次点击➖按钮,则删除ID为4的货物。

你肯定已经找到规律了,就是每次删除的货物,其ID刚好等于当前的货物数量。在➖按钮角色中编写代码如下:

然后切换到货物角色,接收”卸货“广播,完成卸货操作,其代码如下:

再次回到➖按钮角色,接收”减少数量“广播,将数量减1,其代码如下:

看到这里,你可能会有疑惑,直接在删除克隆体时将数量减1不就行了,为什么还要发送一个广播,在➖按钮角色中去减少数量呢,这不是变麻烦了吗?

这是个好问题,如果在删除克隆体之前,将数量减1,代码如图所示:

只要点击➖按钮,所有的货物克隆体都会被删除,为什么呢?原因很简单,所有的克隆体都会接收”卸货“广播消息,都会执行这段代码,如果在一个克隆体删除之前,将数量减1,那么ID-1的货物刚好也满足条件”_ID=数量“,于是它也会被删除,依此类推,所有的克隆体都会满足这个条件,于是,所有的货物克隆体都被删除了。

3. 满载货物行驶

当货车上装满6箱货物后,载满货物的货车向舞台右侧行驶,此时货车和克隆体以相同的速度向右移动,直到舞台右边缘消失,装满货物的条件是什么呢?不就是”数量=6“么,是不是很简单。

切换到货车角色,在绿旗代码块下方,增加代码如下:

注意这里的”等待0.1秒“指令,如果没有这个指令,可能会出现一点击绿旗货车就开始行驶的情况。因为上一次程序结束时,变量”数量“的值为6,当再次点击绿旗时,各个绿旗执行的顺序是随机的,一旦这段代码先执行,就立即满足数量=6的条件,因此,货车就开始向右移动了,增加一个”等待0.1秒“指令,可以确保其它角色的绿旗代码块先执行,数量就重新设置为0了。

相应的,货物要随货车一起前进,切换到货物角色,增加代码如下:

说明两点:

1). 这里的速度要和货车的速度保持一致,即x坐标增加的步数是相同的,这里都是5步,但是”重复执行直到“指令中的条件并不一样,这是因为货车角色比较大,而货物角色比较小,所以他们到达右边缘时的x坐标是不一样的。

2). 这里的”等待数量=6“指令前面并没有添加”等待0.1秒“指令,其原因在于克隆体是在点击➕按钮时克隆出来的,因此不存在点击绿旗时就满足条件的情况。

至此,整个作品就创作好了,赶紧试试效果吧。 

四.总结与思考

本题的总代码量为80个积木块左右,难度中等,涉及到的知识点主要包括:

  • 事件编程,包括点击事件和事件广播机制;

  • 克隆编程,熟练掌握克隆体的特性;

  • 变量的使用,包括全局变量和私有变量,重点是私有变量和克隆的结合;

  • Scratch坐标,熟悉舞台坐标系并灵活计算角色的坐标;

  • 运动编程,灵活使用坐标来判断角色的位置。

从单个知识点来看,都是大家非常熟悉的内容,但是一旦需要将各个知识点融合起来解决一个具体需求时,部分考生就会遇到各种问题。这说明,对于知识点的学习是一方面,灵活运用则是另一方面,只要经过大量的编程实践,才能做到融会贯通,学以致用。

如果你觉得文章对你有所帮助,别忘了点赞,你的鼓励是我坚持继续写下去的最大动力,Thanks♪(・ω・)ノ。

需要作品素材或源码的,可以联系本人。

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值