保护大熊猫-第15届蓝桥杯国赛Scratch初/中级组真题第3题

文摘   教育   2024-09-23 20:45   湖北  

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第195讲

如果想持续关注Scratch蓝桥真题解读,可以点击《Scratch蓝桥杯历年真题并订阅合集,查阅教程更方便。

第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分钟左右。关键点有两个,一是吊绳效果,二是子弹击中怪物时二者都消失的效果。

关于吊绳效果,这是一个老生常谈的问题了,就是通过画笔角色来绘制,很多小游戏中都有类似的应用,比如小猫钓鱼游戏中的丝线,矿工游戏中的绳子,愤怒的小鸟中的橡皮筋等。

子弹击中怪物二者都消失,这是一个典型的克隆体碰撞模型,在很多游戏中都会出现。题目其实并没有明确要求两者都消失,只要保证怪物碰到子弹时消失,基本上就可以拿分了,如果可以的话,还是要尽量做到二者都消失,这样的游戏体验才会更好嘛。

本题所涉及的角色比较多,代码量不小,要注意编写代码的先后顺序,同时要灵活地拆分代码块,尽量确保一个代码块只负责一个功能。

你还有什么好的方法吗,非常欢迎您和超平老师交流分享。

如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄

需要素材和源码的,可以添加本人微信

另外,超平老师创建了一个蓝桥杯备考交流群,这是专门为老师和家长打造的免费社群,您可以与来自全国各地的老师、家长共同交流经验,分享学习心得。

超平老师也会给大家带来及时的赛事动态,备考攻略,真题资源分享,帮助各位更好备考第15届蓝桥杯赛事,力争取得优异的成绩。

扫码或长按加入微信群

超平的编程课
青少儿编程教育专家,中国人民大学硕士,大学讲师,曾任知名上市机构金牌讲师,16年编程教研经验。大耳猴少儿编程联合创始人,致力于通过编程教育提升孩子的逻辑思维、数学思维和计算思维,迎接AI时代。
 最新文章