玛雅神庙-第12届蓝桥杯Scratch国赛真题第6题

[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第2讲。

第12届蓝桥杯青少年组国赛于2021年5月29日举行,本次赛事仍然采取了在线考试。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。

Scratch玛雅神庙,本题是第12届蓝桥杯Scratch国赛真题编程部分的第6题,初级组和中级组都有此题。题目要求考生使用Scratch编程实现开启玛雅神庙大门效果,难度系数为5,分值为100分。

作品以玛雅神庙和罗盘为素材,可以让孩子了解玛雅文明,开阔孩子的视野。同时要按要求完成作品,也是对逻辑思维能力的一次锻炼和洗礼,这是一道含金量比较高的编程题。先来看看题目的详细说明和要求吧。

题目说明

编程实现:

玛雅神庙。

具体要求:

1).点击绿旗,出现对应的角色与背景;

图片[1]-scratch玛雅神庙_第12届蓝桥杯国赛真题解析-超平的编程课

2). 按下空格键,玛雅罗盘说:“请观察火把点亮的顺序”,然后神庙中的四个火把按照随机顺序分别亮起来并熄灭一次;

图片[2]-scratch玛雅神庙_第12届蓝桥杯国赛真题解析-超平的编程课

3). 玛雅罗盘说:“请按照刚才的顺序点亮所有火把”,然后通过上、下、左、右按键控制手指进行对应方向上的移动,手指移动到一个火把上,按下S键,火把会再次亮起;

图片[3]-scratch玛雅神庙_第12届蓝桥杯国赛真题解析-超平的编程课

4).四个火把全部亮起,如果点亮顺序错误,玛雅罗盘说:“错误”,游戏结束;

图片[4]-scratch玛雅神庙_第12届蓝桥杯国赛真题解析-超平的编程课

5). 四个火把全部亮起,如果点亮顺序正确,玛雅罗盘说:“正确”,并按照每个火把代表的数字,分4次顺时针旋转到对应的数字位置,每次间隔1秒,顺序与点亮火把的顺序一致;

图片[5]-scratch玛雅神庙_第12届蓝桥杯国赛真题解析-超平的编程课

6). 玛雅罗盘转动成功后,大门打开。

图片[6]-scratch玛雅神庙_第12届蓝桥杯国赛真题解析-超平的编程课

评判标准:

  • 5分:满足要求1;
  • 10分:满足要求2;
  • 10分:满足要求3;
  • 25分:满足要求4;
  • 45分:满足要求5;
  • 5分:满足要求6。

效果预览

先来看看作品的完整效果吧,如视频所示:

思路分析

由于题目描述较多,为了理清思路,我们先来绘制一个简单的流程图,如图所示:

图片[7]-scratch玛雅神庙_第12届蓝桥杯国赛真题解析-超平的编程课

这里有三个关键步骤:

  1. 如何让4个火把按随机顺序点亮;
  2. 如何判断两次点亮顺序是否一致;
  3. 如何按照点亮顺序转动罗盘;

赶紧调动你聪明的脑细胞想想,该怎么做呢?
仔细分析,可以发现,这里有两个顺序,一是开场的随机点亮4个火把的顺序,二是玩家点亮火把的顺序,并且这两个顺序都需要保存起来,便于后续比较,并作为罗盘转动的依据。因此,这里需要使用“列表”的数据结构来保存这两个顺序。

所以,解决本题的关键点在于使用“列表”数据结构来保存火把点亮的顺序,同时灵活运用列表相关操作来实现上述功能。

程序实现

根据上述分析,接下来我们就按照如下5个步骤编写程序来完成作品:

  1. 四个火把按照随机顺序点亮然后熄灭
  2. 等待玩家点亮火把并记录顺序
  3. 比较两次点亮顺序
  4. 转动罗盘
  5. 打开大门

开始编程咯

1. 四个火把按随机顺序点亮然后熄灭

首先,我们创建两个列表,分别命名为“火把顺序”和“点亮顺序”,前者表示电脑随机点亮火把的顺序,后者则表示玩家点亮火把的顺序,并确保在点击绿旗时,清空列表。

所有的说话内容都是由罗盘角色负责的,因此,需要先从罗盘角色开始编写程序,当按下空格键时,先提示“请观察火把点亮的顺序”,针对这个需求,通常有三种实现方式:

  • 使用“当按下空格键”指令;
  • 使用“如何…那么”指令并结合侦测模块中的“按下空格键”指令;
  • 使用“等待”指令结合侦测模块中的“按下空格键”指令;

从逻辑的严谨性和代码的简洁性两个角度考虑,第三种方式无疑是最佳选择。在罗盘角色中编写代码如下:

图片[8]-scratch玛雅神庙_第12届蓝桥杯国赛真题解析-超平的编程课

接下来就需要考虑如何随机点亮顺序了,我们可以使用数字1、2、3、4表示4个火把的点亮顺序,并保存到“火把顺序”列表中,这通常也有两种实现方法:

  • 先依次将1、2、3、4插入到列表,然后打乱顺序;
  • 向列表的随机位置处依次插入1、2、3、4;

从代码的简洁性角度出发,选择第二种方法更为简单,代码如下:

图片[9]-scratch玛雅神庙_第12届蓝桥杯国赛真题解析-超平的编程课

这里的关键就在于“在列表的第n项前插入xx”指令,如果列表中是空的,能够插入的位置就只有一个,如果列表中有1个数据,那么新插入的数据就有两个位置可以选择了,在第一个数据之前或之后,相应的,如果列表中有两个数据,那么新插入的数据就有三个位置可以选择,以此类推…,也就是这个位置可以随机数来获取,但随机数的范围和列表的项目数有关,这就是上述代码的作用。

