[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第187讲。
如果想持续关注Scratch蓝桥真题解读,可以点击《Scratch蓝桥杯历年真题》并订阅合集,查阅教程更方便。
第15届蓝桥杯省赛已于2024年8月24日落下帷幕,中级组编程题一共有6题,分别如下:
-
抓不住的蜜蜂
-
穿越病毒区
-
画台扇
-
收集松果
-
占领矩阵
-
截取递增数
穿越病毒区,本题是2024年8月24日举行的第15届蓝桥省赛Scratch中级组编程第2题,题目要求编程创作穿越病毒区游戏。小红不小心误闯入了一个紫色线围成的一个空间,游戏的任务是让小红离开病毒区,并完全进入到安全的蓝色区域。
先来看看题目的要求吧。
一.题目说明
编程实现:
穿越病毒区。
小红不小心误闯入了一个紫色线围成的一个空间,并且正好落在了有病毒出没的白色区域,游戏的任务是让小红离开病毒区,并完全进入到安全的蓝色区域。玩家用键盘控制小红上、下、左、右移动,若移动的途中与病毒接触,则任务失败;当小红完全进入到安全的蓝色区域时任务成功。
具体要求:
1). 点击绿旗,角色、背景如图所示(小红在空间靠左边的白色区域内,病毒在A处);
2). 病毒从 A 处沿直线在2秒内移动到B处,再从B处在2秒内原路返回 A 处,如此往返移动;
3). 每按下一次键盘↑、↓、←、→按键,都可以让小红分别向上、下、左、右移动5步(小红不能穿越紫色线);
4). 如果小红碰到病毒,那么病毒停止移动,同时小红说“失败”,如图所示,1秒后程序结束(小红不能再移动);
5). 如果小红完全进入蓝色安全区时,那么小红说 “成功”,如图所示,1秒后程序结束(小红、 病毒都不能再移动)。
评判标准:
-
4 分:满足"具体要求"中的1);
-
7 分:满足"具体要求"中的2);
-
7 分:满足"具体要求"中的3);
-
11分:满足"具体要求"中的4);
-
11分:满足"具体要求"中的5)。
二.思路分析
本题提供了两个角色,分别是病毒和小红,如图所示:
需要注意的是,这里的病毒区域空间是舞台背景,并不是某个角色,这说明,在判断是否越界时只能使用颜色碰撞。
我们可以分角色来进行分析。
1. 病毒角色
在整个游戏过程中,病毒只有三种状态,分别如下:
-
初始位置
-
在A和B之间来回移动
-
停止不动
其中,重点是第二点,在A和B两点之间来回移动,题目是这么描述的,“A 处沿直线在2秒内移动到B处,再从B处在2秒内原路返回 A 处”。
此处的关键字是“在2秒内”,很明显,使用“在1秒内滑行到x,y”指令是最佳选择。
2. 小红角色
根据题目的描述,可以将小红的功能分成如下3个部分:
-
上下左右移动
-
碰到病毒游戏失败
-
进入安全区游戏成功
上下左右移动本身比较简单,但是有两个关键点:
1). 如何处理按键操作;
2). 如何确保不穿越紫线;
实际上,类似的场景和效果,在第10届国赛中出现过,如图所示:
题目要求使用键盘控制小球在圆形范围内运动,同时确保小球不能越过圆形边缘。具体详情可以参考《逃不掉的小球-第10届蓝桥杯Scratch国赛真题第1题》这篇教程。
关于按键处理有如下两种方式:
-
使用事件模块中的”当按下xx键“;
-
使用侦测模块中的”按下xx键“;
前面已经多次分析过,前者写代码比较方便,但是不受绿旗指令和停止脚本指令的控制,后者则可以更好的控制按键什么时候有效,什么时候无效。
针对题目描述,在游戏成功或失败之后,小红都不能再移动了,很显然使用后者更好。
至于不越过紫线,这个其实比较简单,在角色移动过程中,如果角色碰到紫线,就退回来,向前移动了几步,就退回来几步。
小红碰到病毒,游戏失败,这个直接使用碰撞检测就可以。小红进入安全区游戏成功,这个要怎么判断呢?
首先能想到的就是颜色碰撞,如果碰到蓝色,游戏成功,但是这样会出现如下情形:
也就是说,小红还没有完全进入蓝色安全区域就停止下来了,这个不符合题目要求。
所以,有必要再增加一个条件,即小红的y坐标要小于蓝色区域的上边界,确保小红完全进入蓝色安全区域。
同时还需要注意,两个角色停止不动和说话如果同时进行,效果会更好,因此尽量不使用”停止全部脚本“指令。
思路有了,接下来,我们就进入程序实现环节。
三.编程实现
根据上面的思路分析,我们分4步来完成作品:
-
病毒来回移动
-
小红上下左右移动
-
游戏失败
-
游戏成功
1. 病毒来回移动
根据前面的思路分析,在病毒角色中编写代码如下:
代码比较简单,强调两点:
1). 一定要记得初始化,确保病毒每次都是从A点开始移动;
2). 在确定角色位置时,可以使用三步定位法,即一拖二看三找,将角色拖到A点或B点,同时观察x和y坐标的变化,然后将滑行指令拖出来;
2. 小红上下左右移动
根据前面的思路分析,在小红角色中编写代码如下:
代码不算少,但四个方向上的处理方式是一样的,强调两点:
1). 这里使用”将x/y坐标增加“来实现角色的移动,你也可以使用”移动5步“指令,但要设置方向和旋转模式;
2). 颜色碰撞检测必须要每个按键下分别处理,不要共用一个代码,从而避免小红越过紫线;
3. 游戏失败
为了更好地组织代码结构,我们将游戏失败和游戏成功的判断分别使用一个独立的代码块来实现。
在小红角色中,编写代码块如下:
代码比较简单,说明3点:
1). 初始化一定要有,尤其是角色的位置必须设置,之所以放在这里,是因为下面使用了”等待碰到病毒“指令,这样可以确保在判断之前,小红角色已经放在初始位置了;
2). 针对这种只需要判断一次的场景,使用”等待条件“指令,代码更简洁;
3). 一旦游戏失败,立刻停止小红角色的其他脚本,可以确保小红立刻停止移动,同时还要让病毒也停下来,所以在说话之前发生了一个”失败“的广播消息;
对应的,切换到病毒角色,编写代码如下:
4. 游戏成功
根据前面的分析,在小红角色中编写代码块如下:
代码不多,简单说明两点:
1). 要确保小红能完全进入蓝色安全区域,需要同时满足两个条件,一是碰到蓝色,二是y坐标 < -15;
2). 和游戏失败一样,一旦游戏成功,需要停止两个角色的移动;
对应的,在病毒角色中编写代码如下:
至此,整个作品就创作好了,赶紧帮助小红穿越病毒区吧。
四.思考与总结
本题是初级组编程部分第2题,分数为40分,积木块数量50个左右,涉及到的知识点主要包括:
-
运动编程;
-
按键处理;
-
碰撞检测;
-
事件广播机制;
这是中级组省赛的第2题,难度一般,完成时间10分钟左右。本题的关键点有两个,一是如何确保小红在移动过程中不越过紫线,二是如何检测小红是否已经完全进入蓝色安全区。
关于角色的移动,有如下三种方式:
1). 使用”移动10步“指令;
2). 使用”将x/y坐标增加10“指令;
3). 使用滑行指令;
如果有明确在几秒内到达指定位置,优先使用滑行指令;如果只是在水平方向和垂直方向上进行单向运动,优先使用”将x/y坐标增加10“指令;如果是其它方向上的直线运动,优先使用”移动10步“指令。
在Scratch编程中,要确保角色在指定区域内运动,比如圆形内、矩形内、复杂的不规则图形等,实现的方式就是”退步法“,只要碰到边界,就立刻退回去,退一步海阔天空嘛。
你还有什么好的方法吗,非常欢迎您和超平老师交流分享。
如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