拼图游戏-第13届蓝桥杯Scratch选拔赛真题精选

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

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

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

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

先来看看题目的要求吧。

一.题目说明

编程实现:

拼图游戏。

具体要求:

1). 点击绿旗,角色、背景如图所示;

拼图游戏-第13届蓝桥杯Scratch选拔赛真题精选_第1张图片

2). 指针在碎片上,按下鼠标拖拽碎片在舞台上移动(松开鼠标碎片停止移动);

拼图游戏-第13届蓝桥杯Scratch选拔赛真题精选_第2张图片

3). 碎片移动到对应背景上,按下空格键碎片与背景重合(不对应就不能重合);

拼图游戏-第13届蓝桥杯Scratch选拔赛真题精选_第3张图片

4). 四张碎片成功拼出如图所示的图片后,程序结束。

拼图游戏-第13届蓝桥杯Scratch选拔赛真题精选_第4张图片

评分标准:

  • 3分:满足要求1);

  • 5分:满足要求2);

  • 7分:满足要求3);

  • 10分:满足要求4)。

二.思路分析

本题包含4个角色,分别是四张拼图碎片,如图所示:

拼图游戏-第13届蓝桥杯Scratch选拔赛真题精选_第5张图片

拼图游戏是一款永不过时的小游戏,玩法也多种多样。这里的玩法比较简单,使用鼠标拖动右侧的拼图碎片,移到对应的背景上,然后按下空格键拼合图片。

在Scratch中,点击角色后拖拽角色,是一个典型的场景,解决办法也比较简单,只需要使用如下代码即可:

拼图游戏-第13届蓝桥杯Scratch选拔赛真题精选_第6张图片

每个碎片只有放到合适的区域才能拼合成功,因此需要对每个碎片放置的位置进行判断,每个区域的坐标范围都不一样,要分别设置好。

程序要判断所有碎片是否拼接成功,我们可以创建一个变量“已拼接数量”,将初始值设置为0,每拼好一块碎片,就将数量加1,如果数量等于4,就表示游戏成功了。

三.编程实现

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

  • 设置碎片初始位置

  • 拖拽碎片

  • 拼合图片

  • 效果优化

1. 设置碎片初始位置

当绿旗被点击时,4个小碎片分别放置在舞台右侧,以碎片1为例,设置好其位置和大小即可,如图:

拼图游戏-第13届蓝桥杯Scratch选拔赛真题精选_第7张图片

这里的“将拖动模式设为不可拖动”是为了避免直接拖动角色,不过要注意它只在全屏展示模式下才生效。

其余3个碎片的代码基本一样,不同的是它们的坐标值。

2. 拖拽碎片

按下鼠标不松开就可以拖动碎片,根据思路分析给出的经典代码,以碎片1为例,编写程序如下:

拼图游戏-第13届蓝桥杯Scratch选拔赛真题精选_第8张图片

点击角色就意味着鼠标按下了,只要鼠标不松开,碎片就会一直跟随鼠标移动,松鼠鼠标,碎片就放好了。

3. 拼合图片

碎片拖到合适位置后,按下空格键就可以和背景重合,此时需要对碎片的位置进行判断,如果位置正确,则将碎片移动对应的位置并放大,以碎片1为例,编写代码如下:

拼图游戏-第13届蓝桥杯Scratch选拔赛真题精选_第9张图片

判断是否按下空格键,此处使用了“等待条件”指令,这个比直接使用“当按下空格键”指令要更符合逻辑。

如果和背景重合,说明该碎片已拼接成功,此时将变量“已拼接数量”增加1。

其它3个碎片的代码基本类似,不同的是各自区域的坐标范围和图片移到的位置,这里就不再列出来了。

接下来,需要判断游戏是否成功了,这个可以写在任何角色中,不妨将它写到舞台背景中,代码如下:

拼图游戏-第13届蓝桥杯Scratch选拔赛真题精选_第10张图片

绿旗点击时,将变量的初始值设为0,然后等待“已拼接数量=4”,就表示游戏成功,停止全部脚本。很多同学喜欢使用如下代码:

拼图游戏-第13届蓝桥杯Scratch选拔赛真题精选_第11张图片

这个当然没有问题,效果一样,但是前者更简单。实际上,使用循环通常是针对多次判断,即每次满足条件都要执行某个代码,而“等待条件”指令则是针对一次判断,满足某个条件就执行一次代码。很显然,本题是后一种情况,所以使用“等待条件”指令更为简单。

4. 效果优化

运行程序,效果基本没问题,但是有一个小bug,就是碎片和图片重合后,再按下鼠标,图片还会跟着鼠标走,这显然不合理,该如何处理呢?

常用的解决方案是给碎片角色添加一个状态,当图片拼接好后,更新一下状态,每次点击角色时都来判断一下状态,如果图片已经拼接好,就不再跟随鼠标移动了。

以碎片1为例,添加一个私有变量“已拼接?”,并将初始值设为0,如图:

拼图游戏-第13届蓝桥杯Scratch选拔赛真题精选_第12张图片

这里的变量名称前面增加了一个下划线“_”,是为了区分全局变量和私有变量。

在点击角色时,判断变量是否为0,如果为0,则可以拖拽,当图片和背景重合后,将变量更新为1,新增代码如下:

拼图游戏-第13届蓝桥杯Scratch选拔赛真题精选_第13张图片

其它三个碎片角色也需要做相同的处理,如此一来,当图片拼接好后,就再也拖不动了(需要在全屏模式下)。

四.总结与思考

本题难度系数为3,积木块数量在30个左右(1个碎片角色),涉及到的知识点主要包括:

  • 角色拖拽的经典实现方式;

  • 判断角色在某个区域;

  • “等待条件”指令的灵活运用;

  • 变量的使用,包括全局变量和私有变量;

  • 使用变量来表示角色的状态。

本作品难度不大,但是要让游戏具有良好的用户体验,需要处理好细节问题。正所谓细节决定成败,每一个好的编程作品都是非常注重细节的。

这个拼图游戏比较简单,如果要进一步完善,你有什么好的创意吗,不妨尝试一下。

如果你觉得文章对你有所帮助,别忘了点赞,你的鼓励是我坚持继续写下去的最大动力,Thanks♪(・ω・)ノ。

你可能感兴趣的:(蓝桥杯Scratch真题,蓝桥杯,scratch)