[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第176讲。
如果想持续关注Scratch蓝桥真题解读,可以点击《Scratch蓝桥杯历年真题》并订阅合集,查阅教程更方便。
第15届蓝桥杯第5次STEMA测评已于2024年3月10日落下帷幕,编程题一共有6题(初级组只有前5道编程题),分别如下:
-
熊猫左右转
-
返回地球
-
吐丝的蜘蛛
-
最大的三位数
-
记忆力考验游戏
-
回文数
吐丝的蜘蛛,本题是2024年3月10日举行的第15届蓝桥STEMA测评Scratch编程初/中级组编程第3题,题目要求编程模拟蜘蛛吐丝效果。当在舞台上点击鼠标时,蜘蛛会吐出一条白色丝线,然后蜘蛛沿着白色丝线向鼠标点击位置缓慢移动,并吃掉沿途经过的白色丝线。
先来看看题目的要求吧。
一.题目说明
编程实现:
吐丝的蜘蛛。
具体要求:
1). 点击绿旗,角色、背景如图所示;
2). 鼠标点击舞台任意位置后,蜘蛛会朝向鼠标点击位置,如图所示;
3). 然后,蜘蛛吐出一条白色丝线到鼠标点击位置,如图所示;
4). 接下来,蜘蛛沿着白色丝线向鼠标点击位置缓慢移动,并吃掉沿途经过的白色丝线,如图所示;(参考视频)
5). 蜘蛛移动过程中鼠标点击任意位置无效果,蜘蛛吃完白色丝线后停止移动;(参考视频)
6). 重执行具体要求2)、3)、4)、5)。
评判标准:
-
2分:满足"具体要求"中的1);
-
5分:满足"具体要求"中的2);
-
10分:满足"具体要求"中的3);
-
14分:满足"具体要求"中的4);
-
14分:满足"具体要求"中的5);
-
5分:满足"具体要求"中的6)。
二.思路分析
本题只有1个蜘蛛角色,如图所示:
本题考查的知识点包括运动编程、Scratch画笔、广播和变量等。
根据题目的描述,我们可以将作品的功能分成两个部分:
1). 蜘蛛的运动
2). 模拟吐丝
在舞台任意位置点击鼠标时,蜘蛛就面向鼠标指针慢慢移动到鼠标点击位置。这是典型的直线运动,关于运动,通常有如下3种实现方式:
-
”重复执行“ + “移动10步” ;
-
”重复执行“ + ”将x/y坐标增加10“;
-
”在1秒内滑行到x/y(角色)“;
你知道它们3者之间的区别吗,使用哪一种更简单呢?
由于蜘蛛的终点(目标位置)是确定的,因此使用滑行是最合适的,只需1个指令就可以。
除此之外,滑行指令还有一个特点,它是独占模式,在执行滑行指令时,同一个代码块中的其它代码不会执行,这刚好满足要求5),即蜘蛛移动过程中鼠标点击任意位置无效果,可以说是两全其美。
本题的难点是吐丝效果,尤其是蜘蛛在移动过程中要吃掉白色丝线。
这里的白色丝线长度不固定,还会越变越短,想利用造型切换来实现显然是不合适的,而画笔则可以完美的达到效果。
要擦除直线的一部分,通常有如下两种方式:
-
绘制一条和背景色相同的直线,将要擦除的部分覆盖掉;
-
擦除整条直线,重新再绘制一条直线,不断重复这个过程;
对于本作品而言,第一种方式肯定行不通,因为背景色不是单一颜色,因此,我们只能选择第二种方式。
由于蜘蛛角色本身也在缓慢滑行,我们需要借助一个新角色来完成绘制工作。
绘制的时候,需要注意一点,蜘蛛在移动时,鼠标是允许移动的,但是蜘蛛的目标位置是固定的,因此需要使用变量保存好鼠标点击的位置。
思路有了,接下来,我们就进入具体的编程实现环节。
三.编程实现
根据上面的思路分析,我们分3步来编写程序:
-
准备工作
-
蜘蛛的移动
-
模拟吐丝
1. 准备工作
根据前面的思路分析,我们要添加一个角色,用来完成绘制工作,如图所示:
对于画笔角色,你可以选择任何角色,需要注意的是,角色不能太大,以避免在绘制直线时碰到舞台边缘。
2. 蜘蛛的移动
对于蜘蛛而言,在点击绿旗时,要先设置好初始位置和方向。当点击鼠标后,就面向鼠标指针,移到鼠标指针位置,对应的代码如下:
代码比较简单,说明两点:
1). 按下鼠标的判断,也可以使用”如果...那么“指令,相对来说,使用”等待条件“指令更简洁;
2). 滑行指令中的时间,是可以修改的,比如1.5、2.5、3,尽量保持和提供的参考视频一致。
3. 模拟吐丝
根据前面的思路分析,画直线的任务由pencil角色来完成。
首先,我们必须要确定3个问题:
-
什么时候开始画?
-
什么时候结束绘制?
-
直线的起点和终点如何确定?
很显然,一旦点击鼠标就需要开始绘制,当蜘蛛到达鼠标点击位置时结束绘制,所以我们可以在蜘蛛角色中发送广播以告知pencil角色。
直线的起点其实就是蜘蛛的位置,每次都会变化,但是终点位置是鼠标点击的位置,是不能跟随鼠标位置进行变化的,需要使用变量保存起来。
在蜘蛛角色中,增加代码如下:
一共增加了4行代码,说明两点:
1). 这里的变量”x“和”y“都是全局变量,需要单独创建;
2). ”画线“的广播,需要在设置变量x和y的后面,这样确保第一次绘制的时候终点位置是正确的。
接下来,就是实现pencil角色如何绘制直线了,可以分3步来描述。
第一步,设置画笔,包括颜色和粗细,在绿旗指令下编写代码如下:
第二步,接收到”开始“广播后,不停的擦除并绘制直线,代码如下:
这一步是最关键的,强调三点:
1). 由于要不停的擦除,然后重新绘制,所以需要使用重复执行;
2). 在重复执行中,一定要先使用”擦除全部“指令,然后重新绘制,这个顺序不能倒过来,否则就看不到直线;
3). 在绘制直线时,先移动起点,再落笔,到达终点后需要抬笔,这里的起点和终点也可以互换。
第三步,在接收到”结束“广播后,停止绘制,继续编写代码如下:
这一步,非常简单,注意不是”停止全部脚本“,而是”停止该角色的其他脚本“。
不加的话,其实也不影响效果,但还是建议加上,将重复的动作停下来,也可以节省一点CPU和内存资源嘛。
至此,整个作品就创作好了,你可以在舞台任意位置点击鼠标,欣赏一下蜘蛛吐丝并吃掉丝线的效果啦。
四.总结与思考
本题是初/中级组编程部分第3题,分数为50分,积木块数量30个左右,涉及到的知识点主要包括:
-
运动编程;
-
Scratch画笔;
-
变量;
-
事件广播机制;
本题难度中等,难点在于如何使用画笔来模拟吃掉丝线的效果。关键是理解”吃掉“的原理,其实就是不停的擦除,然后重新绘制。
实际上,这种不断伸长和收缩线段的编程技巧,在很多游戏中都有体现,比如小猫钓鱼作品中的钓鱼线,愤怒的小鸟作品中的弹弓、黄金矿工作品中的绳索等。
其中,矿工挖宝是第14届国赛的真题, 可以参考《矿工挖宝-第14届蓝桥杯国赛Scratch真题初中级组第4题》这篇教程。
超平老师给你留一道思考题,如果不增加新角色,要模拟吐丝效果,你有什么其它办法吗?
如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄
需要素材和源码的,可以移步至“超平的编程课”gzh。