豌豆射手-第13届蓝桥杯Scratch选拔赛真题精选
第13届蓝桥杯青少年组第3次选拔赛于2021年11月27日举行,形式为线上考试。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。
豌豆射手,本题是2021年11月27日举行的第13届蓝桥杯Scratch选拔赛真题编程第4题,初级组和中级组都有此题,题目要求编程创作植物大战僵尸游戏中的一个典型场景,即在舞台上放置豌豆射手,并实现发射子弹的效果。
先来看看题目的要求吧。

题目说明

编程实现:
在舞台上放置豌豆射手,并实现发射子弹的效果。
1). 点击绿旗,角色、背景如图所示;
2). 在左上角豌豆射手位置,按下鼠标左键,会生成一个新豌豆射手,拖动鼠标新豌豆射手跟随鼠标移动,移动到新的位置松开鼠标左键,新豌豆射手会被放置在这个新位置,新豌豆射手不会再跟随鼠标移动;
3). 豌豆射手只能放置在黄色土地上,如果放置在灰色石砖上,豌豆射手会在0.1秒后消失;
4). 在黄色土地上放下豌豆射手之后,豌豆射手就开始持续变化造型(造型间的切换间隔0.1秒),每当切换到最后一个造型时,豌豆射手会发射子弹(如图所示);
5). 子弹水平向右侧飞行,在右侧边缘消失(每个豌豆射手都可以持续发射子弹)。
评分标准:
5分:满足要求1);
6分:满足要求2);
8分:满足要求3);
8分:满足要求4);
3分:满足要求5)。

思路分析

本题包含两个角色,分别是豌豆射手和子弹,如图所示:
程序实现
根据题目描述和思路分析,我们可以分3步来编写程序:
克隆豌豆射手
放置豌豆射手 克隆子弹并发射
1. 克隆豌豆射手
当绿旗被点击时,将豌豆射手移到舞台左上角,如果鼠标移到豌豆射手位置,并按下鼠标,就克隆一个豌豆射手,代码如下:
需要注意,为了避免重复克隆,这里增加了一个限制条件,即等待松开鼠标后才能进行下一次循环。
2. 放置豌豆射手
豌豆射手克隆体在启动时,会一直跟随鼠标移动直到松开鼠标,代码如下:
当松开鼠标后,可以放置豌豆射手了吗?
非也,我们还需要判断豌豆射手是不是放在了黄色土地上,前面的思路分析中提到使用颜色碰撞来检测,但是这里的砖块比较小,而豌豆射手角色有点大,直接进行颜色碰撞检测肯定会出现较大的误差。
因此,我们要将豌豆射手角色变小,最好是变成一个小点点,可以给角色再增加一个造型,如图:
有了这个小点点造型,判断就非常精确了,先将角色换成点造型,再判断是否碰到灰色,如果是则等待0.1秒后删除克隆体,否则就每隔0.1秒切换到下一个造型,代码如下:
简要说明两点:
1). 这里的灰色有深有浅,所以这里选择了两种灰色;
2). 在切换下一个造型的时候,或出现小点点造型,所以这里增加了一个条件判断,当切换到小点点造型时,立刻换成第一个造型,从而避免出现小点点造型;
3. 克隆子弹并发射
克隆子弹是本题的难点,根据思路分析,需要先创建好两个列表“x”和“y”,如图:
当点击绿旗时,需要将列表清空,代码如下:
你可以将这个绿旗代码块和前面的绿旗代码块合并起来。
在Scratch中克隆角色,通常有两种方式,一是在当前角色中克隆自己,二是在别的角色中克隆自己。很多同学都喜欢使用第一种方式,大多数情况下是没有问题的,但是要避免通过发送广播消息,然后克隆自己。这是因为克隆体也会接收到广播消息,这会导致克隆体爆炸式增长。
本题正是这种情况,所以我们应该毫不犹豫的选择第二种方式,在豌豆射手角色中克隆子弹,根据题目描述,当切换到第4个造型时,就发射一颗子弹,对应的增加代码如下:
重点来了,在克隆子弹之前,我们需要将当前豌豆克隆体的坐标存放到列表x和列表y中。
对于子弹角色来说,只需要编写“当作为克隆体启动时”代码块就可以了,先设置好克隆体的位置,然后立刻删除列表中的数据,再让子弹向右移动直到舞台右边缘。
切换到子弹角色,编写代码如下:
重点说明两点:
1). 由于每次使用完列表数据就立刻删除了,因此列表不会保存太多的数据,更重要的是,这样可以确保,每次只需要从列表中取出第一项数据即可,这种先进先出的特点,就是数据结构中的队列,保存坐标时,就是入队操作,删除坐标时,则是出队操作,如图所示:
2). x和y保存的是豌豆射手的位置,这个位置并不是豌豆射手嘴巴的位置,因此需要向上向右挪一点,所以这里在两个坐标的基础之上分别增加了15和10。
至此,我们的豌豆射手发射子弹效果就已经做好了,你可以测试效果了,测试的时候,可以将列表显示出来,观察一下列表数据的变化情况,从而更好的理解列表的使用及队列的入队和出队效果。

总结与思考

克隆角色,重点注意在克隆体中进行二次克隆的情况;
妙用小点点造型结合颜色碰撞进行条件侦测;
如何侦测松开鼠标,使用“按下鼠标”+“不成立”;
列表的基本操作及作用;
队列的基本思想和用法。
本作品难度较大,难点在于如何确保每个克隆体子弹都从正确的位置发射出去,这里使用了队列的数据结构,利用其先进先出的特点,确保每个子弹克隆体从正确的位置出发。
本题以经典的植物大战僵尸游戏为背景,学习如何使用列表来精确控制克隆体的位置,灵活运用了队列的数据结构及实现算法,是一道质量很高的编程题。

添加 家长论坛微信
全部 0条评论