接下来,罗盘就需要告诉4个火把分别点亮自己了,这需要用到事件广播机制,我们可以遍历“火把点亮”列表,根据列表中的数字,依次给4个火把角色发送广播,传统的做法是使用“如果…那么”指令判断数字,然后分别发送广播消息。

在这里,超平老师教你一招,可以利用随机数发送广播,广播消息的名字就是数字1、2、3或4,结合循环,可以让程序更为简单,代码如下:

图片[10]-scratch玛雅神庙_第12届蓝桥杯国赛真题解析-超平的编程课

对应的,火把1角色接收到广播消息“1”,先把火把切换到点亮造型,等待1秒后,再切换到熄灭造型,代码如下:

图片[11]-scratch玛雅神庙_第12届蓝桥杯国赛真题解析-超平的编程课

同理,其余3个火把角色,在接收到消息“2”、消息“3”、消息“3”的时候,都需要做相同处理,代码和火把1角色基本一样,这里就不再贴出了。至此,按随机顺序点亮4个火把然后熄灭的功能就已经实现了。

2. 等待玩家点亮火把并记录顺序

在罗盘角色在发送完4个广播之后,需要提示“请按照刚才的顺序点亮所有火把”并等待玩家点亮火把,在罗盘角色代码下面继续编写代码如下:

图片[12]-scratch玛雅神庙_第12届蓝桥杯国赛真题解析-超平的编程课

这里,之所以要等待1秒,是因为4个火把从点亮到熄灭之间的时间也刚好是1秒。

发送完广播之后,4个火把角色就需要处理广播消息,并等待手指移到该火把上并按下S键点亮火把,一旦点亮火把,此时就需要将该火把的序号保存到“点亮顺序”列表中,并判断4个火把是否都点亮了,如果都点亮了,就需要判断二者的顺序是否正确了。

以火把1角色为例,其代码如下:

图片[13]-scratch玛雅神庙_第12届蓝桥杯国赛真题解析-超平的编程课

相应的,其余3个火把角色也需要编写这段代码,唯一的不同就是向列表中加入的数字分别要改为2、3、4。

在点亮火把过程中,需要控制手指角色移动,这部分的逻辑比较简单,就是根据↑、↓、←、→四个方向键的按键情况分别进行上下左右移动,代码如下:

图片[14]-scratch玛雅神庙_第12届蓝桥杯国赛真题解析-超平的编程课

至此,等待玩家点亮火把并记录顺序的功能就已经实现完毕。

3. 比较两次点亮顺序

接下来,就需要比较计算机随机点亮顺序和玩家点亮顺序了,其实就是判断”火把顺序“和”点亮顺序“这两个列表是否相等即可,关键是如何比较呢?

简单的想法自然是直接比较两个列表,但是需要注意这种方式在scratch中并不总是正确,而且在所有的编程语言中,一般也不会直接使用这种方式。

不妨换一个思路,分别将两个列表中的数字进行连接,得到一个字符串,然后再进行比较,这个比较是在罗盘角色中进行的,代码如下:

图片[15]-scratch玛雅神庙_第12届蓝桥杯国赛真题解析-超平的编程课

需要注意的是,对于字符串而言,其初始值要设置为空,如果二者顺序相同,则说”正确“,然后广播”旋转“,否则说”错误“,结束游戏。

4. 转动罗盘

当罗盘接收到”旋转“广播之后,需要根据点亮顺序,依次旋转罗盘,这是本作品的又一难点,因为这里的顺序是随机的,每次都是不同的。实现方法有多种,我这里介绍最简单的一种,也是小朋友最容易理解的一种方式。

首先要找到关键点,在罗盘旋转的过程中,变化的是什么呢?

毫无疑问是方向,而且这里的1、2、3、4对应的方向值分别是90、-90、180和0。如此一来就好办了,如果当前的数字是1,那么就让罗盘重复右转直到方向为90度,如果当前数字是2,那么就让罗盘重复右转直到方向为-90,以此类推…

在这个过程中,我们根本不用关心,当前罗盘在哪个位置,是不是很方便,具体实现代码如下:

图片[16]-scratch玛雅神庙_第12届蓝桥杯国赛真题解析-超平的编程课

需要注意的是,右转的角度必须是能被90整除的,因为罗盘旋转的最小单位是90度。

5. 打开大门

最后一步就是打开大门了,这个非常的简单,大门角色在接收到”开门“广播消息之后,直接切换造型即可,代码如下:

图片[17]-scratch玛雅神庙_第12届蓝桥杯国赛真题解析-超平的编程课

总结与思考

至此,整个作品就全部完成了,总体来说,本题还是有一定难度的,对考生的要求还是比较高的,总代码量为183个积木,涉及的知识点包括:

  • 造型的切换,通过造型切换实现点亮熄灭火把,开门等效果;
  • 列表的操作,尤其是实现随机顺序的列表技巧以及两个列表的比较;
  • 事件广播机制,重点注意一下结合随机数实现广播的编程技巧;
  • 计数循环的使用,在遍历列表中经常使用这种循环技巧;
  • 方向的妙用,只要是旋转运动,通常都可以考虑”方向“指令;
  • 等待条件指令的使用,本作品中多次使用该指令,来确保程序的严谨性;

需要素材和源代码的,可以转到这里,玛雅神庙-2021.5.29蓝桥杯国赛第6题

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

请登录后发表评论

    暂无评论内容