消除数字球-第15届蓝桥省赛Scratch初级组真题第5题

news2024/9/25 21:28:00

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第184讲。

如果想持续关注Scratch蓝桥真题解读,可以点击《Scratch蓝桥杯历年真题》并订阅合集,查阅教程更方便。

第15届蓝桥杯省赛已于2024年8月24日落下帷幕,编程题一共有5题,分别如下:

  • 猪八戒落地

  • 游乐场

  • 画西瓜

  • 找不同

  • 消除数字球

消除数字球,本题是2024年8月24日举行的第15届蓝桥省赛Scratch初级组编程第5题,题目要求编程创作一个消除数字球游戏。用鼠标点击任意两个小球,若点击的两个小球上的数字之和为 6,则这两个小球消除,如果没有可以消除的小球,那么游戏结束。

先来看看题目的要求吧。

一.题目说明

编程实现:

消除数字球。

用鼠标点击任意两个小球,若点击的两个小球上的数字之和为 6,则这两个小球消除,如果没有可以消除的小球,那么游戏结束。

具体要求:

1). 点击绿旗,变量“时长” 为0,在舞台的随机位置,瞬间呈现 6个随机数字的小球,如图所示;

2). 所有球不能碰到到舞台边缘,且球之间不能接触;

3). 全部小球呈现后,“时长” 开始每隔1秒增加1;

4). 点击任意两个小球,被点击的小球出现白色边框(表示选中状态),如图所示;

例如:鼠标分别点击舞台下方的数字为 4和 5的小球。

图片

5). 如果选中的两个小球上的数字之和不等于6,则两个小球的白色边框在 0.2秒后消失,如图所示;

6). 如果选中的两个小球上的数字之和等于6,则这两个小球在0.2秒后消失;

7). 重复执行“具体要求” 4)、5)、6),如果小球已经全部消除或者已经没有可以消除的小球,“时长”不再变化,2秒后程序结束。

评判标准:

  • 6 分:满足"具体要求"中的1);

  • 10分:满足"具体要求"中的2);

  • 2 分:满足"具体要求"中的3);

  • 8 分:满足"具体要求"中的4);

  • 18分:满足"具体要求"中的5);

  • 18分:满足"具体要求"中的6);

  • 18分:满足"具体要求"中的7)。

二.思路分析

本题只有一个角色,就是数字球,如图所示:

图片

不过,数字球的造型比较多,一共有10个,其中前5个是没有选中的数字球造型,如图所示:

图片

后5个是选中的数字球造型,如图:

图片

这是典型的消除小游戏,考查的知识点主要包括克隆技巧、变量、自制积木、事件广播和列表等。

类似的题目在第11届蓝桥杯省赛中出现过,可以参考《对对碰-第11届蓝桥杯Scratch省赛真题第6题》这篇教程,相比较而言,这道题要求更多,难度更大。

根据题目的描述,我们使用分解思维将作品拆分成如下3个核心部分:

  • 克隆6个数字球球

  • 消除数字球

  • 结束游戏

克隆小球本身比较简单,但是要确保小球不重叠的分布在舞台中,消除小球稍微麻烦一点,主要就是细节的处理。

真正有难度的是最后一步,如何判断游戏结束,这涉及到一个简单的算法---两数之和,接下来我们一一分析。

1. 克隆6个小球

克隆本身是比较简单的,只是这里有一个额外要求,所有球不能碰到到舞台边缘,且球之间不能接触。

这个场景在第14届国赛中的矿工挖宝作品出现过,它要求金块和钻石都不重叠,也不能接触舞台边缘,简章是一模一样,具体详情可以参考《矿工挖宝-第14届蓝桥杯国赛Scratch真题初中级组第4题》这篇教程。

解决这个问题的关键是要学会超平老师总结的一招”借鸡生蛋“。

图片

所谓借鸡生蛋,是指借助其它角色,拖出一个”碰到数字球“的指令,将其复制到数字球角色中,这样就可以在数字球角色中检查是否碰到其他数字球了。

2. 消除小球

每个小球都有两个状态,一个是未选中,一个是已选中,分别对应两个造型。仔细观察数字球造型,不难发现,同一个数字的造型编号相差5,因此,我们可以通过造型编号来区分小球的状态。

消除类游戏有一个非常显著的特点,就是当选中了两个之后才需要处理。一般的解决方案就是使用两个变量分别保存两个角色的信息,在本题中,我们需要保存选中小球对应的数字。

如图所示,定义两个变量”小球1“和“小球2”。

