蜘蛛侠大战灭霸-第13届蓝桥杯Scratch省赛1真题第5题

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

第13届蓝桥杯青少年组省赛分两次进行,这是2022年4月17日举行的第一次省赛考试,形式为在线考试。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。

蜘蛛侠大战灭霸,本题是第13届蓝桥杯Scratch第一次省赛真题编程第5题,是初级组的最后一题,中级组也有此题。题目以蜘蛛侠为背景,要求考生编程实现蜘蛛侠大战灭霸的精彩一幕。

先来看看题目的要求吧。

一.题目说明

背景信息:

无限手套,是灭霸用于控制作为无限宝石的载体。将灵魂宝石,力量宝石,时间宝石,空间宝石,现实宝石,心灵宝石,这六块宝石聚集在一起持有者就拥有让所有现实灭亡的能力。

编程实现:

灭霸想要毁灭世界,蜘蛛侠只剩下10秒时间来阻止无限手套充能。如果无限手套上的6块宝石都被依次点亮,灭霸获得胜利,如果没有成功点亮全部六块宝石,蜘蛛侠获得胜利。

具体要求:

1). 点击绿旗,角色、背景如图所示(注意:蜘蛛侠手中的蜘蛛丝是由画笔模块绘制出的白色线段,灭霸持续说:“无限手套充能中...”);

2). 用键盘的上、下键,控制蜘蛛侠上、下移动(蜘蛛丝根据蜘蛛侠的移动伸长或缩短);

3). 红色充能进度条开始缓慢增加,进度条和数值每秒增加10%;

4). 六块能力宝石随进度条依次点亮(对应进度数值为10%,30%,50%,70%,90%,100%);

5). 按下空格键,从蜘蛛侠的另一只手发射蜘蛛网,蜘蛛网呈抛物线移动(提示:水平速度不变,垂直速度不断变化);

6). 当蜘蛛网落在灭霸的身上时,能量进度条和数值都会暂停增长1秒;

7). 游戏时间为10秒,在舞台左上角显示,并准确呈现出倒计时功能(依次显示10、9、8......2、1、0);

8). 在10秒钟倒计时结束时,如果无限手套没有充能到100%,灭霸消失,进度条停止增加,蜘蛛侠说:“我胜利了!!!”;

9). 在10秒钟内,如果无限手套充能到100%,蜘蛛侠从舞台上消失,倒计时停止,灭霸说:“我胜利了”。

二.思路分析

本题角色众多,一共有11个,角色列表如图所示:

根据题目的描述,我们使用模块化的编程思想,将整个作品划分成以下5个小模块:

1). 绘制蜘蛛丝

2). 发射蜘蛛网

3). 进度条增加

4). 点亮宝石

5). 倒计时及结束

绘制蜘蛛丝需要使用Scratch画笔相关指令,当蜘蛛侠上下移动的时候,需要擦除之前的蜘蛛丝,然后再绘制新的蜘蛛丝。

当按下空格键的时候,蜘蛛侠就发射一个蜘蛛网,这需要使用Scratch克隆技术,而蜘蛛网的抛物线运动则需要同时改变x坐标和y坐标。

进度条每秒增加10%,这里的能量块角色只有一个造型,因此,要实现进度条逐渐增加只有借助克隆了,每隔1秒,就克隆一个能量块,并调整好其位置和大小,确保在克隆10个能量块之后,刚好覆盖白块区域。在进度条增加的同时,还需要改变进度的数值,很显然,这需要使用变量。

点亮宝石相对要简单一些,这里有6块宝石,随着进度的增加,逐个点亮宝石。通常情况下,可以使用切换造型来实现点亮效果,但是这里的宝石都只有一个造型,所以,我们可以利用外观特效,及改变角色的亮度来达到点亮的效果。

最后就是倒计时了,使用变量,将时间设为10,每隔1秒减1,在这个过程中,需要判断胜负情况,判断的依据是看进度条先到100%还是时间先减到0。如果进度条先到100%,那么灭霸胜利,否则蜘蛛侠胜利。

三.编程实现

根据上面的思路分析,我们分5步来编写程序。

1). 绘制蜘蛛丝

点击绿旗,启动程序时,需要绘制蜘蛛丝,在按上下方向键时,需要重新绘制蜘蛛丝。在Scratch中,绘制图形需要结合移动才能完成,如果直接使用蜘蛛侠角色来画图,会出现来回跳跃的情况,所以,我们需要借助画笔角色来完成绘制工作。

切换到蜘蛛侠角色,编写代码如下:

在点击绿旗以及按住上下方向键的时候,分别发送了一个“绘制蜘蛛丝”的广播消息。

切换到画笔角色,完成蜘蛛丝的绘制,编写代码如下:

绘制的方法也非常简单,就是每次擦除之前的所有内容,然后将画笔移到蜘蛛侠手的位置落笔,接着移动画笔到舞台最上方,最后抬笔即可。

