[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第81讲。

蓝桥杯选拔赛每一届都要举行4~5次,和省赛、国赛相比,题目要简单不少,再加上篇幅有限,因此我精挑细选了一部分题目进行解读。

第12届蓝桥杯青少年组第6次选拔赛于2021年3月27日举行,形式为线上考试。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。

乒乓球游戏,本题是2021年3月27日举行的第12届蓝桥杯Scratch选拔赛真题编程第3题,初级组和中级组都有此题,题目要求编程创作一个简单的乒乓球游戏。

先来看看题目的要求吧。

一.题目说明

编程实现:

乒乓球游戏。

具体要求:

1). 点击绿旗,舞台上出现要求的角色与背景;

python模拟乒乓球比赛的代码 scratch乒乓球程序代码_python模拟乒乓球比赛的代码

2). 乒乓球随机向舞台下方移动;

3). 粉色挡板随鼠标进行左右方向的移动;

4). 粉色挡板接到乒乓球后乒乓球向舞台上方反弹;

python模拟乒乓球比赛的代码 scratch乒乓球程序代码_Scratch_02

python模拟乒乓球比赛的代码 scratch乒乓球程序代码_蓝桥杯_03

5). 每次粉色挡板接住乒乓球,左上角分数加1;

6). 乒乓球落地,游戏结束;

python模拟乒乓球比赛的代码 scratch乒乓球程序代码_编写代码_04

二.思路分析

本题只有两个角色,分别是乒乓球和挡板,如图所示:

python模拟乒乓球比赛的代码 scratch乒乓球程序代码_编写代码_05

其中挡板角色跟随鼠标左右移动,注意y坐标是固定的,保持不变。乒乓球角色则向舞台下方运动,碰到挡板时反弹回去,如碰落地,则游戏结束。

重点是乒乓球角色,要处理好3个细节:

  • 向下运动时,方向是随机的,需要设置好随机的范围;
  • 碰到挡板时,如何计算反弹的方向;
  • 如何判断乒乓球落地。

三.编程实现

根据题目描述和思路分析,我们可以分角色来编写程序:

  • 挡板角色
  • 乒乓球角色

1. 挡板角色

对于挡板角色来说,它始终跟随鼠标指针移动,很多同学立刻会想到使用“移到鼠标”指令,但是要注意,使用这个指令角色会跟随鼠标上下左右移动。

实际上,我们只需要将角色的x坐标和鼠标的x坐标保持同步即可,在挡板角色中编写代码如下:

python模拟乒乓球比赛的代码 scratch乒乓球程序代码_编写代码_06

当然,如果你喜欢使用“移动鼠标”指令,也是可以的,只是需要再重新设置一下y坐标,代码如下:

python模拟乒乓球比赛的代码 scratch乒乓球程序代码_python模拟乒乓球比赛的代码_07

二者效果完全一样,从理解的角度来看,前者要简单一些。

2. 乒乓球角色

绿旗点击时,将乒乓球放到舞台上边缘,然后向下移动,关键是方向该怎么设置呢?先来看下面两张图:

python模拟乒乓球比赛的代码 scratch乒乓球程序代码_编写代码_08

左图对应方向是-150,右图对应的方向是150,但是我们不能设置在-150和150之间取随机数。从这两张图来看,应该分两段,一段是左下,范围为-180到-150,一段是右下,范围为150-180,看起来似乎有点麻烦。

在Scratch中,角色方向的范围是-180到180,其中0-180表示右半边的方向,-180-0表示左半边的方向。实际上,从-180到0这个范围的方向,我们可以直接使用180-360来表示,如-180和180、-90和270、360和0,它们分别都表示相同的方向。

所以,这里的-150可以直接使用210来表示,所以我们可以直接在150和210之间取随机数了。你可以在上图所示的方向输入框中输入210,它会自动变成-150的。

因此,我们可以在乒乓球角色中编写代码如下:

python模拟乒乓球比赛的代码 scratch乒乓球程序代码_scratch_09

设置好方向之后,角色就开始在舞台上移动,如果碰到舞台边缘就反弹,如果碰到挡板也要反弹,关键是要计算好反弹的方向。

你可以借助“碰到边缘就反弹”指令,做一个简单的实验来寻找角色反弹的规律,让角色以不同的角度到达舞台下边缘,看看反弹之前和反弹之后角度之间的关系。

如果角色以180的方向移动碰到舞台下边缘,反弹后角度为0,如果以150的方向碰到下边缘,反弹后角度为30,如果以120的方向碰到下边缘,反弹后角度为60...,相信聪明的你,已经找到规律了,反弹前后角色的角度之和为180,所以反弹角度就等于180减去当前的方向。

如果挡板没有接住,乒乓球落地了,也就是碰到底部浅蓝色的横条,游戏结束,此处可以使用颜色碰撞检测来实现。

在乒乓球角色中,继续编写代码如下:

python模拟乒乓球比赛的代码 scratch乒乓球程序代码_蓝桥杯_10

将两段代码连接起来,就是乒乓球角色的完整代码了。

四.总结与思考

本题难度系数为3,积木块数量22个左右 ,涉及到的知识点主要包括:

  • Scratch运动编程;
  • 角色方向的灵活设置;
  • 随机数指令的使用;
  • 变量的使用;
  • 如何计算角色反弹的角度。

本题的关键是如何计算乒乓球反弹的角度,如果你找不到反弹角度的规律,可以随机设置一个反弹角度,让乒乓球能向上运动即可,只是这样的反弹效果不够自然。

在Scratch中,角色在碰到舞台边缘反弹可以分两种情况,如果是左右边缘,角色反弹前后的角度之和为0,如果是上下边缘,角色反弹前后的角度之和为180。一旦你掌握了这个规律,就可以自己创作各种和反弹相关的作品了。