图片

在没有选中任何数字球的时候,它们的值都为0,在点击小球时,如果“小球1”为0,说明当前选中的是第一个数字球,否则就是第二个数字球,相应的将数字球对应的数字保存到两个变量中,同时要改变造型。

一旦选中了两个小球,就需要进行判断了,如果“小球1” + “小球2” = 6,就需要在0.2秒之后删除这两个数字球克隆体,否则就切换造型,恢复到未选中状态,同时别忘了将两个变量重新设置为0。

复原比较简单,麻烦的是如何删除两个选中的数字球,主要是第一个被选中的数字球,在点击第二个数字球的时候,怎么知道哪一个数字球是第一次选中的呢?

最好的办法莫过于使用私有变量ID,每个数字球进行编号,再使用一个变量将第一个选中的数字球编号保存起来,这就是“自私的ID”模型。

当然,这其中还有一些细节,具体实现时再进行分析。

3. 结束游戏

这是本题最难的一点,游戏结束的条件就是所有和为6的小球组(两个一组)都被消除了,这个要怎么计算呢?

这个有点类似于经典的A+B算法问题,通常可以结合列表来解决。

假定生成的数字球有2、5、4、3、2和3,如图所示:

图片

我们将对应的数字保存到”数字球“列表中,同时定义一个变量”对数量“表示和为6的数字对数量。

我们可以使用如下4个步骤来统计成对数量:

  • 获取列表中的第一项,计算6和第一项的差,将其保存到变量”“中;

  • 删除列表的第一项;

  • 判断列表中是否存在等于”“的数字,如果存在,说明存在一组数字和为6,将变量”成对数量“加1,同时删除等于”“ 的列表项(删除一项即可),如果不存在,则不做处理;

  • 重复上面的3个步骤,直到列表为空。

以上面的”数字球“列表为例来理解这一过程。

初始时,列表中有6个数字,如图:

图片

1). 第一次处理:

  • 获取列表的第1项,其值为2,对应的”“ = 6 - 2 = 4;

  • 删除第1项,列表只剩下5项,分别为5、4、3、2、3

  • 由于列表中包含4,就将变量”成对数量“加1;

  • 删除值为4的列表项;

经过第一次处理,列表只剩下4项,如下所示:

图片

2). 第二次处理:

  • 获取列表的第1项,其值为5,对应的”“ = 6 - 5 = 1;

  • 删除第1项,列表只剩下3项,分别为3、2、3;

  • 由于列表中不包含1,不做任何处理;

经过第二次处理,列表只剩下3项,如下所示:

图片

3). 第三次处理:

  • 获取列表的第1项,其值为3,对应的”“ = 6 - 3 = 3;

  • 删除第1项,列表中只剩下两项,分别为2和3;

  • 由于列表中包含3,就将变量”成对数量“加1;

  • 删除值为4的列表项;

经过第三次处理,列表只剩下1项,如下所示:

图片

4). 第四次处理:

  • 获取列表的第1项,其值为2,对应的”“ = 6 - 2 = 4;

  • 删除第1项,列表没有任何数据项;

  • 由于列表中不包含4,不做任何处理;

经过第四次处理,列表为空,如下所示:

图片

通过上面的处理,我们可以统计出”成对数量“为2,其实逻辑并不复杂,只是很多孩子不太容易想到这个方法。

一旦知道了成对数量,在消除一对数字球的时候,就可以将变量减1,当变量减到0时,说明游戏结束了。

思路有了,接下来,我们就进入程序实现环节。

三.编程实现

根据上面的思路分析,我们分4步来完成作品:

  • 克隆6个数字球

  • 计时功能

  • 消除数字球

  • 游戏结束

1. 克隆6个数字球

根据前面的思路分析,先定义一个自制积木用于瞬间生成6个数字小球,代码如下:

图片

代码比较简单,强调两点:

1). 定义自制积木时,一定要勾选”运行时不刷新屏幕“选项;

2). _ID必须是私有变量,后面在消除小球时需要用到;

然后在绿旗代码块中,调用自制积木,代码如下:

图片

对于每个克隆体小球,要求所有球不能碰到到舞台边缘,且球之间不能接触。根据前面的分析,需要再定义一个自制积木,代码如下:

图片

之所以要定义成自制积木,是要确保玩家看不到重新随机位置的过程,千万别忘了勾选”运行时不刷新屏幕“选项。

在”当克隆体启动时“指令中调用这个自制积木即可,代码如下:

图片

