变色游戏-第15届蓝桥第三次STEMA测评Scratch真题精选

[导读]:超平老师的《**Scratch蓝桥杯真题解析100讲》**已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第163讲。

第15届蓝桥杯第3次STEMA测评已于2023年12月17日落下帷幕,编程题一共有6题,分别如下:

**变色游戏,**本题是2023年12月17日举行的第15届蓝桥STEMA测评Scratch编程初/中级组编程第4题,题目要求编程创作一个变色游戏。点击任意一个方块,该方块及上下左右邻居方块都会变色,当所有方块变为蓝色时游戏胜利。

先来看看题目的要求吧。

一.题目说明

编程实现:

变色游戏。

具体要求:

1). 每次点击绿旗,舞台中出现了3行3列的红色方块方阵,变量"游戏时长"为0,如图所示;

2). "游戏时长"的值每隔1秒增加1;

3). 当第一次点击方块时,被点击的方块及与其上下左右相邻的方块都会变为蓝色;

例如:第一次点击且点击最中间的方块后的效果如下图。

4). 接下来每次点击任意一个方块后,该方块及与其上下左右相邻的方块改变颜色(红色变为蓝色,蓝色变为红色);

例如:第二次点击且点击右下角的方块后的效果如下图。

5). 当所有方块都变为蓝色后,显示"胜利","游戏时长" 不再变化,程序结束。

评判标准:

  • 10分:满足"具体要求"中的1);

  • 5分:满足"具体要求"中的2);

  • 10分:满足"具体要求"中的3);

  • 20分:满足"具体要求"中的4);

  • 15分:满足"具体要求"中的5)。

二.思路分析

先来看看题目提供的角色,一共有两个,分别是方块和胜利,如图所示:

其中,方块角色有两个造型,分别是红色和蓝色,如图:

根据题目的描述,我们可以将整个游戏拆分为3个模块:

  • 克隆九宫格方块

  • 点击方块变色

  • 计时和游戏胜利

其中,计时和游戏胜利相对简单一些,重难点是前面两个模块,尤其是点击方块变色效果,接下来我们逐一分析。

1. 克隆九宫格方块

这是一个典型的多行多列克隆场景,超平老师总结了一个**"克隆四兄弟"**模型,超级好用。

所谓4兄弟是指下面这4个指令:

其中和x坐标相关的两个兄弟指令负责从左至右克隆一行,而y坐标相关的两个兄弟指令负责从上到下克隆多行。

基本模板如下:

本题中的方块呈现九宫格效果,也就是3行3列,只需要将上面m和n都改成3,设置好起点的x和y,以及行和列的间隔,就可以了。

2. 点击方块变色

当点击任意一个方块时,该方块及与其上下左右相邻的方块都需要改变颜色。当前方块比较容易处理,邻居方块该如何确定呢,这是本题的难点。

为方便说明,我们给每个方块进行编号,编号为1~9,如下:

需要注意,不是每个方块都有上下左右的邻居方块,如果把这些方块进行分类,则可以分成如下3种情况:

中心方块(5):有上下左右4个邻居,比如方块5,其邻居为2、4、6、8;边方块(2、4、6、8):有3个邻居,比如方块2,其邻居为1、3、5;角落方块(1、3、7、9):只有两个邻居,比如方块1,其邻居为2、4;

因此需要分情况讨论,关键是要处理好边界情况,可以分行和列进行讨论,如下:​​​​​​​

第一行:上方没有方块;最后一行:下方没有方块;第一列:左边没有方块;最后一列:右方没有方块;

所以,我们需要解决如下3个小问题:

1). 如何获取当前方块的编号?

2). 当前方块的邻居有哪些?

3). 这些邻居保存到哪儿?

第一个问题相对比较简单,我们可以给方块增加一个私有变量"_ID",用来表示方块的编号,并将值设为1到9。

第二个问题稍微麻烦一点,需要根据方块的编号来确定它所在的行和列,一般来说,有两种处理办法。

第一种是死方法,直接通过编号来判断,如下:​​​​​​​

第一行:编号等于1、2、3;第一列:编号等于1、4、7;最后一行:编号等于7、8、9;最后一列:编号等于3、6、9;

由于这里的方块数量是固定的,并且每行每列只有3个,使用这种方式是完全可以的。如果方块数量不固定,并且方块较多时,则就不适合了。

第二种是数学方法,稍微转换一下角度:​​​​​​​

如果编号 > 3,则说明有上一行,获取上方方块的编号;如果编号 < 7,则说明有下一行,获取下方方块的编号;如果编号➗3的余数 = 1,则说明有右边的列,获取右边方块的编号;如果编号➗3的余数 = 0,则说明有左边的列,获取左边方块的编号;

将当前方块及邻居方块的编号都保存到一个列表中,然后根据列表中的编号对每个方块进行变色即可。

3. 计时及游戏胜利

计时比较简单,重点是如何判断游戏胜利,胜利的依据是所有的方块都变成蓝色。我们可以借助列表,将每个方块的颜色都保存到列表中,如下:

