本文转自于“超平的编程课”公众号,查看更多教程,可以移步至公众号。

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

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

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

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

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

一. 题目说明

编程实现:密室逃脱

具体要求

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

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

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

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

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

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

评判标准:

  • 5分:满足要求1;

  • 5分:满足要求2;

  • 15分:满足要求3;

  • 15分:满足要求4;

  • 20分:满足要求5;

  • 40分:满足要求6。

二. 思路分析

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

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

三. 程序实现

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

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

1. 蓝色钥匙

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

  • 初始化设置

  • 点击钥匙,让钥匙跟随鼠标移动

  • 打开抽屉,拿到红色钥匙

先上代码,如图所示:

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

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

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

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

2. 红色钥匙

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

  • 位置不同

  • 开始时处于隐藏状态

  • 碰到红色钥匙孔才能拿到门卡

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

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

3.白色门卡

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

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

4.密码锁

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

  • 生成随机密码

  • 提示用户输入密码

  • 判断密码是否正确

这是本题的重难点,是考验孩子逻辑思维能力和处理数据能力的时候了。

首先,我们来生成随机密码,密码是一个5位数,每一位都是从0~9之间随机取数,思路其实也挺简单的,就是按万、千、百、十、个的顺序依次从0~9之间取一个随机数。

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

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

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

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

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

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

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

四. 总结

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

  • scratch问答模块,包括“询问并等待”和“回答”两个指令;

  • 变量和列表的使用,尤其是结合循环遍历列表数据;

  • 字符串连接运算;

  • 两种循环的灵活使用,即直到循环和计数循环;

  • 等待条件指令的妙用;

  • 事件广播机制;

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

如果需要源码和素材,可以联系本人,或者移步至公众号。

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

  1. 文字特效-第12届蓝桥杯Scratch国赛真题第1题

    本文同步发表于"超平的编程课"公众号,更多教程,可移步至公众号. [导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第7讲 ...

  2. 存钱罐-第12届蓝桥杯Scratch国赛真题第3题

    本文转自于"超平的编程课"公众号,更多教程,可移步至公众号. [导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第5讲. ...

  3. 旋转的风车-第12届蓝桥杯Scratch国赛真题第2题

    本文转自于"超平的编程课"公众号,更多教程,可移步至公众号. [导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第6讲. ...

  4. 魔法师盖城墙-第11届蓝桥杯Scratch国赛真题第4题

    本文同步发表于"超平的编程课"公众号,更多教程,可移步至公众号. [导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第10 ...

  5. 捉迷藏之二-第10届蓝桥杯Scratch国赛真题第6题程序2

    本文同步发表于"超平的编程课"公众号,更多教程,可移步至公众号. [导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第15 ...

  6. 跑酷游戏-第13届蓝桥杯Scratch国赛真题第3题

    [导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第27讲. 第13届蓝桥杯青少年组国赛于2022年5月29日举行,形式为在线考试.Scrat ...

  7. 模拟昼夜交替-第11届蓝桥杯Scratch国赛真题第1题

    本文同步发表于"超平的编程课"公众号,更多教程,可移步至公众号. [导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第13 ...

  8. 捉迷藏之四-第10届蓝桥杯Scratch国赛真题第6题程序4

    本文同步发表于"超平的编程课"公众号,更多教程,可移步至公众号. [导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第17 ...

  9. 3D打印小猫-第11届蓝桥杯Scratch国赛真题第6题

    本文同步发表于"超平的编程课"公众号,更多教程,可移步至公众号. [导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第8讲 ...

最新文章

  1. scrapy的几个文件属性
  2. 牛客练习赛61 C 四个选项(并查集、DP、排列组合)难度⭐⭐⭐
  3. 对象存储与块存储、文件存储等对比
  4. ViSP创建之VS工程详细创建步骤(命令行方式)
  5. wxWidgets:wxMediaEvent类用法
  6. redis插件连接集群 shiro_Shiro经过Redis管理会话实现集群(转载)
  7. 福建师范大学计算机考研好考吗,福建师范大学考研难吗?一般要什么水平才可以进入?...
  8. 2018秋季C语言学习总结
  9. 马上有钱:揭密25种成为有钱人的方法(图)
  10. 用Python模拟一个区域广播通信网络 2020年4月认证杯数学建模比赛代码
  11. ITF条码的外边框如何设置
  12. HTML做一个传统节日端午节 带设计报告4500字
  13. deepinV20 显卡驱动 cuda10.2+cudnn配置
  14. ABP框架 - 实体
  15. 『NLP自然语言处理』中文文本的分词、去标点符号、去停用词、词性标注
  16. Windows安装mysql-8.0.30-winx64.zip
  17. 新版Chrome自动禁用第三方插件的解决办法[转]
  18. js制作一个简单的div弹窗:
  19. 第9章 更复杂的光照
  20. android+饭否+开源,GitHub - mcxiaoke/fanfouapp-opensource: 饭否Android客户端开源项目

热门文章

  1. 高中物理:结合能与质量亏损理解
  2. PCI Express学习篇---Power Management(一)
  3. 迈克菲:2016年的八大网络安全威胁
  4. android 获取年月日时分秒,Android开发中 获取当前Android的年月日时分秒的时间
  5. 数字信号处理X——MBD开发流程与自动化测试
  6. python/educoder 第1关:字符串基本操作
  7. Linux 搭建 JumpServer 堡垒机
  8. Golang中获取中文字符串的子串字符位置及截取子串
  9. 请用python实现读取一个文本文件到数据数组中
  10. YiBo微博客户端设置自定义尾巴详细教程之二