密室逃脱-第12届蓝桥杯Scratch国赛真题第5题

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

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

密室逃脱,本题是第12届蓝桥杯Scratch国赛真题编程部分的第5题,初级组和中级组都有此题。题目要求考生使用Scratch编程实现密室逃脱游戏,难度系数为5,分值为100分。

密室逃脱本是一款实景逃脱类游戏,具有较大的趣味性及挑战性,和Scratch编程能擦出怎样的火花呢,我们一起来看看吧。

先来看看题目说明和具体要求。

题目说明

编程实现

密室逃脱

具体要求

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

图片[1]-scratch密室逃脱_第12届蓝桥杯scratch国赛真题教程-超平的编程课

2). 点击一下床上的蓝色钥匙后,钥匙可以跟随鼠标指针移动;

3). 拖动鼠标将钥匙移到床头柜的第三个抽屉的钥匙孔处,出现对话框“抽屉打开”,等待1秒蓝色钥匙消失,可以从抽屉中拿出红色钥匙,红色钥匙出现在画面中;

图片[2]-scratch密室逃脱_第12届蓝桥杯scratch国赛真题教程-超平的编程课

4). 点击一下红色钥匙,红色钥匙跟随鼠标指针移动,移动到电脑桌第一个抽屉的钥匙孔处,出现对话框“抽屉打开”,等待1秒红色钥匙消失,可以从抽屉中拿出白色门卡,白色门卡出现在画面中;

图片[3]-scratch密室逃脱_第12届蓝桥杯scratch国赛真题教程-超平的编程课

5). 点击一下门卡,门卡可以跟随鼠标指针移动,碰到紫色把手消失,密码锁会随机说出5个数字(0-9),输入由这5个数字组成的最大五位数并出现输入框;

图片[4]-scratch密室逃脱_第12届蓝桥杯scratch国赛真题教程-超平的编程课

6). 如果输入的最大五位数正确,提示:“正确,门打开”,如果输入最大的五位数错误,提示:“请重新输入(还有一次机会)”,两次机会全部输错,提示:“错误,门已锁死”。

图片[5]-scratch密室逃脱_第12届蓝桥杯scratch国赛真题教程-超平的编程课
图片[6]-scratch密室逃脱_第12届蓝桥杯scratch国赛真题教程-超平的编程课
图片[7]-scratch密室逃脱_第12届蓝桥杯scratch国赛真题教程-超平的编程课

评判标准:

  • 5分:满足要求1;
  • 5分:满足要求2;
  • 15分:满足要求3;
  • 15分:满足要求4;
  • 20分:满足要求5;
  • 40分:满足要求6。

效果预览

先来看看作品的完整效果吧,请看视频:

思路分析

根据题目描述,我们可以绘制一个流程图来整理思路,如图所示:

图片[8]-scratch密室逃脱_第12届蓝桥杯scratch国赛真题教程-超平的编程课

整个程序的流程相对比较简单,重难点在于如何获取随机生成的5位数字所能构成的最大数,从而判断玩家输入的密码是否正确,这里肯定会用到列表数据结构,具体怎么实现呢,你可以先思考一下,我们稍后会详细讲解。

程序实现

我们再来看一下,本题涉及到的角色有哪些,如图所示:

图片[9]-scratch密室逃脱_第12届蓝桥杯scratch国赛真题教程-超平的编程课

可以看到,这里有4个角色,结合上面的流程图,我们可以按照角色的顺序来编写程序。

1. 蓝色钥匙

对于蓝色钥匙角色而言,主要有3个小功能:

  • 初始化设置
  • 点击钥匙,让钥匙跟随鼠标移动
  • 打开抽屉,拿到红色钥匙

先上代码,如图所示:

图片[10]-scratch密室逃脱_第12届蓝桥杯scratch国赛真题教程-超平的编程课

其中,初始化包括位置设定和显示,以确保每次游戏开始时,蓝色钥匙是出现在床上。

对于按下鼠标的处理,并没有使用“当角色被点击”指令,而使用了“等待条件“指令,这样可以确保蓝色钥匙只能被点击一次,以及只有在点击绿旗之后才可以点击钥匙。这是一个非常有用的Scratch编程小技巧,可以让程序更加严谨,减少不必要的bug。

打开抽屉,这里使用的是颜色碰撞检测,一旦碰到蓝色钥匙孔,就可以说”抽屉打开“了,然后隐藏蓝色钥匙。