其中1表示红色,2表示蓝色,当点击方块时,就更新列表中对应的颜色。当所有的列表项都变成2,换言之,当列表中没有1时,游戏胜利。

思路有了,接下来,我们就进入具体的编程实现环节。

三.编程实现

根据上面的思路分析,我们分4步来编写程序:

  • 准备工作

  • 克隆九宫格方块

  • 点击方块变色

  • 计时和游戏胜利

1. 准备工作

这里的准备工作,主要是定义变量和列表,先创建变量"游戏时间 "和"_ID",如下:

注意,这里的"_ID"是私有变量,并且需要在方块角色中创建。

再创建两个列表,一个是"方块颜色 ",一个是"邻居方块",如下:

2. 克隆九宫格方块

根据前面的思路分析,我们使用"克隆4兄弟"模型来克隆九宫格方块,在方块角色中编写代码如下:

代码不少,简单说明4点:

1). 列表需要初始化,也就是清空操作;

2). 本体默认是隐藏的,并且换成造型1,也就是红色方块;

3). _ID的初始值为0,在每次克隆之前,将_ID增加1,利用克隆体的继承特性,确保克隆体的编号为1~9;

4). 克隆完成,将_ID设置为0,表示将本体的_ID恢复到0,这个不是必须的,但建议你写上,在某些场景下会用到这一小技巧。

针对克隆体,需要显示,同时需要向列表中增加数据,代码如下:

运行程序,效果如下:

3. 点击方块变色****

在点击方块时,需要将当前方块及其邻居方块的编号加入到"邻居方块"列表中,根据前面的思路分析,在方块角色中,继续编写代码如下:

代码就不再解释了,可以先测试一下效果。

当点击编号为5的中心方块时,列表中的数据如下:

当点击编号为2的边方块时,列表中的数据如下:

当点击编号为1的角落方块时,列表中的数据如下:

这说明程序完全正确,可以继续下一步了。

在代码最后,发送了一个广播消息,克隆体接收到广播后,需要变色并更新列表数据,继续编写代码如下:

简单说明两点:

1). 之所以使用"广播并等待 "指令,是确保所有方块先变色,并且"方块颜色"列表中的数据已经更新完;

2). "邻居方块包含_ID " 指令的意思是,如果当前方块的_ID在"邻居方块"列表中,表示它就是邻居方块,当然也包括被点击的方块自己;

4. 计时和游戏胜利

当"方块颜色"列表中没有1的时候,就表示游戏胜利了,所以每次点击方块更新完列表,都需要判断,在上面的广播指令下面增加如下代码:

对应的,切换到胜利角色,先进行初始化设置和计时功能,代码如下:

当接收到"胜利"广播时,显示角色,并停止全部脚本即可,编写代码如下:

至此,整个作品就创作好了,是时候来体验一下游戏效果啦。

四.总结与思考

本题是初/中级组编程部分第4题,分数为60分,积木块数量75个左右,涉及到的知识点主要包括:

  • 克隆编程,重点是多行多列的克隆技巧;

  • 循环编程,尤其是嵌套循环;

  • 变量的使用,重点是私有变量;

  • 列表的运算;

  • 事件广播机制;

本题难度中等偏上,完成时间20分钟左右,重难点在于如何找到点击方块的邻居方块并改变其颜色。

为了保存每个方块的颜色及邻居方块,我们使用了列表,这让问题变得更简单,由此也可以看出,列表在编程中的重要性。

类似的九宫格游戏还有很多,比如井字棋、数字华容道、幻方、数独等,它们都可以使用列表来实现,所以,我们一定要熟练掌握列表的各种用法。

超平老师给你留两个思考题:

1). 本题中的九宫格,要全部变为蓝色,最少几步可以完成?

2). 如果要实现4 x 4的16宫格,又该如何实现呢,赶紧动手试试吧。

如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄

需要素材和源码的,可以移步至"超平的编程课"gzh。

相关推荐
不想当程序猿_4 小时前
【蓝桥杯每日一题】求和——前缀和
算法·前缀和·蓝桥杯
白乐天_n7 小时前
腾讯游戏安全移动赛题Tencent2016A
安全·游戏
这是我587 小时前
C++打小怪游戏
c++·其他·游戏·visual studio·小怪·大型·怪物
tealcwu8 小时前
【游戏设计原理】21 - 解谜游戏的设计
游戏·游戏策划
清梦20208 小时前
经典问题---跳跃游戏II(贪心算法)
算法·游戏·贪心算法
tealcwu9 小时前
【游戏设计原理】22 - 石头剪刀布
游戏·游戏策划
l1384942745112 小时前
Java每日一题(2)
java·开发语言·游戏
逝灮14 小时前
【蓝桥杯——物联网设计与开发】拓展模块3 - 温度传感器模块
驱动开发·stm32·单片机·嵌入式硬件·物联网·蓝桥杯·温度传感器
清弦墨客15 小时前
【数据结构与算法】深度优先搜索:树与图的路径探寻之道
数据结构·python·算法·蓝桥杯·深度优先
孤留光乩1 天前
从零搭建纯前端飞机大战游戏(附源码)
前端·javascript·游戏·html·css3