[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第73讲。
蓝桥杯选拔赛每一届都要举行4~5次,和省赛、国赛相比,题目要简单不少,再加上篇幅有限,因此我精挑细选了一部分题目进行解读。
第13届蓝桥杯青少年组第3次选拔赛于2021年11月27日举行,形式为线上考试。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。
拼图游戏,本题是2021年11月27日举行的第13届蓝桥杯Scratch选拔赛真题编程第3题,初级组和中级组都有此题,题目要求编程创作一个简单的拼图游戏。
先来看看题目的要求吧。
一.题目说明
编程实现:
拼图游戏。
具体要求:
1). 点击绿旗,角色、背景如图所示;
![图片[1]-scratch拼图游戏_第13届蓝桥杯scratch选拔赛真题解析教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/03/image-303.png)
2). 指针在碎片上,按下鼠标拖拽碎片在舞台上移动(松开鼠标碎片停止移动);
![图片[2]-scratch拼图游戏_第13届蓝桥杯scratch选拔赛真题解析教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/03/image-304.png)
3). 碎片移动到对应背景上,按下空格键碎片与背景重合(不对应就不能重合);
![图片[3]-scratch拼图游戏_第13届蓝桥杯scratch选拔赛真题解析教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/03/image-305.png)
4). 四张碎片成功拼出如图所示的图片后,程序结束。
![图片[4]-scratch拼图游戏_第13届蓝桥杯scratch选拔赛真题解析教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/03/image-306.png)
评分标准:
- 3分:满足要求1);
- 5分:满足要求2);
- 7分:满足要求3);
- 10分:满足要求4)。
二.效果预览
在编程之前,先来看看作品的完整效果吧:
三.思路分析
本题包含4个角色,分别是四张拼图碎片,如图所示:
![图片[5]-scratch拼图游戏_第13届蓝桥杯scratch选拔赛真题解析教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/03/image-307-897x1024.png)
拼图游戏是一款永不过时的小游戏,玩法也多种多样。这里的玩法比较简单,使用鼠标拖动右侧的拼图碎片,移到对应的背景上,然后按下空格键拼合图片。
在Scratch中,点击角色后拖拽角色,是一个典型的场景,解决办法也比较简单,只需要使用如下代码即可:
![图片[6]-scratch拼图游戏_第13届蓝桥杯scratch选拔赛真题解析教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/03/image-308.png)
每个碎片只有放到合适的区域才能拼合成功,因此需要对每个碎片放置的位置进行判断,每个区域的坐标范围都不一样,要分别设置好。
程序要判断所有碎片是否拼接成功,我们可以创建一个变量“已拼接数量”,将初始值设置为0,每拼好一块碎片,就将数量加1,如果数量等于4,就表示游戏成功了。
四.编程实现
根据题目描述和思路分析,我们可以分4步来编写程序:
- 设置碎片初始位置
- 拖拽碎片
- 拼合图片
- 效果优化
1. 设置碎片初始位置
当绿旗被点击时,4个小碎片分别放置在舞台右侧,以碎片1为例,设置好其位置和大小即可,如图:
![图片[7]-scratch拼图游戏_第13届蓝桥杯scratch选拔赛真题解析教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/03/image-309.png)
这里的“将拖动模式设为不可拖动”是为了避免直接拖动角色,不过要注意它只在全屏展示模式下才生效。
其余3个碎片的代码基本一样,不同的是它们的坐标值。
2. 拖拽碎片
按下鼠标不松开就可以拖动碎片,根据思路分析给出的经典代码,以碎片1为例,编写程序如下:
![图片[8]-scratch拼图游戏_第13届蓝桥杯scratch选拔赛真题解析教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/03/image-310.png)
点击角色就意味着鼠标按下了,只要鼠标不松开,碎片就会一直跟随鼠标移动,松鼠鼠标,碎片就放好了。
3. 拼合图片
碎片拖到合适位置后,按下空格键就可以和背景重合,此时需要对碎片的位置进行判断,如果位置正确,则将碎片移动对应的位置并放大,以碎片1为例,编写代码如下:
![图片[9]-scratch拼图游戏_第13届蓝桥杯scratch选拔赛真题解析教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/03/image-311-1024x533.png)
判断是否按下空格键,此处使用了“等待条件”指令,这个比直接使用“当按下空格键”指令要更符合逻辑。
如果和背景重合,说明该碎片已拼接成功,此时将变量“已拼接数量”增加1。
其它3个碎片的代码基本类似,不同的是各自区域的坐标范围和图片移到的位置,这里就不再列出来了。
接下来,需要判断游戏是否成功了,这个可以写在任何角色中,不妨将它写到舞台背景中,代码如下:
![图片[10]-scratch拼图游戏_第13届蓝桥杯scratch选拔赛真题解析教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/03/image-312.png)
绿旗点击时,将变量的初始值设为0,然后等待“已拼接数量=4”,就表示游戏成功,停止全部脚本。很多同学喜欢使用如下代码:
![图片[11]-scratch拼图游戏_第13届蓝桥杯scratch选拔赛真题解析教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/03/image-313.png)
这个当然没有问题,效果一样,但是前者更简单。实际上,使用循环通常是针对多次判断,即每次满足条件都要执行某个代码,而“等待条件”指令则是针对一次判断,满足某个条件就执行一次代码。很显然,本题是后一种情况,所以使用“等待条件”指令更为简单。
4. 效果优化
运行程序,效果基本没问题,但是有一个小bug,就是碎片和图片重合后,再按下鼠标,图片还会跟着鼠标走,这显然不合理,该如何处理呢?
常用的解决方案是给碎片角色添加一个状态,当图片拼接好后,更新一下状态,每次点击角色时都来判断一下状态,如果图片已经拼接好,就不再跟随鼠标移动了。
以碎片1为例,添加一个私有变量“已拼接?”,并将初始值设为0,如图:
![图片[12]-scratch拼图游戏_第13届蓝桥杯scratch选拔赛真题解析教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/03/image-314.png)
这里的变量名称前面增加了一个下划线“_”,是为了区分全局变量和私有变量。
在点击角色时,判断变量是否为0,如果为0,则可以拖拽,当图片和背景重合后,将变量更新为1,新增代码如下:
![图片[13]-scratch拼图游戏_第13届蓝桥杯scratch选拔赛真题解析教程-超平的编程课](https://www.wangchaoping.com/wp-content/uploads/2025/03/image-315-1024x660.png)
其它三个碎片角色也需要做相同的处理,如此一来,当图片拼接好后,就再也拖不动了(需要在全屏模式下)。
五.总结与思考
本题难度系数为3,积木块数量在30个左右(1个碎片角色),涉及到的知识点主要包括:
- 角色拖拽的经典实现方式;
- 判断角色在某个区域;
- “等待条件”指令的灵活运用;
- 变量的使用,包括全局变量和私有变量;
- 使用变量来表示角色的状态。
本作品难度不大,但是要让游戏具有良好的用户体验,需要处理好细节问题。正所谓细节决定成败,每一个好的编程作品都是非常注重细节的。
这个拼图游戏比较简单,如果要进一步完善,你有什么好的创意吗,不妨尝试一下。
需要素材和源代码的,可以转到这里,拼图游戏-2021.11.28蓝桥杯stema第3题。
暂无评论内容