如此一来,我们就顺利地搞定了要求1)和2),18分到手了,随机数字球的效果如下:

图片

2. 计时功能

这一步非常简单,创建一个变量”时长“,在绿旗代码中继续编写代码如下:

图片

轻轻松松的2分又到手了,够简单吧。

3. 消除小球

需要定义两个变量”小球1“和”小球2“,分别表示两个选中小球的数字,并在绿旗代码块中初始化为0,如图:

图片

然后就是点击小球的处理,在Scratch编程中,角色点击通常有如下两种实现方式:

  • 使用事件指令”当角色被点击“;

  • 使用侦测指令”角色被点击“;

本题有明确要求要停止游戏,这说明当游戏结束时,不能再点击小球了,显然使用第二种方式更加合理。

使用侦测指令来检测是否点击了克隆体小球,在”当克隆体启动时“代码块中增加如下代码:

图片

代码不少,说明9点:

1). 需要反复检测是否被点击,因此使用循环来处理;

2). 点击克隆体小球时,其实就是按下鼠标,并且克隆体碰到了鼠标指针,这里使用了”等待条件“指令,可以减少嵌套的层数;

3). 为了避免点击一个小球不松开,因此加入了一个”等待按下鼠标不成立“的组合指令,效果更好;

4). 在点击小球时,只有未选中的小球才可以点击,也就是造型编号 < 6的小球才需要处理;

5). 一旦小球被点击,首先需要切换成选中状态,其实就是切换成”造型编号+5“的造型;

6). 如果变量”小球1“为0,说明点击的是第一个数字球,设置”小球1“的值,注意这个值是未选中状态时的数字,因此它等于”造型编号 - 5“;

7). 根据前面的思路分析,第一个被选中的小球需要记录下来,因此将其编号ID保存到变量”第一个小球“中,这个变量需要提前准备好;

8). 如果”小球1“不为0,说明当前选中的是第二个数字球,设置变量”小球2“的值,和小球1一样,它等于”造型编号 - 5“,即未选中时的数字;

9). 如果点击的是第二个小球,因此需要处理这两个小球,为了方便讲解,这里使用了一个自制积木”处理一组小球“,这个不是必须的,但是当代码较多时,用自制积木不失为一个好方法。

如何处理一组小球呢,继续编写自制积木如下:

图片

当两个小球的数字和为6时,需要删除两个数字球,第一个被选中的数字球在接受到“消除“广播时,需要删除自己,代码如下:

图片

当两个小球的数字和不等于6时,需要复原,对应的代码如下:

图片

代码不难,强调3个细节:

1). 为了确保代码执行顺序,这里使用了”广播并等待“指令,尤其是消除两个小球时;

2). 不管是删除还是复原,都需要将变量”小球1“和”小球2“重新设置为0;

3). 当消除两个数字球时,成对数量相应的减1,提前创建好这个变量,后面还会用到;

到这里,不知不觉我们已经完成了题目要求的第4)、5)、6)项,这3项加起来的分数是44分,有一定的难度,但也没有想象中的那么复杂。

4. 结束游戏

根据前面的分析,需要借助列表来统计成对数量,先创建一个列表“数字球”,将其初始化为空。

克隆数字球时,将每个数字球的造型编号加入列表,在克隆体随机造型时增加一行指令,如下:

图片

再定义一个自制积木来统计成对数量,代码如下:

图片

在上面的思路分析中,已经进行了详细讲解,这里就不再啰嗦了。

在绿旗代码块中,调用自制积木,如下:

图片

一共增加了3个指令,强调两点:

1). 一定要记得先清空列表;

2). 在调用自制积木之前等待了0.1秒,是确保列表中的数据已经全部就绪;

最后就是结束游戏了,当变量“成对数量”变为0时,就可以停止脚本了。

我们可以单独的写一段代码,也可以将计时的循环改成条件循环,相对来说,后者会更好一些。

修改代码如下:

图片

对应的,在接收“结束”消息时,停止脚本,代码如下:

图片

这里并没有直接使用“停止全部脚本”指令,是确保没有消除的小球还显示在舞台上,如果停止全部脚本,那么所有的克隆体都会消失,效果要差一点。

至此,整个作品就创作好了,是时候来测试自己的作品啦。

四.总结与思考

本题是初级组编程部分第5题,分数为80分,积木块数量100个左右,涉及到的知识点主要包括:

  • 克隆编程;

  • 自制积木;

  • 私有变量;

  • 事件广播机制;

  • 列表及相关处理;

