消失的水母-第15届蓝桥第三次STEMA测评Scratch真题精选

[导读]:超平老师的《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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值