[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第91讲。
蓝桥杯选拔赛每一届都要举行4~5次,和省赛、国赛相比,题目要简单不少,再加上篇幅有限,因此我精挑细选了一部分题目进行解读。
第12届蓝桥杯青少年组第1次选拔赛于2020年8月23日举行,形式为线上考试。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。
数苹果,本题是2020年8月23日举行的第12届蓝桥杯Scratch选拔赛真题编程第3题,初级组和中级组都有此题,题目要求编程创作数苹果作品,苹果树上会随机出现1-10个苹果,小猫询问树上一共有几个苹果,输入数字回答后,小猫可以判断对错。
先来看看题目的要求吧。
一.题目说明
编程实现:
数苹果:苹果树上会随机出现1-10个苹果,小猫询问树上一共有几个苹果,输入数字回答后,小猫可以判断对错。
具体要求:
1). 运行程序,出现下图所示的角色与背景;
2). 按下空格键,苹果树上会随机出现1-10个苹果,小猫会问一共有几个苹果且屏幕下边缘出现询问框;
3). 在询问框中输入正确的苹果个数,小猫会说:“正确”1秒,如输入错误的苹果个数,小猫会说:“错误”1秒;
4). 之后苹果树上再次随机出现1-10个苹果,小猫会接着询问有几个苹果。
评判标准:
-
10分:运行程序,苹果树上随机出现1-10个苹果,且小猫询问:树上一共有多少个苹果(苹果不能重叠);
-
10分:在询问框中输入正确的苹果个数,小猫会说:“正确”1秒,如输入错误的苹果个数,小猫会说:“错误”1秒;
-
10分:之后苹果树上再次随机出现1-10个苹果,小猫会接着询问有几个苹果。
二.思路分析
本题包含两个角色,分别是小猫和苹果,如图所示:
当按下空格键时,树上随机出现1-10个苹果,肯定需要使用克隆,由于后续小猫要判断玩家输入的数量是否正确,因此苹果的数量可以用变量保存起来,苹果出现的位置是随机的,但是要注意随机数的范围。
苹果出现之后,小猫才开始询问,等待玩家回答完之后,再次出现苹果,程序在两个角色之间来回切换,如何确保各个流程的执行顺序呢,这需要用到事件广播机制。
因此,随机数、变量、克隆和事件广播是创作本作品的核心知识点。
三.编程实现
根据题目描述和思路分析,我们可以分五步来编写程序:
-
准备工作
-
克隆苹果
-
小猫判断数量是否正确
-
再次出现苹果
-
代码优化
1. 准备工作
使用Scratch自带的背景库和素材库,分别添加好舞台背景和苹果角色,将默认的小猫角色拖到舞台的左下角,切换到小猫角色,编写代码如下:
有了这两行代码,就可以确保每次点击绿旗时,小猫都可以回到正确的位置。
2. 克隆苹果
选中苹果角色,绿旗点击的时候,是没有苹果的,因此,需要将苹果角色隐藏起来,编写代码如下:
当按下空格键时,要随机出现1~10个苹果,这个可以通过克隆来实现,同时需要使用变量保存苹果的数量,对应的代码如下:
克隆完所有的苹果之后,就轮到小猫提问了,因此这里发送了一个广播消息,需要注意,广播只需要发一次就可以了,所以不能在当“作为克隆体启动时”指令下下面发送广播消息。
对于苹果克隆体,需要设置好其位置,代码如下:
苹果要出现在树上,也就是舞台左上方,x坐标的范围为-180到0,y的范围为100到150,当然你也可以扩大或缩小范围。注意,这里使用了“将x坐标设为”和“将y坐标设为”两个指令,它和直接使用“移到x,y”指令的效果是一样的。
3. 小猫判断数量是否正确
小猫角色在接收到“提问”广播消息后,就开始询问并等待玩家输入数字,然后判断是否正确,切换到小猫角色,编写代码如下:
判断的逻辑非常简单,回答等于苹果个数,则说正确,否则说错误,不管是正确还是错误,会重新随机出现1-10个苹果,因此这里发送了一个“再来一次”的广播消息。
4. 再次出现苹果
苹果角色在接收“再来一次”广播消息之后,需要做两件事情,一是删除原来的苹果克隆体,二是重新生成克隆体,我们可以编写如下代码:
由于“删除此克隆体”指令是一个尾指令(所谓尾指令是指它只能作为最后一个指令,后面不能再接任何其他指令了),所以,这里使用了两个独立的代码块,其中上面的代码块用于删除所有的苹果克隆体,下面的代码块则用于重新生成新的克隆体。
这两个代码块都是在接收到“再来一次”广播消息时就立刻执行的,那到底是谁先执行,谁后执行呢?
如果上面的删除此克隆体后执行,那岂不是把新生成的克隆体也一并都删除了么。为确保我们先执行删除指令,然后再删除,因此在下面的代码块中,添加了一个等待0.5秒的指令,这个小技巧你可要学会哦 。
5. 代码优化
我们再回头看一下苹果角色的代码,其中有两个代码段,一个是按下空格键代码块,一个是当接收到“再来一次”广播消息代码块,如图所示:
有什么问题吗?相信聪明的你已经发现了,这两个代码块中的核心代码,也就是随机生成1~10个苹果克隆体的代码是一模一样的,针对这种情形,我们有什么办法可以让代码变得更简洁吗?
技巧有两个,第一个技巧就是使用自制积木,第二个技巧则是使用事件广播机制。
我们先来看第一个技巧,使用自制积木,我们可以将随机生成1~10个苹果克隆体的代码做出自制积木,如图所示:
然后在两个代码块中,都使用这个自制积木,如图所示:
第二个技巧则是使用事件广播机制,我们可以在两个不同的时刻,给苹果角色自己发广播,即在按下空格键和当接收到“再来一次”广播线消息时,发送一个“随机生成1~10个苹果”广播消息,如图:
然后在接收到“随机生成1~10个苹果”这一广播时克隆苹果即可,如图所示:
如此一来,我们的代码就变得更加简洁了,你学会了吗?
四.总结与思考
本题难度系数为2,积木块数量35个左右 ,涉及到的知识点主要包括:
-
设置角色位置,包括指定位置和随机位置;
-
Scratch克隆,重点是如何先删除克隆体再生成新的克隆体
-
Scratch问答,包括询问并等待和回答两个指令;
-
事件广播机制;
-
使用自制积木或事件广播来优化代码。
本题相对比较简单,重点是如何对代码进行优化,提高代码的重用性。编程最高的境界就是使用最少的代码实现指定功能,有了这样的目标,你就会不断的探索学习,不断的摸索更好的算法和编程技巧,从而写出让自己满意的代码。
如果你觉得文章对你有所帮助,别忘了点赞,你的鼓励是我坚持继续写下去的最大动力,Thanks♪(・ω・)ノ。
需要素材和源码的,可以练习作者,或者移步至同名wx号。