保护大熊猫-第15届蓝桥杯国赛Scratch初/中级组真题第3题
[导读]:第15届蓝桥杯国赛已于2024年9月7日正式落下帷幕,初级组和中级组共用一套试题,编程题一共有6题(初级组只有前5题),分别如下:
保护大熊猫,本题是2024年9月7日举行的第15届蓝桥国赛Scratch初/中级组编程第3题,题目要求编程创作一个保护大熊猫作品。每隔1秒怪物从舞台右侧上边缘出现,向下降落到达地面后,再向左侧的大熊猫持续移动,如果碰到大熊猫,游戏结束。玩家控制士兵在平台上方上下移动,按下空格键发射子弹,如果子弹击中怪物,怪物消失,得分加1,当得分为3时游戏胜利。
先来看看题目的具体要求吧。
一.题目说明
编程实现:
保护大熊猫。
具体要求:
1). 点击绿旗,游戏开始,变量“得分”为0,士兵与舞台上边缘以一条竖线连接(竖线由画笔模块实现、 颜色和粗细不限),如图所示;
2). 每按下一次键盘↑或↓按键,可以分别让士兵向上或向下移动5步;
3). 士兵在移动的过程中,竖线长度随着士兵的上下移动而变化,并且士兵向下最多移动到熊猫上方的平台上,如图所示;
4). 游戏开始后,每隔1秒,从舞台右半部分上边缘的随机位置出现一个怪物,并向下降落,如图所示;
5). 每次按下空格键,枪口处只发射出一发子弹,子弹水平向右移动并且碰到怪物或舞台边缘后消失;
6). 被子弹击中的怪物会消失,同时 “得分”增加1,当 “得分”为3时,游戏胜利,程序结束,如图所示;
7). 未被击中的怪物到达地面后,朝向大能猫持续移动,并不断切换造型;(参考视频)
8). 当怪物碰到大熊猫后,大熊猫爆炸,游戏失败,程序结束,如图所示。
评判标准:
-
5 分:满足"具体要求"中的1);
-
3 分:满足"具体要求"中的2);
-
10分:满足"具体要求"中的3);
-
7 分:满足"具体要求"中的4);
-
10分:满足"具体要求"中的5);
-
5 分:满足"具体要求"中的6);
-
6 分:满足"具体要求"中的7);
-
4 分:满足"具体要求"中的8)。
二.思路分析
本题有5个角色,分别是士兵、子弹、大熊猫、游戏结果和怪物,如图所示:
其中大熊猫有两个造型,一个是正常造型,一个是爆炸造型,如图:
游戏结束有两个造型,分别表示游戏胜利和游戏失败,如图:
怪物也有两个造型,如图:
本题考查的知识点包括运动编程、画笔、按键处理、克隆、变量和广播机制等。
题目涉及的角色较多,我们可以按照角色的先后出场顺序将功能分成如下6个模块:
-
绘制吊绳
-
士兵上下移动
-
怪物出没
-
发射子弹
-
击中怪物
-
游戏结束
接下来,我们逐一分析。
1. 绘制吊绳
题目已经明确要求使用画笔来绘制,连分析都省了,这是画笔在游戏创作中的典型应用。在历届真题中多次出现过,比如第14届国赛中的《矿工挖宝》,第13届STMEA测评中的《小猫钓鱼》。
根据数学中的“两点确定一条直线”原理,只需要确定好吊绳的两个端点坐标就可以了。
由于士兵只能上下移动,所以两个端点的x坐标是固定的,大概是-180,舞台顶部的y坐标是180,这个也是固定的,另外一个端点的y坐标则随士兵上下移动而变化,可以直接使用士兵的y坐标。
为了方便起见,一般都会借助一个新的角色来绘制图形。
2. 士兵上下移动
在按下↑、↓方向键的时候,士兵上下移动,这涉及到按键处理,在Scratch编程中,按键侦测通常有如下两种方式:
-
使用事件模块中的“当按下xx键”指令;
-
使用侦测模块中的“按下xx键”;
从编写代码的角度来看,前者更加简单;如果从作品效果的角度来看,后者更好,因为它可以确保只有在游戏过程中按键才有效,建议使用后者。
至于上下移动,直接使用“将y增加10”指令即可。
3. 怪物出没
每隔1秒出现一个怪物,显然需要使用克隆,设置好克隆体的起点坐标,y肯定是固定的180,x则是在0~240之间取随机值。
有了克隆体,首先只考虑怪物的运动效果,这是一个非常重要的编程小技巧。
正常情况下(不考虑子弹的情况下),怪物先从上到下,然后从右到左,使用“重复执行直到”指令最方便,其中水平移动的时候还要不停地切换造型。
4. 发射子弹
按下空格键时会发射一颗子弹,这一步很容易出现bug,需要格外小心,有两个关键点:
-
按键处理
-
如何克隆子弹
首先是按键处理,如果使用事件指令的话,则任何时刻按键都会执行程序,游戏体验不好;如果使用侦测指令的话,可能会出现按住不放连续发射的情况,需要增加一个松开按键的处理。
其次是克隆子弹,这里要避免克隆陷阱,即避免在事件指令中克隆角色,包括按键处理和广播,因为所有的克隆体都会响应按键,都会接收广播消息。
注意,在编写子弹的时候,也不需要考虑怪物角色。
5. 击中怪物
有了子弹和怪物,接下来就可以处理二者的碰撞问题了,当子弹击中怪物时,二者都要消失,这是典型的克隆体碰撞模型。
在克隆体碰撞模型中,要确保克隆体双方都消失,不能简单的使用碰到对方就删除方式,因为双方在碰撞时,代码执行一定会有先后顺序,一旦某一方先删除自己了,那么对方就无法检测碰到对方了,这就导致有一方没有删除的bug。
处理方式也比较简单,就是在删除之前等一下,或者使用广播并等待,比如子弹在碰到怪物时,发生一个广播消息给怪物,等待击中的怪物先删除,再删除子弹克隆体。
6. 游戏结束
这部分比较简单,当击中3个怪物时,游戏胜利,如果怪物碰到大熊猫了则游戏失败。
思路有了,接下来,我们就进入程序实现环节。
三.编程实现
根据上面的思路分析,我们分7步来编写程序:
-
绘制吊绳
-
士兵上下移动
-
怪物出没
-
发射子弹
-
击中怪物
-
游戏胜利
-
游戏失败
1. 绘制吊绳
在Scratch自带的角色库中,添加一个画笔角色,如图所示:
在画笔角色中,编写代码如下:
代码比较简单,强调3点:
1). 角色可以任意选择,但是要将角色变小,这样才能确保可以移到舞台的上边缘;
2). 士兵在上下移动时,吊绳也跟随变化,因此要循环绘制,每次绘制前先将之前的擦除掉;
3). 在画笔角色中,要获取士兵的y坐标,需要使用侦测模块中的“舞台的背景编号”指令,如下:
点击左边的三角箭头,可以选择相应的角色,如图:
再点击右边的三角箭头,选择
2. 士兵上下移动
切换到士兵角色,编写代码如下:
代码比较简单,说明两点:
1). 要确保士兵在平台和舞台上边缘之间上下移动,在按键的同时还要看当前所处位置,两个条件是逻辑与的关系,当然也可以在“如果...那么”指令中嵌套一个“如果...那么”指令;
2). 对于上下移动,允许连按操作,所以不需要判断是否松开按键;
3. 怪物出没
切换到怪物角色, 在绿旗指令下编写代码如下:
执行这段代码,每隔1秒钟就会克隆出一个怪物,注意本体是隐藏的。
然后编写克隆体代码,如下:
代码不多,说明两点:
1). 第一个循环用于实现下落运动的,注意条件是 "y坐标 < -110",这样可以保持和题目效果图一致,不要使用“碰到舞台边缘”,因为怪物是从舞台上边缘出现的;
2). 第二个循环用于实现左移运动,左移过程中有造型变化,增加“等待0.05秒”是为了确保造型变化不至于太快,同时要调整x坐标增加的值;
4. 发射子弹
切换到子弹角色,在绿旗指令下编写代码如下:
这里使用了两个等待条件指令,确保按下鼠标发射一颗子弹,松开后再按下鼠标才发射下一颗子弹。
对应的,在克隆体中编写代码如下:
代码非常简单,克隆体生成后,从士兵所在位置,持续向右移动直到碰到舞台边缘后消失。注意一个细节,就是在绿旗下使用了“移到最后面”指令,让士兵覆盖在子弹的上面,效果更好。
5. 击中怪物
子弹和怪物各自的功能实现之后,就需要考虑二者之间的碰撞了,这是典型的克隆体碰撞模型,需要确保两个克隆体都能删除。
在子弹角色中,编写代码块如下:
对应的,在怪物角色中,编写代码块如下:
代码不多,但需要强调4点:
1). 碰撞是双方的,在哪个角色中先判断都可以,这里选择了子弹角色;
2). 这是一段独立的代码,只用于碰撞处理,因此这里使用了“等待条件”指令,这种写法是最简单的;
3). 这里使用了“广播并等待”指令,确保对方删除之后再删除自己,相应的在怪物角色中,需要判断是否碰到子弹,确保只有碰到子弹的克隆体才需要删除;
4). 击中一个怪物,得分加1,相应的要创建好变量,初始化的工作稍后进行;
6. 游戏胜利
胜利和得分相关,当得分增加到3时,游戏胜利,在子弹角色再添加一个新的代码块,如下所示:
代码非常简单,强调一点,又一次在独立代码段中使用了“等待条件”指令,一定要确保在等待指令之前得分为0。
对应的,切换到游戏结果角色,编写代码如下:
代码比较简单,注意两点:
1). 角色一定要进行初始化设置,包括位置和隐藏;
2). 在显示游戏胜利造型后,要停止全部脚本;
7. 游戏失败
当大熊猫碰到怪物时游戏失败,切换到大熊猫角色,编写代码如下:
然后在游戏结果角色中编写代码如下:
至此,整个作品就创作好了,可以运行程序测试效果啦。
四.总结与思考
本题是初/中级组编程部分第3题,分数为50分,积木块数量98个左右,涉及到的知识点主要包括:
-
运动编程;
-
画笔;
-
按键处理;
-
克隆编程;
-
事件广播机制;
-
变量;
作为本次国赛的第3题,难度中等,完成时间15分钟左右。关键点有两个,一是吊绳效果,二是子弹击中怪物时二者都消失的效果。
关于吊绳效果,这是一个老生常谈的问题了,就是通过画笔角色来绘制,很多小游戏中都有类似的应用,比如小猫钓鱼游戏中的丝线,矿工游戏中的绳子,愤怒的小鸟中的橡皮筋等。
子弹击中怪物二者都消失,这是一个典型的克隆体碰撞模型,在很多游戏中都会出现。题目其实并没有明确要求两者都消失,只要保证怪物碰到子弹时消失,基本上就可以拿分了,如果可以的话,还是要尽量做到二者都消失,这样的游戏体验才会更好嘛。
本题所涉及的角色比较多,代码量不小,要注意编写代码的先后顺序,同时要灵活地拆分代码块,尽量确保一个代码块只负责一个功能。
你还有什么好的方法吗,非常欢迎您和超平老师交流分享。
如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄
原文地址:https://blog.csdn.net/diamondwang2012/article/details/143628092
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!