作为本次初级组省赛的第5题,也是压轴题,难度较大,完成时间30分钟左右。本题的难点有3个,一是如何确保生成的数字球不能相互重叠,二是如何消除和为6的数字小球,三是如何统计成对数量。

关于第一个问题,超平老师总结了一个“借鸡生蛋”的编程小技巧,在历届蓝桥杯比赛中,至少已经出现了3次。第一次是14届国赛中的《矿工挖宝》作品,第二次是2024年1月28日STEMA测评中的《栽花》作品,这是第三次。

关于第二个问题,其实有很多类似的作品,除了11届省赛中的《对对碰》作品,超平老师的编程课中,也有不少同类型作品。

比如,甲骨文解密作品,如图:

图片

再比如,数学记忆翻牌游戏,如图:

图片

所以说,在平时学习的过程中,要尝试创作各种不同的作品,见多识广嘛。

第三点,如何统计成对数量是最难的,但是如果你仔细查看题目需求,发现只一步只有18分,从考试策略的角度来讲,完全可以不要嘛。

你把其它的全部做好做对,一等奖肯定就到手了,如果还有时间,再来研究研究,你说呢?

你还有什么好的方法吗,非常欢迎您和超平老师交流分享。

如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2126031.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python程序使用nohup后台执行不能实时输出到定向文件的解决方法

问题描述&#xff1a;使用nohup命令后台执行python&#xff0c;但python中print方法打印结果不能实时输出到nohup后台定向文件&#xff0c;只能在程序结束时一次性输出。典型问题样例&#xff1a;在python中使用了os.system(command)方法&#xff0c;command命令打印的结果可以…

免费爬虫软件“HyperlinkCollector超链采集器v0.1”

HyperlinkCollector超链采集器单机版v0.1 软件采用python的pyside2和selenium开发,暂时只支持window环境&#xff0c;抓取方式支持普通程序抓取和selenium模拟浏览器抓取。软件遵守robots协议。 首先下载后解压缩&#xff0c;然后运行app目录下的HyperlinkCollector.exe 运行…

网页与App无缝衔接,揭秘拉起应用的黑科技!

随着移动互联网的飞速发展&#xff0c;App已经成为了我们日常生活中不可或缺的一部分。然而&#xff0c;在推广和运营App的过程中&#xff0c;如何让用户更便捷地从网页跳转到App&#xff0c;一直是困扰推广者的难题。今天&#xff0c;我们就来聊聊网页拉起应用这一黑科技&…

开源 AI 智能名片 S2B2C 商城小程序中的全渠道供应策略

摘要&#xff1a;本文深入探讨在开源 AI 智能名片 S2B2C 商城小程序的情境下&#xff0c;全渠道供应的运行机制。阐述各环节企业相互配合的重要性&#xff0c;重点分析零售企业在其中的关键作用&#xff0c;包括协调工作、信息传递、需求把握等方面&#xff0c;旨在实现高效的全…

Python中的上下文管理器:提升代码的优雅与安全

在编写Python程序时&#xff0c;处理资源&#xff08;如文件、网络连接、数据库会话等&#xff09;的正确打开和关闭至关重要。不当的资源管理可能导致内存泄漏、数据损坏等问题。幸运的是&#xff0c;Python提供了一种优雅的方式来解决这个问题——上下文管理器。本文将探讨上…

象过河轮胎进销存,轻松管理进出库以及废旧轮胎回收

在轮胎行业&#xff0c;高效的进销存管理与废旧轮胎的回收是两大核心挑战&#xff0c;象过河轮胎进销存应运而生。软件专为轮胎行业量身定制&#xff0c;从进货&#xff0c;销售&#xff0c;到库存盘点&#xff0c;财务&#xff0c;轮胎废旧回收等一体化管理&#xff0c;以科技…

【每日刷题】Day118

【每日刷题】Day118 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 123. 买卖股票的最佳时机 III - 力扣&#xff08;LeetCode&#xff09; 2. 188. 买卖股票的最佳时…

如何用python打开csv文件路径

python读取CSV文件方法&#xff1a; 方法1&#xff1a;可先用以下代码查看当前工作路径&#xff0c;然后将CSV文件放在该路径下。 import os os.getcwd() 方法2&#xff1a;&#xff08;绝对路径&#xff09; import pandas as pd iris_trainpd.read_csv(E:\Study\DataSets\ir…

树莓派最强大的应用商店,你知道嘛?

