河马捡球-第10届蓝桥杯Scratch国赛真题第3题

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

第10届蓝桥杯青少年组国赛于2019年5月25日举行,形式为线下考试,考生自带电脑。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。

河马捡球,本题是第10届蓝桥杯Scratch国赛真题编程第3题,题目要求考生编程实现河马把天上的球带回地面的效果。

先来看看题目的要求吧。

作品说明

准备工作:

添加1个“Hippo1”河马角色,1个“Ball”小球角色。

添加“Hay Field”背景。

编程实现:

河马把天上的球带回地面。

具体要求:

1). 点击绿旗,小球从舞台上消失,河马位于舞台下方;

2). 当按下空格键后,小球出现在背景的天空范围内的随机位置(见图1);

图片[1]-scratch河马捡球_第10届蓝桥杯scratch国赛教程-超平的编程课

3). 小球出现后,河马一边拍打着翅膀一边向小球飞过去,然后再拍打着翅膀把小球带回起点位置,带回过程中,小球要始终处于河马的嘴部并且处于河马图层的上方(见图2);

图片[2]-scratch河马捡球_第10届蓝桥杯scratch国赛教程-超平的编程课

4). 当河马把小球带回原处后,小球消失,河马停止拍打翅膀(见图3);

图片[3]-scratch河马捡球_第10届蓝桥杯scratch国赛教程-超平的编程课

5). 再次按下空格键,能重复功能2,3,4的过程,并且小球每次出现的位置都不同。

评判标准:

  • 10分:符合具体要求1),即点击绿旗,小球消失。
  • 30分:在10分基础上,符合具体要求2),即当按下空格键小球出现在天空中的随机位置。
  • 50分:在30分基础上,符合具体要求3)和4),即小球出现后,河马可以拍打着翅膀飞行到小球位置,然后把小球带回起始位置,小球始终在最上方,回到初始位置后,小球消失,河马停止拍打翅膀。
  • 60分:在50分基础上,符合具体要求5),即再次按下空格键可循环运行。

效果预览

在编程之前,先来看看作品的完整效果吧:

思路分析

本题只有两个角色,分别是河马和小球,分开来看,每个角色的功能都比较简单,对于小球来说,主要有3个功能:

1). 按下空格时随机出现在舞台上方

2). 跟随河马移动

3). 隐藏

对于河马来说,也有3个功能:
1). 飞向小球

2). 将小球带回地面

3). 拍打翅膀这里的重点是程序执行的顺序,小球和河马的各个功能之间有着严格的先后顺序,有点你方唱罢我登场的味道,要做到这一点,就必须使用事件广播机制。

编程实现

根据上述思路分析,我们可以分如下4步来编写程序:

  • 角色初始化
  • 按下空格小球随机出现
  • 河马飞向小球
  • 河马将小球带回地面

1. 角色初始化

绿旗点击时,河马角色位于舞台下方,面向右方,我们将河马拖到舞台左下方,然后编写代码如下:

图片[4]-scratch河马捡球_第10届蓝桥杯scratch国赛教程-超平的编程课

这里的x和y并不是固定的,只要确保河马在舞台左下方即可,所以你在编写代码的时候,可以有不同的x和y坐标。

小球则是隐藏的,此时也不需要考虑它的位置,在小球角色中编写代码如下:

图片[5]-scratch河马捡球_第10届蓝桥杯scratch国赛教程-超平的编程课

这里添加了“移到最前面”指令,是确保小球处在河马图层的上方。

2. 按下空格键小球随机出现

当按下空格键时,小球出现在背景的天空范围内的随机位置,所以,小球的x和y坐标需要取随机值,其中x坐标的范围在-200到200之间,y坐标的范围在15到150之间。

对于按下空格键的处理,最简单的办法是使用“当按下空格键”指令,当小球出现后,河马就要飞向小球了,此时需要发送一个广播消息,在小球角色中编写代码如下:

图片[6]-scratch河马捡球_第10届蓝桥杯scratch国赛教程-超平的编程课