需要注意的是,手的位置并不等于蜘蛛侠造型中心的位置,需要进行相应的调整,这里向左移动了40步,向上移动了70步)。

在点击绿旗的时候,灭霸位于舞台右下方,并且持续说:“无限手套充能中...”,切换到灭霸角色,编写代码如下:

2). 发射蜘蛛网

当按下空格键时,蜘蛛侠会发射一个蜘蛛网,根据前面的思路分析,使用克隆即可。在蜘蛛侠绿旗下的重复代码块中,增加如下代码:

这里直接在蜘蛛侠角色中克隆蜘蛛网角色,并没有使用广播消息机制,其目的是为了避免蜘蛛网克隆体在接收到广播时也会克隆自己从而出现大量蜘蛛网的奇怪现象。

一旦有了克隆体,蜘蛛网就开始抛物线运动,所谓的抛物线运动,其实就是x方向和y方向同时运动的叠加效果,只需要保持水平速度不变,垂直速度不断变化即可。

切换到蜘蛛网角色,编写代码如下:

当蜘蛛网克隆体碰到舞台边缘的时候,就删除此克隆体,这里并没有考虑碰到灭霸的情况,稍后我们会单独处理。

3). 进度条增加

这里的进度条每隔1秒就增加10%,直到进度为100%为止,由于在Scratch中,百分比是不能增加的,因此,我们需要使用两个变量,一个变量表示进度(没有%),另一个变量表示进度值(有%)。

在克隆过程中,还需要注意,如果灭霸被蜘蛛网击中了,进度条和能力值要暂停1秒钟。我们可以使用一个变量表示是否击中灭霸,在蜘蛛网碰到灭霸时设为1,1秒后再设为0,在蜘蛛网角色中编写代码如下:

再切换到能量块角色,编写代码如下:

需要重点说明两点:

①. 这里只等待了0.5秒就克隆一个能量块,如果按照题目说的1秒,那么灭霸就没有机会获胜了。(我个人认为题目描述有误)

②. 如果循环能够正常执行完毕,则说明倒计时还没有减为0,此时灭霸获胜,所以在代码的结尾处,添加了一个“灭霸胜利”的广播消息。

4). 点亮宝石

有了进度值,接着就可以实现点亮宝石的效果了,我们以灵魂宝石为例,首先要设置好宝石的位置,并使用亮度特效将其设置为黑色,当进度为10时,清除特效,就可以点亮宝石了,代码如下:

其余的5颗宝石角色代码基本一样,这里就不再列出了。

5). 倒计时及结束

倒计时也比较简单,新建变量“倒计时”,初始值设为10,每隔1秒减1,直到减为0。切换到蜘蛛侠角色,编写代码如下:

对于获胜的判断,我们有一个非常简单的办法,如果倒计时到0了,进度还没有到100,则说明蜘蛛侠获胜。相应的,如果进度增加到100,但是倒计时没有减为0,则说明灭霸获胜。

为了确保上述逻辑的正确性,一旦广播“蜘蛛侠胜利”或者“灭霸胜利”时,需要立刻停止对方的代码。在上述代码中,蜘蛛侠在接收到“灭霸胜利”的广播时,就立刻停止蜘蛛侠角色的所有代码,这样也就停止了倒计时功能。

相应的,在能量块角色中,我们也需要做相同的处理,切换到能量块角色中,增加代码如下:

如此一来,一旦蜘蛛侠获胜,则能立刻所有的代码立刻停止执行。

对于灭霸角色,如果灭霸获胜,它会说“我胜利了”,如果失败,则需要隐藏,对应的,切换到灭霸角色,增加代码如下:

至此,整个作品就创作完成了,你可以来两盘蜘蛛侠大战灭霸了,轻松一下。

四.总结与思考

作为省赛的最后一题,还是非常有难度的,代码量较大,一共有150个积木块左右,难度系数为5,分值为80,涉及到的知识点主要包括:

  • 按键事件的处理,包括↑、↓和空格键;

  • 克隆编程的应用,尤其是在一个角色中克隆另一个角色的妙用;

  • 变量的使用,重点是显示100%变量的技巧;

  • 事件广播机制;

  • 巧妙使用亮度特效来实现宝石点亮效果;

  • Scratch画笔的使用;

  • 抛物线运动的编程实现。

本题以大家熟悉的蜘蛛侠为背景,编程实现了蜘蛛侠大战灭霸的精彩场景,趣味性强。

作品的综合性非常强,要实现的功能也比较多,代码量较大。碰到类似题目,我们应该充分运用计算思维中的拆解技巧,将作品拆分成若干小模块,然后逐个实现,这也是我们提倡孩子学习少儿编程的一个重要原因。

如果你觉得文章对你有所帮助,别忘了点赞,你的鼓励是我坚持继续写下去的最大动力,十分感谢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值