Pi-Apps —— Raspberry Pi 最强大的应用商店 不久前&#xff0c;我获得了我的第一台Raspberry Pi。和大多数从Windows转移到Linux&#xff08;特别是Raspberry Pi用户&#xff09;的用户一样&#xff0c;我被这些问题困扰得快要疯了&#xff1a; 如何在我的Raspberry Pi上安装…

vue3 响应式API customRef()

使用ref()定义响应式数据&#xff1a; <template><div><div>{{ inputValue }}</div><input type"text" v-model"inputValue"></div> </template> <script setup lang"ts"> import { ref } fro…

测测万用表?合宙功耗分析仪Air9000Air9000P齐出动

当心&#xff01;那个被你遗忘的万用表&#xff0c;可能正在偷偷“吃”电&#xff01; 万用表不关是一个常见的错误&#xff0c; 指的是在使用万用表进行测量后&#xff0c;没有关闭或断开电路而直接离开。 这样做可能会导致电池耗尽&#xff0c;影响测量结果&#xff0c;甚…

解决报错 ‘numpy‘ has no attribute ‘bool8‘. Did you mean: ‘bool‘?

定位到报错的文件中 将所有bool8都修改为bool_ 一开始按照错误信息提示修改源码为bool还是会显示错误 这是因为&#xff1a; 目前最新的的NumPy版本版本中布尔类型的接口已经改为bool_。 通过查找可以定位到所有错误使用了bool8的位置&#xff08;上图是我修改之后再次查询…

什么是CPU、GPU、NPU?(包懂+会)

目录 举例子 CPU&#xff1a;主厨 GPU&#xff1a;大量的厨房助理 NPU&#xff1a;面包机 总结 讲理论 CPU&#xff08;中央处理器&#xff09; GPU&#xff08;图形处理单元&#xff09; NPU&#xff08;神经网络处理单元&#xff09; 对比分析 举例子 CPU&#xff…

【CAPL实战】解决调用LIN函数不生效问题

测试背景&#xff1a; 被测样件为LIN节点&#xff0c;进行LIN唤醒测试。添加LDF文件后&#xff0c;在vTESTstudio中编写CAPL自动化脚本通过调用LINwakeup()函数来实现唤醒测试。测试结果是唤醒不成功&#xff0c;通过示波器观测发现并没有唤醒脉冲发出&#xff0c;也就是说调用…

JVM基础概念

一、JVM概述 1. 为什么要学习JVM&#xff1f; 线上系统突然宕机&#xff0c;系统⽆法访问&#xff0c;甚⾄直接 OOM &#xff1b; 线上系统响应速度太慢&#xff0c;优化系统性能过程中发现 CPU 占⽤过⾼&#xff0c;原因是因为 JVM 的 GC 次 数过于频繁&#xff1b; 新项⽬…

OJ 最接近的三数之和

题目&#xff1a; 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数&#xff0c;使它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在恰好一个解。 提示&#xff1a; 3 < nums.length < 1000-1000 < nums[i] < …

【计算机毕设-软件开发类】基于SpringBoot的食品安全管理平台

&#x1f497;博主介绍&#xff1a;✌全平台粉丝5W,高级大厂开发程序员&#x1f603;&#xff0c;博客之星、掘金/知乎/华为云/阿里云等平台优质作者。 【源码获取】关注并且私信我 【联系方式】&#x1f447;&#x1f447;&#x1f447;最下边&#x1f447;&#x1f447;&…

c++188深拷贝和浅拷贝

在全局区字符串 浅拷贝 拷贝指针变量的值而不是内存空间 obj2已经析构了 又进行了一次析构 深拷贝&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std;class Name { public:Name(const char* myp){//开辟一个内存把dhfka传入int le…

Java综合实践——学生成绩查询系统

此系列文章收录大量Java经典代码题&#xff08;也可以算是leetcode刷题指南&#xff09;&#xff0c;剩余文章指路Java题集。希望可以与大家一起探索Java的神秘。3、2、1&#xff0c;请看&#xff01; 本篇文章将带大家一起来写一个学生成绩查询系统。 目录 系统呈现效果 前…

亚马逊跨境蓝海选品思路和方法(实操建议版)

跨境电商中&#xff0c;“七分靠选品&#xff0c;三分靠运营”。这句话强调了产品在店铺中的重要性&#xff0c;选品的好坏直接影响到后续推广的成败。 如何正确选择产品我们先从思路入手&#xff0c;明确自己的选品思路。以下是几点选品思路的总结和使用店雷达选品的技巧。 …