打开抽屉,就找到了红色钥匙,从蓝色钥匙角色到红色钥匙角色,涉及到跨角色之间的通讯,这需要使用事件广播机制,所以最后发送了一个广播”找到红色钥匙“,这就好比是蓝色钥匙角色给红色钥匙角色打了一个电话。

2. 红色钥匙

红色钥匙角色的效果和蓝色钥匙基本一致,所不同的地方有如下3点:

  • 位置不同
  • 开始时处于隐藏状态
  • 碰到红色钥匙孔才能拿到门卡

红色钥匙有两个代码块,一个是绿旗代码块,表示初始状态,另一个则是在接收”找到红色钥匙“广播需要处理的代码,具体代码如下:

图片[11]-scratch密室逃脱_第12届蓝桥杯scratch国赛真题教程-超平的编程课

同理,在说”抽屉打开“并隐藏自己之后,需要通知门卡角色,因此在代码的最后添加了一个广播”找到门卡“指令

3.白色门卡

门卡角色的逻辑和代码基本是一样的,这里就不再赘述了,直接上代码:

图片[12]-scratch密室逃脱_第12届蓝桥杯scratch国赛真题教程-超平的编程课

在门卡角色隐藏之后,需要给密码锁角色发送一个”找到锁了“的广播消息。

4.密码锁

在接收到门卡角色发送的”找到锁了“的广播消息后,需要实现如下3个小功能:

  • 生成随机密码
  • 提示用户输入密码
  • 判断密码是否正确

这是本题的重难点,是考验孩子逻辑思维能力和处理数据能力的时候了。
首先,我们来生成随机密码,密码是一个5位数,每一位都是从0~9之间随机取数,思路其实也挺简单的,就是按万、千、百、十、个的顺序依次从0~9之间取一个随机数。

具体实现也非常简单,先定义一个变量”数字串“并设置为空,然后使用字符串连接运算,逐个将每一位上的数字进行连接,同时将这些数字保存到”数字“列表中,便于后续处理,这部分的代码如下:

图片[13]-scratch密室逃脱_第12届蓝桥杯scratch国赛真题教程-超平的编程课

其次,我们要通过”数字“列表获取密码,密码是由这5个数字组成的最大5位数。针对这个需求,通常的做法对列表进行排序,然后依次将5个数拼成一个数字,只是这种方式难度有点大,很多孩子一时还掌握不了。

超平老师在这里告诉你一个简单的算法,保证每个孩子一学就会。细心的你也许已经发现了,这5个数字都是一位数,取值范围是0~9。我们可以换个思路,针对这5个数字,让每个数字都和9进行比较,如何相等,那么这个数字就位于密码数字的高位,接着依次和8、7、6、5、4、3、2、1、0进行比较,一轮下来,就可以得到最大5位数了。

这里需要用到计数循环以及嵌套循环,为了简化代码,可以使用自制积木来获取最大5位数作为密码,代码如下:

图片[14]-scratch密室逃脱_第12届蓝桥杯scratch国赛真题教程-超平的编程课

然后就可以在询问之前调用这个自制积木来获取所谓的密码,并保存到变量”密码“中。

接下来,玩家在输入框中输入一个数字作为密码,并判断密码是否正确。由于这里最多只有两次机会,根据上面绘制的流程图,我们只需要使用两个”如果…那么…否则“指令就可以,具体代码如图:

图片[15]-scratch密室逃脱_第12届蓝桥杯scratch国赛真题教程-超平的编程课

至此,整个功能就全部实现完毕。

总结与思考

本题难度中等,没有特别复杂的逻辑,总代码量为92个积木块,重点考察了如下6个知识点:

  • scratch问答模块,包括“询问并等待”和“回答”两个指令;
  • 变量和列表的使用,尤其是结合循环遍历列表数据;
  • 字符串连接运算;
  • 两种循环的灵活使用,即直到循环和计数循环;
  • 等待条件指令的妙用;
  • 事件广播机制;

当然,更为重要的是要学会使用计算思维,对问题进行拆解、分析并逐个解决,这是一个让孩子终身受益的思维能力。


需要素材和源代码的,可以转到这里,密室逃脱-2021.5.29蓝桥杯国赛第5题

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

请登录后发表评论

    暂无评论内容