[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第90讲。
蓝桥杯选拔赛每一届都要举行4~5次,和省赛、国赛相比,题目要简单不少,再加上篇幅有限,因此我精挑细选了一部分题目进行解读。
第12届蓝桥杯青少年组第2次选拔赛于2020年9月20日举行,形式为线上考试。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。
小猴吃苹果,本题是2020年9月20日举行的第12届蓝桥杯Scratch选拔赛真题编程第3题,初级组和中级组都有此题,题目要求编程实现小猴搭梯子吃苹果的有趣场景。
先来看看题目的要求吧。
一.题目说明
编程实现:
猴子想吃苹果但是苹果树太高了,它只好自己搭建梯子,来吃到苹果。
具体要求:
1). 当绿旗被点击后,显示Blue Sky背景、猴子和苹果角色(大小都为50),出现在如图位置(大致位置即可);
2). 鼠标点击猴子之后,猴子能搭建出如图的梯子(使用画笔)。图中小正方形边长为50;
3). 每按下一次空格键,猴子就可以爬一格梯子,猴子默认已经站在第一格;
4). 当猴子爬到上面碰到苹果时,苹果和猴子同时用2秒钟时间慢慢回到地面上,程序结束;
5). 重新点击绿旗,程序可以重复执行。
评判标准:
-
2分:角色、背景符合要求;
-
6分:正确画出符合要求的梯子;
-
6分:猴子可以按照题目要求爬梯子;
-
6分:猴子拿到苹果后可以按照要求回到地面;
-
10分:程序可以重复执行,且完全符合要求。
二.思路分析
本题包含4个角色,分别是Tree,Monkey、Apple和Pencil,如图所示:
图中的梯子是通过画笔绘制出来的,所以,这是一个典型的运动和画笔相结合的作品。
从功能上看,本题并不复杂,点击猴子,使用画笔角色绘制出梯子,有了梯子之后,按下空格键,猴子就开始往上爬,每次爬一个格子。碰到苹果后,猴子和苹果一起返回地面。
这里的重点是如何衔接各个角色,很显然,这需要使用事件广播机制。除此之外,还需要进一步考虑各个事件的先后顺序,试想一下,每点击一次猴子,就绘制一个梯子,是否有这个必要?如果梯子还没搭好,按下空格键猴子就开始向上爬了,这样是否合理?
对于本题,我会先按照常规方式实现所有功能,以满足题目的要求,然后再进行优化,确保作品更完整,更合理。
三.编程实现
根据题目描述和思路分析,我们可以分四步来编写程序:
-
初始化设置
-
绘制梯子
-
猴子爬梯子吃到苹果
-
作品优化
1. 初始化设置
这里的4个角色都需要进行初始化设置,对于Tree1角色,只需要固定好其位置即可,代码如下:
monkey也需要设置好位置,代码如下:
Apple角色的初始化代码如下:
对于Pencil角色而言,需要隐藏起来,同时需要清空舞台,对应的编写代码如下:
由于Pencil角色自始至终都是不用显示的,因此也就不需要设置其位置了。
2. 绘制梯子
鼠标点击猴子,就要开始绘制梯子了,需要注意的是绘制需要移动角色,最好不要直接使用猴子来绘制梯子,而是借助Pencil角色来实现,我们可以通过事件广播机制来实现角色之间的通信。
在Monkey角色中,编写代码如下:
相应的,Pencil角色在接收到广播消息后,就开始绘制梯子了,其实就是自下而上绘制6个正方形,切换到Pencil角色,编写代码如下:
代码比较简单,画一个正方形需要循环4次,然后再重复6次,就可以绘制好梯子了,但是要注意,一个正方形画好之后,需要向上移动50步。
3. 猴子爬梯子吃到苹果
画好梯子之后,当按下空格键时,猴子向上爬一格,当猴子碰到苹果时,猴子又慢慢回到地面,在Monkey角色中编写代码如下:
由于苹果要和猴子一起回到地面,所以碰到苹果时,发送了一个”回来“的广播消息。相应的苹果角色在接收到广播消息后,也慢慢滑行到舞台底部,切换到Apple角色,增加如下代码:
注意,猴子和苹果角色滑行的时间相同,这样可以保证两者是同步,但是位置并不相同,在创作时,需要多测试几次,找到合适的坐标值,确保二者的相对位置不变,滑行结束,就停止全部脚本,结束程序。
至此,所有的效果都已经实现了,你可以测试一下效果如何。
4. 作品优化
上面的代码,基本上是能够满足题目要求的,但是有些不合理的地方,比如反复点击猴子,画笔会一遍又一遍地绘制梯子,只不过它们重叠在一起,看起来不明显。
再比如,在没有画好梯子之前,直接按下空格键,猴子也会煞有介事的往上爬,这就有些不合理了,这个该怎么解决优化呢?
其实也不难,首先去掉”当角色被点击“指令,使用”碰到鼠标指令“和”按下鼠标“组合指令来判断是否按下鼠标,同时这里只需要判断一次,最简单的办法是使用”等待条件“指令。
当鼠标点击猴子后,发送”画梯子“广播消息,不同的是这一次我们使用”广播并等待“指令,在梯子画完之后再继续执行后续代码。
接下来继续判断是否按下空格键,同样的,去掉”当按下空格键“指令,使用”等待条件“和侦测模块中的“按下空格键”来判断是否按下空格键,对应的代码如下:
需要注意的是,使用等待条件判断是否按下空格键时,需要在尾部使用“等待按下空格键不成立”指令,以确保按下并松开鼠标是一次按键操作,这是一个非常经典的代码结构,你可以收藏起来。
经过优化之后,作品就非常合理,非常严谨了。
四.总结与思考
本题难度系数为2,积木块数量40个左右 ,涉及到的知识点主要包括:
-
设置角色位置,关键是要养成初始化角色位置的习惯;
-
事件广播机制,重点是广播事件并等待指令的使用及特点;
-
画笔的使用,使用画笔结合移动绘制梯子;
-
点击角色的两种实现方式;
-
按下某个键的两种实现方式。
本题相对比较简单,重点是如何对作品进行优化,让作品更完整,更符合逻辑。我们在创作任何作品时,都需要考虑作品的完整性、逻辑性,力争给玩家最好的用户体验,这是一个不断迭代,不断创新的过程,你会从中受益良多。
如果你觉得文章对你有所帮助,别忘了点赞,你的鼓励是我坚持继续写下去的最大动力,Thanks♪(・ω・)ノ。
需要素材和源码的,可以联系本人,或者移步至同名wx号。