[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第165讲。
第15届蓝桥杯第3次STEMA测评已于2023年12月17日落下帷幕,编程题一共有6题,分别如下:
消失的水母,本题是2023年12月17日举行的第15届蓝桥STEMA测评Scratch编程中级组编程第6题,题目要求编程创作消失的水母。当用户输入一个2~10之间的数字后,在舞台随机出现大小不同的水母,每按下一次空格键就将最大的水母删除掉。
先来看看题目的要求吧。
编程实现:
消失的水母。
具体要求:
1). 每次点击绿旗,水母说“请输入2~10的整数”,同时在舞台下方显示输入框,如图所示;
2). 输入完成后,在舞台的随机位置,出现输入数量的水母,水母不碰到舞台边缘且大小随机(随机范围为50~150),如图所示;
例如:输入的是5
3). 等待1秒后,每只水母一直说自己的大小,如图所示;
4). 然后,当第一次按下空格键时,最大的水母消失,如图所示;
5). 接下来每按下一次空格按键,当前最大的水母都会消失,当所有水母都消失后,程序结束。
评判标准:
8分:满足"具体要求"中的1);
20分:满足"具体要求"中的2);
12分:满足"具体要求"中的3);
15分:满足"具体要求"中的4);
45分:满足"具体要求"中的5)。
本题只有1个水母角色,如图所示:
对于水母角色而言,基本上只有克隆、说话和消失几个动作,很显然,这又是一道以算法为主的作品。
根据题目的描述,可以将本题的核心功能拆分成如下两大模块:
克隆水母
从大到小依次删除水母
这里的难点在于如何按照从大到小的顺序依次删除水母,又是排序,是不是又回到咱们熟悉的场景---列表排序。
传统的思路是在克隆水母时,将水母的大小保存到列表中,然后对列表进行排序,在按下空格键的时候,每次取出最大的一项,并将对应的水母删除,同时在列表中删除最大项。
按照这个思路编写程序是能够满足题目要求的,但是有一个细节需要注意,如果随机出来的水母大小相同,在按下空格键的时候,会删除多个。这就要求我们在随机水母大小的时候,确保没有重复的数字。
上面的思路是先有水母,然后才有列表数据,我们完全可以转换一下思路,反其道而行之。
具体来说,就是先构造随机列表,确保列表中没有重复的数据,然后再根据列表中的数据来克隆水母;在按下空格键的时候,找到列表的最大项,将对应的水母删除,同时删除最大项。
看起来只是顺序上的调整,但是后者的逻辑更加清晰,其实这是编程中经典的数据思维。
思路有了,接下来,我们就进入具体的编程实现环节。
根据上面的思路分析,我们分5步来编写程序:
准备工作
构造随机列表
克隆水母
获取列表最大值
依次删除水母
1. 准备工作
准备工作比较简单,设置好水母的位置和大小,然后询问,具体的代码如下:
2.?构造随机列表
水母的数量并不是固定的,它是根据用户输入来定的,范围是2~10之间,所以,列表的项目数也是不固定的。
为了方便,我们使用自制积木来构造随机列表,编写代码如下:
简单说明3点:
1).?自制积木使用了参数”数量“,调用自制积木时,传入具体的数字,就可以构造相应的列表;
2). 在插入之前,一定要先清空列表;
3).?水母的大小要求在50~150之间,由于需要判断每次随机的数字是否重复,因此使用了一个”随机大小“变量,如果列表中包含这个数据,说明重复了,就重新生成,直到没有重复为止。
有了这个自制积木,当你输入一个数字后,就可以构造好一个随机列表了。
3. 克隆水母
有了列表数据,就可以克隆水母了,并根据列表中的数据依次设置大小,继续编写代码如下:
代码不难,说明4点:
1). 先调用自制积木构造列表,再将本体隐藏起来;?
2). 利用克隆体的继承特性,在克隆之前,设置好水母的位置和大小;
3). 设置水母坐标时,和舞台边缘要保留一定的距离;
4).?在循环取出列表数据时,需要使用计数器变量,就是这里的变量"i";
对应的,需要将克隆体显示出来,1秒之后,说出自己的大小,编写代码如下:
需要说明的是,在Scratch编程中,”大小“指令相当于是私有变量,每个克隆体都有自己的大小。
4. 获取列表最大值
根据前面的思路分析,在按下空格键时,要找到列表中的最大项,我们可以将这部分功能定义成自制积木,代码如下:
代码稍微有些复杂,简单说明4点:
1). 获取最大值的过程其实就是比较的过程,如果当前项比最大值还大,那么就将最大值设置为当前项,直到列表中所有项都比较完;
2). 整个过程使用了3个变量,其中变量"i"是计数器,?用于获取每一个列表项,变量"最大值"用来表示当前列表中最大的数字,变量”最大值编号“用来保存最大项的编号,以便于循环完成后删除最大的列表项;
3).?由于列表中的数据大小都在50~150之间,所以可以将”最大值“的初始值设置为0;
4). 找到列表中的最大值,一定要记得删除,表示该水母已经删除了。
5. 依次删除水母
当按下空格键时,要删除当前最大的水母,直到所有的水母都消失,在绿旗代码块下继续编写代码如下:
代码比较简单,说明3点:
1). 按下空格键需要重复判断,直到列表清空,即所有的水母都删除完毕;?
2).?对于空格键的按键处理,不要直接使用事件模块中的”当按下空格键“指令,应该写在本体当中,因为克隆体也能响应事件指令;
3).?避免在按下空格键时一次删除多个水母,需要加上松开空格键的判断,也就是”按下空格键不成立“;
在找到最大的水母后,发送了一个”消失“的广播消息,克隆体在接收到广播后需要判断并删除,代码如下:
这样一来,在按下空格键时,就可以将当前最大的水母删除掉。
至此,整个作品就创作好了,你可以输入不同的数字来测试作品的效果啦
本题是中级组编程部分第6题,分数为100分,积木块数量75个左右,涉及到的知识点主要包括:
Scratch问答指令;
循环编程,包括指定次数循环和直到循环;
条件编程;
变量的使用;
列表的运算;
克隆编程;
获取最大值的算法;
这是中级组最后一题,难度较大,完成时间25分钟左右,难点有两个,一是如何生成随机大小的水母并确保没有相同大小的水母,二是每次找到最大的水母将其删除。
在编程创作的时候,我们不仅要看到水母的显示和删除效果,更应该看到其后面的列表数据。我们真正要处理的是数据,包括数据的增加、删除、修改和查询,然后再控制角色根据数据来展示不同的效果,这就是数据驱动显示的编程思想。
这就需要我们将数据和显示进行拆分,先处理好数据,再来考虑角色如何显示。实际上,很多作品都可以采用这种编程思想,一定要好好体会哦。
超平老师给你留一个思考题,如果我们允许有相同大小的水母,但每次只能删除一只水母,上面的程序能满足这个需求吗,为什么呢?
你知道如何编程实现吗,赶紧动手试试吧。
如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香。
需要素材和源码的,可以移步至“超平的编程课”gzh。