[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第107讲。
蓝桥杯选拔赛现已更名为STEMA,即STEM 能力测试,是蓝桥杯大赛组委会与美国普林斯顿多文化教育研究中心合作推出的考试项目。STEM能力测试致力于综合评价学生的 STEM 水平,对学生的科技素养、逻辑思维和编程能力等三方面进行客观科学的测试。
小猫踢足球,本题是2022年12月18日举行的第14届蓝桥杯STEMA考试Scratch图形化编程真题初/中级组编程部分第4题,是初级组最后一题。题目要求编程实现小猫踢足球游戏,通过方向键控制小猫带球,把球带到中心区域,选择直线球和弧线球两种射门方式,将足球射进球门。
先来看看题目的要求吧。
编程实现:
小猫踢足球。
具体要求:
1). 运行程序,角色、背景如图所示;
2). 按下上、下、左、右按键可以控制小猫上、下、左、右移动;松开按键,小猫停止移动(小猫持续切换造型,左键控制小猫面向左,右键控制小猫面向右);
3). 小猫碰到足球时,足球会在小猫的脚下持续跟随小猫移动,当小猫面向右时,足球在小猫右侧脚下且持续顺时针自转,当小猫面向左时,足球在小猫的左侧脚下且持续逆时针自转(小猫只能在球场范围内带球移动);
4). 小猫带球来到中心圆环区域,按下A按键,小猫说:“可以射门”同时出现直线球和弧线球按键选项(舞台其他位置按下A按键不会出现射门方式的选项);
5). 鼠标左键点击射门方式按键后,小猫按照选择射门方式进行射门,足球入门后消失游戏结束(小猫可以使用两种踢球方式向左右两个球门射门)。
评判标准:
2分:满足"具体要求"中的1);
5分:满足"具体要求"中的2);
5分:满足"具体要求"中的3);
7分:满足"具体要求"中的4);
6分:满足"具体要求"中的5)。
本题有4个角色,分别是小猫、足球、直线球按钮和弧线球按钮,如图所示:
每个按钮都有相应的功能,其中两个按钮角色比较简单,默认是隐藏状态,当球处于中心圆弧区域并按下A键时,显示两个按钮。点击直线球按钮,足球就进行直线运动射进球门,点击弧线球,足球进行抛物线运动射进球门。
小猫角色的功能主要是上下左右移动,不过要注意两个细节,一是不要超出球场范围,二是在移动的过程中有造型切换。
足球角色是这里的重点,主要有如下3个功能:
跟随小猫移动并旋转
直线球射门
弧线球射门
针对第一点,可以让足球始终跟随小猫角色,但需要对位置进行微调,确保足球始终处于小猫的脚下,方向不同,调整方式也有区别。
针对第二点,相对来说比较简单,根据小猫的方向来决定足球向左或向右重复移动,当足球到达球门位置时,停止循环。
针对第三点,我们需要同时改变足球的x坐标和y坐标,从而形成抛物线运动效果。
还有一个细节,就是如何判断足球处于中心圆环区域,你是怎么想的呢?
最简单的方式当然是判断足球的x、y标是否等于中心点的坐标,但是使用这种方式,要进行射门就非常难了,因为你很难一次就能将球带到准确位置。
实际上,我们可以确定一个范围,只要足球进入这个范围就可以,判断的代码如下:
除此之外,超平老师再告诉一个巧妙的办法,就是使用辅助角色专门用于检测,绘制一个白色椭圆角色,将其移到中心圆弧区域,并设置虚像为100。在按下A键的时候,判断足球是否碰到辅助角色,这是很多游戏中常用的碰撞检测方法。
接下来,我们就进入具体的编程实现环节。
根据题目描述和思路分析,我们可以分5步来编写程序:
小猫上下左右移动
小猫带球
按下A键弹出射门选项
直线球射门
弧线球射门
1. 小猫上下左右移动
当按下上、下、左、右键的时候,小猫分别向对应的方向移动,在移动的同时切换造型,在小猫角色中编写代码如下:
简要说明3点:
1). 在整个移动过程中,小猫的方向只有两种,要么向左,要么向左,因此要将旋转方式设置为左右翻转;
2). 按左键时小猫面向左,按右键时小猫面向右,所以分别需要添加”面向90方向“和”面向-90方向“指令;
3). 要确保小猫只能在球场范围内带球移动,所以在按键的同时需要增加一个坐标的判断;
当然,有的同学使用了事件指令,也是可以的,以向上运动为例,代码如下:
效果基本一样,但是你要明白一点,使用事件指令时,当停止所有脚本后,按下方向键还是会有效果,也就是说,它不受绿旗的控制,这也是事件指令的特点。如果想要实现更好的游戏效果,尽量使用第一种方式。
2. 小猫带球
对于足球来说,当碰到小猫时,会跟随小猫移动,你肯定立刻就想到使用”移到小猫“指令,并重复执行,但发现效果是这样的:
之所以如此,是因为在Scratch中,将一个角色移到另一个角色时,是以角色的造型中心为依据的,也就是将两个角色的造型中心重叠起来。
要解决这个问题也非常简单,就是将足球移到小猫后,再对x和y坐标进行微调,其中y坐标减小一定距离,比如-40步。对于x坐标,则需要分情况来看,如果小猫向右,足球的x坐标要增加一定距离,如果小猫向左,足球的y坐标要减少一定距离。
在小猫角色中编写代码如下:
需要说明两点:
1). 在带球过程中,足球有旋转效果,因此需要将旋转方式设置为任意旋转,左右移动时,分别执行左转和右转指令,此时就必须要使用”将x坐标增加“指令了;
2). 在足球角色中,要获取小猫角色的方向,需要使用”小猫的方向“指令,这是一个非常重要的指令。使用它可以获取其它角色的一些信息,包括坐标、大小、方向、造型等,很多同学可能不是很熟悉,它属于侦测模块,如图:
它的特殊之处就在于左边和右边都是可以选择的,非常灵活。
3. 按下A键弹出射门选项
当小猫将足球带到中心圆弧区域时,按下A键,会显示两个按钮,根据前面的思路分析,我们通过一个辅助角色用于碰撞检测。
先绘制一个角色,如图所示:
看到了吗,角色和中心圆环区域中的白色点几乎一样。
将检测点角色放到中心圆环处,并将虚像特效设置为100,对应的代码如下:
这里并没有”隐藏“指令,是因为一旦角色隐藏了,就无法进行碰撞检测了。将虚像设置为100,也就是完全透明,我们看不到这个角色了,但是其他角色可以”看到“,因此可以实现碰撞检测。
接下来,就可以在足球角色中,检测是否按下A键了,切换到足球角色,编写代码如下:
为了避免一次按键会重复执行,增加了松开按键的判断逻辑,当按下A键时,如果足球碰到检测点了,就表示足球处于中心圆环区域了,此时发送一个”出现按钮“的广播消息。
小猫接收到广播后,说可以射门,在小猫角色中编写代码如下:
与此同时,两个按钮角色会显示出来,切换到直线角色,编写代码如下:
对应的,在弧线角色中,编写代码如下:
4. 直线球射门
点击直线按钮,小球就以直线运动进行射门,首先需要在直线角色中添加点击的代码,如图所示:
此处,并没有使用”当角色被点击“指令,是为了避免重复点击操作。
当足球角色接收到”直线球“广播后,就开始重复移动了,不过要根据小猫的方向来决定是左移还是右移。
为了方便,可以创建一个变量”x速度“,来表示水平方向运动的速度,在足球角色中编写代码如下:
又一次用到了”小猫的方向“指令,这里的速度大小是可以随意调整的,相应的循环次数也需要进行调整。
5. 弧线球射门
点击弧线按钮,小球以弧线方式进行射门,首先在弧线角色中增加如下代码:
相应的,在足球角色中,编写代码如下:
为了实现弧线运动,这里增加了一个变量”y速度“,将变量的初始值设为正数,比如这里的8,这样可以让足球向右上运动,在运动过程中,不断地减少y速度,当y速度减到0时,足球就到达最高点,然后开始向右下运动,从而形成了一个抛物线运动。
”y速度“的初始值以及每次增加的幅度并不是一次就能确定下来的,需要多尝试几次。
关于抛物线运动的原理和实现,在前面的教程中已经讲过多次,可以参考《模拟昼夜交替-第11届蓝桥杯Scratch国赛真题第1题》这篇教程,这里就不再赘述了。
至此,我们的小猫踢足球作品就创作好了,赶紧来体验一下小猫先生的射门技术吧。
本题是初级组最后一题,分数为25分,积木块数量115个左右 ,涉及到的知识点主要包括:
直线运动,包括上下左右4个方向的运动;
键盘事件编程的两种实现方式及其区别;
角色点击的两种实现方式及特点;
事件广播机制;
抛物线运动的编程技巧;
在一个角色中获取其它角色信息的编程技巧。
作为初级组最后一题,本题难度较大,考察的重点是运动编程和键盘事件编程。超平老师一直强调,运动编程是Scratch编程的核心,一旦掌握了运动编程,画笔编程和克隆编程也就没什么难度了。
还有一点,在检测足球是否处于中心圆环区域时,使用了一个辅助角色,这是一个非常有用的游戏编程技巧,一旦掌握了,你又多了一个技能包。
这是一个简单的足球游戏,你完全可以发挥自己的创意和想法进行改编,增加一些更有趣的元素,比如得分,射门力度等,赶紧试试吧。
如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香
需要素材和源码的,可以移步至“超平的编程课”公众号,或者联系作者。