[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第16讲。
第10届蓝桥杯青少年组国赛于2019年5月25日举行,形式为线下考试,考生自带电脑。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。
捉迷藏,本题是第10届蓝桥杯Scratch国赛真题编程第6题,也是最后一题,题目比较复杂,共分为4个程序,我们将分4次来解读和学习,这是第3篇,对应于程序3,题目要求考生在程序2的基础上,增加一个捉迷藏的小动物,编程实现两个小动物随机藏到6个前景角色后面,当两次点击都正确找到小动物藏身的前景角色的情况下,才算游戏过关,否则游戏失败。
先来看看题目的要求吧。
题目说明
编程实现(以程序2为基础改进):
增加一个捉迷藏的小动物(以下以小老鼠“Mouse1”为例)。
游戏开始时6个前景角色以两行三列排列方式随机出现,两个小动物随机藏到6个前景角色后面,但每个前景角色后面只能藏一只小动物。
在两次点击都正确找到小动物藏身的前景角色的情况下,才算游戏过关,否则游戏失败。
具体要求:
1). 点击绿旗后,游戏开始,小猫在屏幕左下角,小老鼠在右下角,显示随机背景,6个前景角色都消失。等待1秒钟后,6个前景角色同时出现,按照两行三列的方式排列在舞台上,但每次6个前景角色的排列顺序随机变。注意:这6个前景角色不要挡住两个小动物。
![图片[1]-scratch捉迷藏-第10届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-137-1024x769.png)
![图片[2]-scratch捉迷藏-第10届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-138-1024x771.png)
2). 等到6个前景角色显示出来后,小猫和小老鼠都说“我要开始藏了,来找我哦!”2秒钟,然后分别随机藏在某个前景角色后,只露出一点点痕迹。
![图片[3]-scratch捉迷藏-第10届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-139-1024x769.png)
注意:每个前景角色后只能藏一只小动物;对于新增加的小老鼠角色,不论它藏在哪一个前景角色后面,都同样要露出且只能露出一点点痕迹。
3). 当玩家点击某个前景角色时,如果有小动物藏在这个前景角色后,则这个小动物现身并说“哇,你找到我啦!”1秒钟。
当玩家点击某个前景角色时,如果没有小动物藏在这个前景角色后,则还没被找到的小动物现身(一个或者两个小动物)并说“Hi,我在这儿呐!”2秒钟,然后小猫说“游戏失败!”游戏失败,程序结束。
![图片[4]-scratch捉迷藏-第10届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-140-1024x775.png)
![图片[5]-scratch捉迷藏-第10届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-141-1024x770.png)
如果两只小动物先后被正确找到,则两个小动物在说完“哇,你找到我啦!”之后。还要同时说“你真棒!”2秒钟,游戏过关,程序结束。
![图片[6]-scratch捉迷藏-第10届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-142-1024x766.png)
评判标准:
- 0分:程序2未得到满分;
- 20分:符合具体要求1);
- 40分:在20分标准的基础上,符合具体要求2);
- 50分:在40分标准的基础上,符合具体要求3)。
效果预览
在编程之前,先来看看作品的完整效果吧:
思路分析
本题是在程序2的基础上进行改进的,关于程序2可以参考上一篇,捉迷藏之二-第10届蓝桥杯Scratch国赛真题第6题程序2。
相信看完题目要求的你已经感觉到了,和前面的程序1和程序2相比较,程序3的难度大大提升,功能变多,逻辑也更为复杂,主要表现为下面3点:
1). 6个前景角色的位置不再是固定的,而是随机分布的;
2). 增加了1个老鼠角色,小猫和老鼠角色一起玩捉迷藏游戏,尤其要注意,两个角色要分别藏在不同的前景角色后面;
3). 对胜利和失败的判断逻辑更为复杂。
针对第1点,可以借助列表,将6个位置的x、y坐标先保存起来,然后使用事件广播机制让6个角色逐个出现,并且每次随机从列表中选取一对坐标,一旦设置好角色位置后,立刻从列表中删除对应的x、y坐标,从而确保下一个角色不会取到相同的坐标。
针对第2点,也可以采取相同的方法,使用一个列表保存可藏位置,列表中有6个数字,分别为1-6,先让小猫从列表中随机取一个数字,根据不同的数字让小猫藏到对应的前景角色后面,同时删除这个数字。接着,让老鼠从列表中随机取一个数字,并藏到对应的位置。
针对第3点,重点要注意失败的情形,一共有两种,一是一个都没有找到,二是只找到其中一个。针对后者,找到的有可能是小猫,也有可能是老鼠,针对这些不同的情况,都需要分别处理,做到不重复不遗漏。
编程实现
根据上述思路分析,我们分3个步骤来编写程序:
- 6个前景角色随机排列
- 小猫和老鼠躲藏
- 判断胜利和失败
1. 6个前景角色随机排列
根据上面的分析,先创建两个全局列表,分别命名为“x坐标”和“y坐标”,用于保存6个前景角色的位置,并对列表进行初始化,代码如图所示:
![图片[7]-scratch捉迷藏-第10届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-143.png)
这段代码可以写在任何一个角色中,为了方便起见,我们将它放在Apple角色中,执行这段代码,两个列表中的数据如下:
![图片[8]-scratch捉迷藏-第10届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-144.png)
接下来我们按照Apple、Basketball、Nano、Rocks、Dog2、Hedgehog的顺序依次来编写程序。
切换到Apple角色,作为第一个排列的角色,它有6个可选位置,其代码如下:
![图片[9]-scratch捉迷藏-第10届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-145.png)
执行这段代码,Apple角色的位置就确定好了,同时两个列表中都只剩下5个内容,接着需要给Basketball角色发送广播,所以在代码块的末尾添加了“广播角色2出现”指令。
切换到Basketball角色,编写代码如下:
![图片[10]-scratch捉迷藏-第10届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-146.png)
和Apple角色的代码基本相同,所不同的是这一次只有5个位置可选,因此将i设为在1和5之间取随机数,完成之后,再向下一个角色发送广播消息。其它4个角色的代码基本相同,这里就不再列出了。
2. 小猫和老鼠躲藏
先添加一个老鼠角色,并创建好全局列表“可藏位置”,将数字1-6加入到列表中,在小猫角色中编写代码如下:
![图片[11]-scratch捉迷藏-第10届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-147.png)
接下来,我们就可以从列表中随机选取一个数字,并将小猫移到相应的位置,修改小猫角色代码,如下:
![图片[12]-scratch捉迷藏-第10届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-148-372x1024.png)
代码虽长,但大部分代码是在程序1中已经写好的,这里只是做了一些修改,说明如下:
1). 比较的不是”位置“变量,而是”可藏位置的第位置项“,小猫位置一旦确定,就需要从列表中删除这一项,这样就可以避免老鼠和小猫位置重叠了。
2). 这里的变量”猫状态“,用来表示小猫是否找到,设为0表示还没有找到。
小猫藏好之后,就该老鼠藏了,所以这里发送了一个广播消息,当老鼠接到广播消息后,在”可藏位置“列表中剩下的5个数字中随机选取一个即可,代码和上述代码基本相同,这里就不再列出了。
同理,在老鼠藏好之后,将”老鼠状态“变量设为0,表示老鼠还没有找到。
3. 判断胜利和失败
当点击前景角色时,就要开始判断游戏胜利和失败了,6个前景角色的代码基本一致,以Apple为例,其代码如下:
![图片[13]-scratch捉迷藏-第10届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-149.png)
代码的逻辑也比较好理解,如果找到小猫,就发送广播消息”找到猫“,如果找到老鼠,就发送广播消息”找到老鼠“,如果都没有找到,就发送广播消息”错了“。
当找到小猫时,需要在小猫角色中做相应处理,并判断是否已经找到老鼠了,其代码如下:
![图片[14]-scratch捉迷藏-第10届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-150.png)
同理,当找到老鼠时,也需要做相同的处理,在老鼠角色中编写代码如下:
![图片[15]-scratch捉迷藏-第10届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-151.png)
在接收到”错了“消息广播后,小猫和老鼠角色也需要做相应的提示,对于老鼠角色而言,非常简单,只需要说”Hi,我在这儿呐“,其代码如下:
![图片[16]-scratch捉迷藏-第10届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-152.png)
小猫角色相对则要麻烦一点,它还需要承担说”游戏失败”的任务,其代码如下:
![图片[17]-scratch捉迷藏-第10届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-153.png)
最后,当游戏胜利了,小猫和老鼠同事说“你真棒!”,在小猫和老鼠两个角色中添加如下代码:
![图片[18]-scratch捉迷藏-第10届蓝桥杯scratch国赛教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/02/image-154.png)
至此,整个作品就创作完成了,你可以开心地玩一玩捉这个游戏,休闲一下咯^_^。
总结与思考
本题是捉迷藏的程序3,还是挺有难度的,涉及到的知识点包括:
- 列表的应用及具体操作;
- 随机数的应用,尤其是和列表的结合;
- 变量的使用,尤其是使用变量来表示某种状态;
- 事件广播机制的灵活运用;
- 跨角色复制代码的编程技巧。
程序3难度陡然提升,难倒了不少考生,这里的关键是要搞清楚程序的逻辑,整理好思路,然后一步一步实现,也就是计算思维中的拆解方法,将复杂问题分解成若干简单问题,这是数字时代每个孩子都需要掌握的思维模型,这也是少儿编程的价值所在。
需要素材和源代码的,可以转到这里,捉迷藏-2019.5.25蓝桥杯国赛第6题。
暂无评论内容