[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第23讲。
第13届蓝桥杯青少年组国赛于2022年5月29日举行,形式为在线考试。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。
LED屏幕,本题是第13届蓝桥杯Scratch国赛真题编程第7题,这是中级组的最后一题,初级组没有此题。题目要求考生编程实现在舞台上构造10×10的LED屏幕,在按下空格键的时候,由外到内逐层点亮LED灯。
先来看看题目的要求吧。
题目说明
编程实现:
LED屏幕。
具体要求:
1). 点击绿旗,在舞台中心区域出现由10 x 10方格组成的LED屏幕;
![图片[1]-scratch LED屏幕_第13届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-202.png)
2). 按下空格键,LED屏幕最外环方格全部点亮(方格变为黄色);
![图片[2]-scratch LED屏幕_第13届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-203.png)
3). LED屏幕每秒向内点亮一层,其它LED灯熄灭;
![图片[3]-scratch LED屏幕_第13届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-204.png)
4). 直到LED灯在最中心点亮2秒;
![图片[4]-scratch LED屏幕_第13届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-205.png)
5). 重复2)、3)、4)要求。
效果预览
在编程之前,先来看看作品的完整效果吧:
思路分析
本题的核心功能有两个:
1). 构造10 x 10的LED屏幕
2). 让LED屏幕由外到内逐层点亮
要构造一个10 x 10的LED屏幕,肯定是离不开Scratch克隆编程了,常规的方法是一排一排的克隆,每排克隆10个,一共克隆10排,代码也比较简单,使用嵌套循环就可以轻松实现。
但是使用逐排的方式来构造LED屏幕,我们将会遇到一个大麻烦,就是无法区分每个LED灯是处于哪一层,从而也就无法逐层控制LED灯的亮灭。
所以我们要改变构造LED屏幕的方式,使用逐层克隆的方式。一个10 x 10的LED屏幕,一共分为5层,我们可以由外到内逐层克隆,也可以由内到外逐层克隆,在克隆的同时,给每个克隆体做一个标记,用来表示所属的层数。一旦我们知道每个LED灯所属的层数,要控制其亮灭就变得非常简单了。
编程实现
本题只有一个角色,就是LED灯,根据上面的思路分析,我们可以分两步来编写程序:
- 逐层克隆,构造10 x 10的LED屏幕
- 按下空格键,逐层点亮LED灯
1. 逐层克隆,构造10 x 10的LED屏幕
一个10 x 10 的LED屏幕,可以分为5层(为方便理解,这里使用了不同颜色方块来表示),如图所示:
![图片[5]-scratch LED屏幕_第13届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-206.png)
由内到外来看,第一层是由4个LED灯构成的正方形,第二层是由12个LED灯构成的正方形,每向外一层,LED灯就增加8个,最外一层是由36个LED灯构成的正方形。
对于正方形来说,我们可以先克隆一条边上的LED灯,然后旋转90度,重复4次这个操作即可,这里的重点是要计算出每一条边上要克隆的LED个数。
处于中心的第一层,每条边只需要克隆一个LED灯,第二层则是3个,三到五层依次是5、7、9,这是一个典型的奇数排列,创建一个变量“层”用于表示第几层,层的取值有1、2、3、4、5,对应每条边要克隆的LED个数为 2 * 层 – 1。
每克隆完一层,本体都会回到该层的第一个LED位置,要克隆下一层,就需要将本体向左向上各移动一个LED的距离。
为了标记每个LED克隆体所处的层数,需要创建一个私有变量“_层数”,并将其值设置为“层”即可,完整的代码如下:
![图片[6]-scratch LED屏幕_第13届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-207-398x1024.png)
需要说明的是,这里在私有变量的名字前面增加了一个下划线“_”,这不是必须的,但是有了下划线,就可以将私有变量和全局变量区分开来,这是一个良好的编码风格和习惯。
有了克隆体,当克隆体启动时,所有的LED灯都是熄灭状态的,那怎么点亮和熄灭LED灯呢?这是通过切换造型来实现的,LED灯角色有两个造型,如图:
![图片[7]-scratch LED屏幕_第13届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-208.png)
其中,造型1表示熄灭状态,造型2表示点亮状态,如此一来,代码就非常简单了,如图所示:
![图片[8]-scratch LED屏幕_第13届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-209.png)
2. 按下空格键,逐层点亮LED灯
当按下空格键的时候,LED灯从外到内逐层点亮,有了私有变量”_层“,我们就可以很容易地控制每一层的LED灯了。
先从第五层开始,如果LED灯的”_层数“等于5,那就将这些LED灯的造型切换为黄色点亮状态,1秒之后,再判断LED灯”_层数“等于4的情况,一直到最中心的第一层。
如果你仔细思考的话,可以发现这5层的判断逻辑是一样的,唯一不同的是最后一层点亮之后,要等2秒才熄灭。所以,我们可以使用循环来简化,代码如下:
![图片[9]-scratch LED屏幕_第13届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-210.png)
需要注意的是,这里的变量”_次数“是一个私有变量,之所以设置为私有变量,是因为所有的克隆体都会响应”当按下空格键“这个代码块,如果是全局变量的话,那么,变量每一次就不是增加-1了,而是增加-100了。
当然,在实际编程的时候,如果你觉得这个难以理解的话,可以直接写5遍比较的代码,从5开始到1结束。
总结与思考
作为国赛中级组的的最后一题,本题还是挺有难度的,涉及到的知识点主要包括:
- Scratch克隆,重点是克隆的特点及批量克隆的技巧;
- 变量,尤其是私有变量和克隆体的结合使用;
- 造型切换;
- 角色坐标的设置和计算;
- 循环的嵌套用法,可以极大地简化代码;
- 双分支条件指令的使用。
从代码量上来看,本题总共使用了36个积木块,从知识点上来看,涉及到的面也不广,重点是Scratch克隆和私有变量。但在这次国赛中,本题的正确率并不高,这是为什么呢?
究其原因,主要有两个,一是因为题量较大,时间不够用,很多考生根本就来不及做;二是因为本题考察的是创新思维,很多考生都熟练掌握了Scratch克隆技巧,针对常规的批量克隆可以做到手到擒来,但是本题所面临的克隆场景是非常规化的,需要考生具备较强的发散思维、分析能力和创新思维的,而这也正是少儿编程的价值所在。
针对上面的代码,还有一个小问题,就是这里的100个LED灯是慢慢克隆出来的,能不能一瞬间就克隆好呢,你有什么好办法吗,欢迎和我进行交流。
需要素材和源代码的,可以转到这里,LED屏幕-2022.5.29蓝桥杯国赛第7题。
暂无评论内容