[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第47讲。
第12届蓝桥杯青少年组省赛分两次进行,这是2020年10月19日举行的第一次省赛考试中级组,形式为在线考试。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。
投篮游戏,本题是第12届蓝桥杯Scratch第一次省赛真题中级组编程第4题。题目要求考生编程实现一个有趣的投篮游戏。按下空格键力量槽红色逐渐增加,当力量槽到达预计位置时松开空格键,篮球按照抛物线轨迹投出,篮球落入篮筐分数加 1 力量槽变空,掉落在舞台边缘的篮球重新回到准备区。
先来看看题目的要求吧。
编程实现:
投篮(力量槽:黄色条近投区域,绿色条投进区域,红色条投过区域)。
具体要求:
1). 点击绿旗,角色与背景如下图所示呈现在对应位置;
2). 按下空格键力量槽红色逐渐增加(范围不能超过 Min-Max 的范围);
3). 当力量槽到达预计位置时松开空格键,篮球按照抛物线轨迹投出;
4). 篮球落入篮筐分数加 1 力量槽变空,掉落在舞台边缘的篮球重新回到准备区;
5). 篮球没有投进篮筐力量槽变空,分数不增加,掉落在舞台边缘后重新回到准备区;
6). 力量槽:黄色条近投区域,绿色条投进区域,红色条投过区域;
7). 程序重复执行,并且以上步骤全部正确。
评判标准:
5 分 :满足要求 1);
5 分 :满足要求 2);
15 分 :满足要求 3);
15 分 :满足要求 4);
15 分 :满足要求 5);
15 分 :满足要求 6);
10 分 :满足要求 7)。
本作品一共有3个角色,分别是球员、篮球和画笔,如图所示:
其中,球员角色最简单,只需要固定好位置即可,画笔角色的功能是绘制力量槽中的红色线段,篮球角色是这里的重点,它会根据力量槽的指示位置,进行不同的抛物线运动。
什么是抛物线运动呢?先来看一下这张图:
从数学的角度讲,抛物线通常使用一个函数来表示,只要知道角色的x坐标,就可以通过函数计算出y坐标的值。
但是在Scratch编程中,我们有更简单的解决方案,就是将抛物线运动进行分解,分为水平和垂直两个方向上的运动,其中水平方向上做直线运动,而垂直方向先上升直到最高点然后下落。
根据题目描述及思路分析,我们可以按角色逐个编写程序:
球员角色
画笔角色
篮球角色
1). 球员角色
球员角色最为简单,只需要设置好位置即可,代码如下:
2). 画笔角色
对于画笔角色而言,我们可以分3步来实现:
初始化设置
按下空格键绘制红色线段
松开空格键时确定力量槽所处区域
①. 初始化设置
初始化化主要包括隐藏画笔、擦除舞台、设置颜色和画笔大小,代码如下:
②. 按下空格键绘制红色线段
接下来需要检测用户是否按下空格键,一旦按下空格键,就开始绘制,所谓的绘制就是在落笔之后,向右移动画笔即可,这可以使用“将x坐标增加10”指令来实现,改变每次增加的步数,就可以调整绘制的速度。
绘制过程中,需要确保其范围在Min-Max之间,因此需要设置好画笔的起点,其坐标是(-120,136),最右边Max位置的x坐标是110。因此,停止画笔绘制的条件有两个,一是x坐标 > 110,二是松开空格键,这部分的代码如下:
在Scratch中,没有松开空格键指令,我们可以通过“按下空格键” + “不成立”的指令组合来实现松开空格键,这是一个常用的编程技巧,所有的按键都可以使用这种方式。
③.松开空格键确定力量槽所处区域
一旦松开空格键,我们就需要确定力量槽所处的区域了,根据题目说明,这里有3个区域,其中黄色条为近投区域,绿色条为投进区域,红色条为投过区域。
要判断哪个区域可以根据画笔角色所处的位置来确定,同时还需要创建一个变量用来表示所在区域,然后就可以给篮球角色发送广播消息了,在抬笔指令下面,编写代码如下:
注意,这里的广播使用了“广播并等待”指令,其作用是确保在篮球完成投篮落地后才擦除红色线段,清空力量槽。
3). 篮球角色
绿旗点击时,需要设置好篮球的位置,同时将“分数”变量设置为0,代码如下:
当接收到“投篮”广播消息时,需要根据“区域”变量的值,进行不同的抛物线运动。
根据前面的分析,我们将抛物线运动拆分成水平方向和垂直方向两个方向上的运动,其中水平方向的运动速度不变,而垂直方向上的速度开始是正数,然后不断减小,当速度减到0时,就到达了最高点,然后就开始下落,从而形成抛物线运动。
我们需要根据所处区域的不同来设置垂直方向上的初始速度,不妨将垂直方向上的速度使用变量“y速度”来表示,当篮球碰到舞台边缘,则停止运动,此时要将篮球移到准备区,如果投进了,还需要将分数加1,具体的代码如下:
简要说明两点:
①. 这里将x坐标增加5,将y速度增加-0.3,以及y速度的初始值并不是固定的数值,你可以进行相应的调整,在实际编程时,需要多次调整,以达到最佳效果;
②. 在画笔角色中,我们使用了“广播投篮并等待”指令,它会等待篮球角色执行完所有代码,也就是最后的“移到x:-171 y:9”指令后才会执行“全部擦除”指令,这是一个非常有用的编程小技巧,一定要掌握好哦。
本题有一定的难度,一共使用了62个积木块,分值为80,涉及到的知识点主要包括:
Scratch画笔功能;
按键事件编程,尤其是要注意松开空格键的编写方式;
嵌套循环的使用;
条件指令的嵌套使用;
事件广播机制,尤其是广播并等待的妙用;
抛物线运动的实现技巧。
本题的难点在于如何实现篮球的抛物线运动,我们的方案就是将运动进行分解,分成x和y两个方向上的运动,这其实就是计算思维所倡导的拆分思维。任何一个复杂问题,都可以进行拆解,变成若干简单问题,处理好每一个简单问题,复杂问题也就迎刃而解了。
关于抛物线运动的实现,在蓝桥杯中已经多次出现了,比如第10届蓝桥杯Scratch国赛真题第4题《沙漠变绿洲》,第11届蓝桥杯Scratch国赛真题第1题《模拟昼夜交替》,第13届蓝桥杯Scratch省赛1真题第5题《蜘蛛侠大战灭霸》。
不知道你注意到了没有,我们只是将力量槽分成3个不同的区域.在真正的篮球游戏中,通常是根据按下力量槽的时间长短来决定投篮力量,按下的时间越短,投的越近,按下的时间越长,投的越远,你知道是怎么实现的吗?不妨尝试一下,看看你的想法对不对。
如果你觉得文章对你有所帮助,别忘了点赞,你的鼓励是我坚持继续写下去的最大动力,Thanks♪(・ω・)ノ。