LED屏幕-第13届蓝桥杯Scratch国赛真题第7题

[导读]:超平老师计划推出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国赛教程-超平的编程课

2). 按下空格键,LED屏幕最外环方格全部点亮(方格变为黄色);

图片[2]-scratch LED屏幕_第13届蓝桥杯scratch国赛教程-超平的编程课

3). LED屏幕每秒向内点亮一层,其它LED灯熄灭;

图片[3]-scratch LED屏幕_第13届蓝桥杯scratch国赛教程-超平的编程课

4). 直到LED灯在最中心点亮2秒;

图片[4]-scratch LED屏幕_第13届蓝桥杯scratch国赛教程-超平的编程课

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国赛教程-超平的编程课

由内到外来看,第一层是由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国赛教程-超平的编程课

需要说明的是,这里在私有变量的名字前面增加了一个下划线“_”,这不是必须的,但是有了下划线,就可以将私有变量和全局变量区分开来,这是一个良好的编码风格和习惯。

有了克隆体,当克隆体启动时,所有的LED灯都是熄灭状态的,那怎么点亮和熄灭LED灯呢?这是通过切换造型来实现的,LED灯角色有两个造型,如图:

图片[7]-scratch LED屏幕_第13届蓝桥杯scratch国赛教程-超平的编程课

其中,造型1表示熄灭状态,造型2表示点亮状态,如此一来,代码就非常简单了,如图所示:

图片[8]-scratch LED屏幕_第13届蓝桥杯scratch国赛教程-超平的编程课

2. 按下空格键,逐层点亮LED灯

当按下空格键的时候,LED灯从外到内逐层点亮,有了私有变量”_层“,我们就可以很容易地控制每一层的LED灯了。

先从第五层开始,如果LED灯的”_层数“等于5,那就将这些LED灯的造型切换为黄色点亮状态,1秒之后,再判断LED灯”_层数“等于4的情况,一直到最中心的第一层。

如果你仔细思考的话,可以发现这5层的判断逻辑是一样的,唯一不同的是最后一层点亮之后,要等2秒才熄灭。所以,我们可以使用循环来简化,代码如下:

图片[9]-scratch LED屏幕_第13届蓝桥杯scratch国赛教程-超平的编程课

需要注意的是,这里的变量”_次数“是一个私有变量,之所以设置为私有变量,是因为所有的克隆体都会响应”当按下空格键“这个代码块,如果是全局变量的话,那么,变量每一次就不是增加-1了,而是增加-100了。

当然,在实际编程的时候,如果你觉得这个难以理解的话,可以直接写5遍比较的代码,从5开始到1结束。

总结与思考

作为国赛中级组的的最后一题,本题还是挺有难度的,涉及到的知识点主要包括:

  • Scratch克隆,重点是克隆的特点及批量克隆的技巧;
  • 变量,尤其是私有变量和克隆体的结合使用;
  • 造型切换;
  • 角色坐标的设置和计算;
  • 循环的嵌套用法,可以极大地简化代码;
  • 双分支条件指令的使用。

从代码量上来看,本题总共使用了36个积木块,从知识点上来看,涉及到的面也不广,重点是Scratch克隆和私有变量。但在这次国赛中,本题的正确率并不高,这是为什么呢?

究其原因,主要有两个,一是因为题量较大,时间不够用,很多考生根本就来不及做;二是因为本题考察的是创新思维,很多考生都熟练掌握了Scratch克隆技巧,针对常规的批量克隆可以做到手到擒来,但是本题所面临的克隆场景是非常规化的,需要考生具备较强的发散思维、分析能力和创新思维的,而这也正是少儿编程的价值所在。

针对上面的代码,还有一个小问题,就是这里的100个LED灯是慢慢克隆出来的,能不能一瞬间就克隆好呢,你有什么好办法吗,欢迎和我进行交流。


需要素材和源代码的,可以转到这里,LED屏幕-2022.5.29蓝桥杯国赛第7题

© 版权声明
THE END
喜欢就支持一下吧
点赞51 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容