[导读]:超平老师的《**Scratch蓝桥杯真题解析100讲》**已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第171讲。
第15届蓝桥杯第4次STEMA测评已于2024年1月28日落下帷幕,编程题一共有6题,分别如下:
**专注力训练游戏,**本题是2024年1月28日举行的第15届蓝桥STEMA测评Scratch编程初/中级组编程第5题。题目要求编程创作一个专注力训练游戏,在九宫格中按随机顺序出现1~9这9个数字,玩家必须按照顺序依次点击数字才能完成游戏。
先来看看题目的要求吧。
一.题目说明
编程实现:
专注力训练游戏。
具体要求:
1). 点绿旗,变量"用时"为0,背景如图所示;
2). 1秒后, 1、2、3、......、9这9个数随机出现在九宫格中,如图所示;
注意:每行的三个数字y坐行相同,每列的三个数字x坐标相同,行间距和列间距相同。
3). 九宮格里的数字完全呈现后,"用时"开始每隔1秒增加1;
4). 按顺序依次点击1、2、3、......、9,开始点击1时,1会消失,下一次只有点击2时,2会消失,点击其他数字无任何效果,以此类推;(参考视频)
5). 全部数字都消失后,"用时" 不再变化,背景如图所示。
评判标准:
-
5分:满足"具体要求"中的1);
-
27分:满足"具体要求"中的2);
-
8分:满足"具体要求"中的3);
-
30分:满足"具体要求"中的4);
-
10分:满足"具体要求"中的5)。
二.思路分析
本题只有1个数字角色,如图所示:
对于数字角色一共有9个造型,分别表示数字1~9,如图:
对应的,舞台背景有两个,背景1表示游戏中,背景2表示游戏胜利,如图:
本题是一道经典的九宫格问题,考查的知识点主要包括列表、克隆、变量和算法等。
根据题目的描述,我们使用计算思维中的拆分思想将游戏分成如下4个部分:
-
克隆九宫格数字
-
确保9个数字随机出现
-
依次点击数字
-
计时功能
其中,第一步比较简单,直接使用超平老师总结的"克隆4兄弟模型",可以快速完成,只是不能保证9个数字是随机出现的。
因此,第二步的任务就是确保9个数字是随机出现的,这需要使用列表,同时结合插队算法,就可以让1~9按照随机顺序插入到列表。
插队是一种不文明的现象,在生活中随处可见,相信你肯定非常熟悉。
那什么是插队算法呢,简单来说,就是当前有N个人,如果允许随意插队,那么你可以选择的位置有N+1个,举例说明如下:
当前0人,你就是第1名,只有1个位置;当前1人,插队,排第1名,不插队,排第2名,有2个位置可选;当前2人,插到最前面,排第1名,插到中间,排第2名,不插队,排第3名,有3个位置可选;......当前N人,则有N + 1个位置可选;
结合列表中的插入指令和随机数指令就可以轻松实现数字的插入,如图所示:
再通过循环和变量,就可以轻松地将数字1~9按随机顺序插入到列表中,效果如下:
有了这个列表,我们就可以按照列表中的数字依次设置每个克隆体的造型。
接下来是第3步,依次点击数字,这里需要弄清楚两个问题:
1). 被点击的数字是几?
2). 即将要消失的数字是几?
第一个问题非常简单,每个克隆体都有自己的造型,直接使用造型编号或造型名称即可。
第二个问题也不难,数字是按照顺序依次消失的,可以创建一个变量表示即将要消失的数字,初始值设置为1,每消失一个数字,将变量加1即可。
第4步是计时,这个就比较简单了,结合变量和循环就可以,需要注意计时结束的条件。
思路有了,接下来,我们就进入具体的编程实现环节。
三.编程实现
根据上面的思路分析,我们分5步来编写程序:
-
初始化工作
-
构造随机列表
-
克隆九宫格
-
依次点击数字
-
计时功能
1. 初始化工作
准备工作包括如下几个:
-
舞台背景的设置
-
创建变量并初始化
-
隐藏本体
在数字角色中编写代码如下:
2. 构造随机列表
创建一个列表"数字",根据前面的思路分析,将构造随机列表的代码定义成自制积木,代码如下:
代码不多,强调两点:
1). 在插入数据之前一定要将列表清空;
2). 从1开始,依次插入1~9,对于数字1而言,只有1个位置,数字2则有两个位置,数字9有9个位置,也就是说数字i,有i个位置,所以随机数的范围是1~i之间。
这就是强大的插队算法,代码其实不多,关键在于理解和灵活运用。
3. 克隆九宫格
这是一个典型的3行3列排列效果,最简单的莫过于使用"克隆4兄弟模型",在克隆的同时,按照列表数据依次切换本体的对应造型。
为了方便,仍然使用自制积木来组织代码,如下:
代码有点多,说明3点:
1). 这里再一次使用了变量"i",i的作用就是用作计数器,可以反复使用,但是要注意重新初始化;
2). 题目提供的参考视频中,数字是挨个克隆出来的,所以自制积木不需要勾选"运行时不刷新屏幕"。
有了上面定义的两个自制积木,就可以按照题目要求克隆好九宫格了,在绿旗中增加代码如下:
注意,在克隆数字之前,需要等待1秒。对应的,需要将克隆体显示出来,编写代码如下:
4. 依次点击数字
先创建一个变量"序号",表示即将要消失的数字,将初始值设为为1,在绿旗中增加代码如下:
然后就是在点击克隆体的时候,判断其造型编号和序号是否相等,代码如下:
这样一来,就可以按照顺序依次点击数字并使其消失了。
5. 计时功能
这一步比较简单,每隔1秒将变量加1,当序号等于10时,说明所有的数字都消失了,计时结束,在绿旗代码中继续编写代码如下:
代码不难,说明3点:
1). 计时功能应该写在绿旗代码中,不要在克隆体中编写,因为克隆体有多个;
2). 计时的时候,应该先"等待1秒 ",再"将用时增加1",不要搞反了;
3). 计时结束,换成2背景,显示成功的界面;
至此,整个作品就创作好了,赶紧来测试一下自己的专注力吧,看看最快几秒能完成训练。
四.总结与思考
本题是初/中级组编程部分第5题,分数为80分,积木块数量45个左右,涉及到的知识点主要包括:
-
列表的基本使用;
-
克隆编程;
-
循环编程,尤其是嵌套循环;
-
运动编程;
-
变量的使用;
-
插队算法;
这是初级组最后一题,难度中等,完成时间25分钟左右,难点有两个,一是如何构造随机列表,二是如何依次让数字消失。
构造指定数字的随机列表,这是一个非常典型的需求,在之前的真题也出现过,比如:
最简单的方法就是超平老师总结的"插队算法",一定要熟练掌握并做到灵活运用。很多游戏都会用到这一技巧,比如记忆翻牌、数字华容道等。
超平老师给你留一个思考题,本作品中,在点击数字的时候,鼠标要碰到有颜色的部分,否则没有效果,用户体验不是特别好,你有什么好的改进办法吗?
如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄
需要素材和源码的,可以移步至"超平的编程课"gzh。