3. 河马飞向小球

当河马接收到“起飞”消息后,河马要飞向小球了,对于终点明确的运动,使用滑行指令最简单,但是滑行指令有一个特点,它是独占模式,在执行这个指令过程中,不能做其它任何事情。

题目要求的是河马一边拍打着翅膀一边向小球飞过去,我们可以借助广播来实现滑行和拍打翅膀的并行执行,也就是说在接收到”起飞“广播时,我们还需要实现角色的造型切换,在河马角色中,编写代码如下:

图片[7]-scratch河马捡球_第10届蓝桥杯scratch国赛教程-超平的编程课

这里有两个”当接收到起飞“代码块,这是很常见的一种写法,就像可以有多个绿旗代码块一样,两个代码块同时执行,这就是编程中的多线程,也叫并行执行,是一种非常重要的编程思想。

4. 河马将小球带回地面

当河马到达小球位置时,再次滑行到左下方,在这个过程中,小球是随着河马一起移动的,因此,在滑行之前需要给小球发送一个广播消息,在滑行结束时,需要再次发送一个广播消息给小球,告诉小球已经回到原位了。

在河马角色中的”在2秒滑行到Ball“指令下面,添加代码如下:

图片[8]-scratch河马捡球_第10届蓝桥杯scratch国赛教程-超平的编程课

在广播”回到原位“后,河马就不再移动了,也不需要拍打翅膀了,但是前面有一个切换造型的代码,一直在循环执行,需要停止循环,所以在后面添加了一个”停止该角色的其他脚本“指令。

当小球角色接收到”下落“广播时需要跟随河马移动,当接收到”回到原位“广播时则停止移动,并隐藏起来,在小球角色中编写代码如下:

图片[9]-scratch河马捡球_第10届蓝桥杯scratch国赛教程-超平的编程课

点击绿旗,运行程序,小球是能够跟随河马一起移动,但是奇怪的是小球位于河马的身上,如图所示:

图片[10]-scratch河马捡球_第10届蓝桥杯scratch国赛教程-超平的编程课

这显然不符合题意,题目要求小球要始终处于河马的嘴部,首先,我们要搞清楚为什么小球位于河马的身上。

原因其实很简单,小球的移动,我们使用的是”移到Hippo“指令,河马角色这么大,到底移到哪里呢?其实,在Scratch中,移到某个角色,是将当前角色的造型中心移到目标角色的造型中心,默认情况下,河马的造型中心在中间,所以就出现上图所示情况了,如图所示:

图片[11]-scratch河马捡球_第10届蓝桥杯scratch国赛教程-超平的编程课

一旦理解了其原因,问题就很容易解决了,只需要修改河马的造型中心,将造型中心设置为河马的嘴部即可,如图所示:

图片[12]-scratch河马捡球_第10届蓝桥杯scratch国赛教程-超平的编程课

需要注意的是,这里有两个造型,都需要修改,至此,整个作品就创作完成了。

总结与思考

本题较为简单,代码量不多,一共30个积木块左右,但涉及到的知识点还是挺多的,主要包括:

  • 造型中心的作用及修改角色造型中心;
  • 事件广播机制的灵活运用;
  • 角色的层次关系及设置;
  • 如何停止其它代码块的执行;
  • 运动编程,尤其是滑行指令的使用及其特点;
  • 多线程编程的实现方式;
  • 坐标和随机数的运用。

也许你已经注意到了,当河马飞向小球的时候,此时按下空格键,河马会移到另一个地方,这算不算是一个小bug呢?

其实,它并不影响后续程序的执行,站在考试的角度来讲,我们的程序完全符合题意。如果从逻辑的严谨性角度来讲,是需要进行优化的。在河马将小球带回地面之前,再次按下空格键是不应该移动小球的,你想到该怎么处理了吗?期待你的答案。


需要素材和源代码的,可以转到这里,河马捡球-2019.5.25蓝桥杯国赛第3题

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

请登录后发表评论

    暂无评论内容