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

导读\]:超平老师的《**Scratch蓝桥杯真题解析100讲》**已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第163讲。 第15届蓝桥杯第3次STEMA测评已于2023年12月17日落下帷幕,编程题一共有6题,分别如下: * 多变的太阳 * [转动的风车](http://mp.weixin.qq.com/s?__biz=Mzg5NDc5MTE4MA==&mid=2247525645&idx=1&sn=5bfc847434dd27fc845489a52bd91d00&chksm=c0181e6ef76f9778ab56d73f2e2d2f7bf62c14e38afc864c49b783df8ff13f8b2399c57d1765&scene=21#wechat_redirect "转动的风车") * [六花阵图](http://mp.weixin.qq.com/s?__biz=Mzg5NDc5MTE4MA==&mid=2247525993&idx=1&sn=110bc759eb05214b0138218f491e163e&chksm=c0181d0af76f941cec8881e6a5a766f854f1c447482f7c04623074da9b1f42fed267f64813fc&scene=21#wechat_redirect "六花阵图") * 变色游戏 * 筛选数据 * 消失的水母 **变色游戏,**本题是2023年12月17日举行的第15届蓝桥STEMA测评Scratch编程初/中级组编程第4题,题目要求编程创作一个变色游戏。点击任意一个方块,该方块及上下左右邻居方块都会变色,当所有方块变为蓝色时游戏胜利。 先来看看题目的要求吧。 ### 一.题目说明 **编程实现:** 变色游戏。 **具体要求:** 1). 每次点击绿旗,舞台中出现了3行3列的红色方块方阵,变量"游戏时长"为0,如图所示; ![图片](https://file.jishuzhan.net/article/1746451872014667778/c14a5c4a9c16de0481383d66c0f15f47.webp) 2). "游戏时长"的值每隔1秒增加1; 3). 当第一次点击方块时,被点击的方块及与其上下左右相邻的方块都会变为蓝色; 例如:第一次点击且点击最中间的方块后的效果如下图。 ![图片](https://file.jishuzhan.net/article/1746451872014667778/7df7cf501547ece97ad3a036b8223b32.webp) 4). 接下来每次点击任意一个方块后,该方块及与其上下左右相邻的方块改变颜色(红色变为蓝色,蓝色变为红色); 例如:第二次点击且点击右下角的方块后的效果如下图。 ![图片](https://file.jishuzhan.net/article/1746451872014667778/114522acc896006ca1dfc894496cc3a7.webp) 5). 当所有方块都变为蓝色后,显示"胜利","游戏时长" 不再变化,程序结束。 ![图片](https://file.jishuzhan.net/article/1746451872014667778/2b7436038684a86865ca573dc25e9936.webp) **评判标准:** * 10分:满足"具体要求"中的1); * 5分:满足"具体要求"中的2); * 10分:满足"具体要求"中的3); * 20分:满足"具体要求"中的4); * 15分:满足"具体要求"中的5)。 ### 二.思路分析 先来看看题目提供的角色,一共有两个,分别是方块和胜利,如图所示: ![图片](https://file.jishuzhan.net/article/1746451872014667778/3f6c067d5492c3532923e83b7e9cb51a.webp) 其中,方块角色有两个造型,分别是红色和蓝色,如图: ![图片](https://file.jishuzhan.net/article/1746451872014667778/dd6004c7a8052b89c130bbadb0ae06ac.webp) 根据题目的描述,我们可以将整个游戏拆分为3个模块: * 克隆九宫格方块 * 点击方块变色 * 计时和游戏胜利 其中,计时和游戏胜利相对简单一些,重难点是前面两个模块,尤其是点击方块变色效果,接下来我们逐一分析。 **1. 克隆九宫格方块** 这是一个典型的多行多列克隆场景,超平老师总结了一个**"克隆四兄弟"**模型,超级好用。 所谓4兄弟是指下面这4个指令: ![图片](https://file.jishuzhan.net/article/1746451872014667778/8e085954075864b5c952d2f635fc124b.webp) 其中和x坐标相关的两个兄弟指令负责从左至右克隆一行,而y坐标相关的两个兄弟指令负责从上到下克隆多行。 基本模板如下: ![图片](https://file.jishuzhan.net/article/1746451872014667778/cec4d570be92e2da47eef7208e8f6258.webp) 本题中的方块呈现九宫格效果,也就是3行3列,只需要将上面m和n都改成3,设置好起点的x和y,以及行和列的间隔,就可以了。 **2. 点击方块变色** 当点击任意一个方块时,该方块及与其上下左右相邻的方块都需要改变颜色。当前方块比较容易处理,邻居方块该如何确定呢,这是本题的难点。 为方便说明,我们给每个方块进行编号,编号为1\~9,如下: ![图片](https://file.jishuzhan.net/article/1746451872014667778/b160ae55f75a7d5d07847311d3d683d4.webp) 需要注意,不是每个方块都有上下左右的邻居方块,如果把这些方块进行分类,则可以分成如下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. 计时及游戏胜利** 计时比较简单,重点是如何判断游戏胜利,胜利的依据是所有的方块都变成蓝色。我们可以借助列表,将每个方块的颜色都保存到列表中,如下: ![图片](https://file.jishuzhan.net/article/1746451872014667778/0b6a994254ff815c75bdf3a4a25c3561.webp) 其中1表示红色,2表示蓝色,当点击方块时,就更新列表中对应的颜色。当所有的列表项都变成2,换言之,当列表中没有1时,游戏胜利。 思路有了,接下来,我们就进入具体的编程实现环节。 ### 三.编程实现 根据上面的思路分析,我们分4步来编写程序: * 准备工作 * 克隆九宫格方块 * 点击方块变色 * 计时和游戏胜利 **1. 准备工作** 这里的准备工作,主要是定义变量和列表,先创建变量"*游戏时间* "和"*_ID*",如下: ![图片](https://file.jishuzhan.net/article/1746451872014667778/b53189e9680d236da90bb3688ab20ca2.webp) 注意,这里的"*_ID*"是私有变量,并且需要在方块角色中创建。 再创建两个列表,一个是"*方块颜色* ",一个是"*邻居方块*",如下: ![图片](https://file.jishuzhan.net/article/1746451872014667778/3ddfe9dd6b0157b98a412678a0b8fca4.webp) **2. 克隆九宫格方块** 根据前面的思路分析,我们使用"**克隆4兄弟**"模型来克隆九宫格方块,在方块角色中编写代码如下: ![图片](https://file.jishuzhan.net/article/1746451872014667778/20c1fa721987ed1b466f405cf7ea82b3.webp) 代码不少,简单说明4点: 1). 列表需要初始化,也就是清空操作; 2). 本体默认是隐藏的,并且换成造型1,也就是红色方块; 3). _ID的初始值为0,在每次克隆之前,将_ID增加1,利用克隆体的继承特性,确保克隆体的编号为1\~9; 4). 克隆完成,将_ID设置为0,表示将本体的_ID恢复到0,这个不是必须的,但建议你写上,在某些场景下会用到这一小技巧。 针对克隆体,需要显示,同时需要向列表中增加数据,代码如下: ![图片](https://file.jishuzhan.net/article/1746451872014667778/37fd955a7b17dcb81a0002eb7a8e748d.webp) 运行程序,效果如下: ![图片](https://file.jishuzhan.net/article/1746451872014667778/2681482b28732a2aec44f9b141c098dc.webp) **3**. 点击方块变色**** 在点击方块时,需要将当前方块及其邻居方块的编号加入到"邻居方块"列表中,根据前面的思路分析,在方块角色中,继续编写代码如下: ![图片](https://file.jishuzhan.net/article/1746451872014667778/2c2f6d6169188ead88db800fc28696d3.webp) 代码就不再解释了,可以先测试一下效果。 当点击编号为5的中心方块时,列表中的数据如下: ![图片](https://file.jishuzhan.net/article/1746451872014667778/127f0521e7da2955a5fc35d5d105a34d.webp) 当点击编号为2的边方块时,列表中的数据如下: ![图片](https://file.jishuzhan.net/article/1746451872014667778/eace061b1d5033bdf5fcd2068ec3cc96.webp) 当点击编号为1的角落方块时,列表中的数据如下: ![图片](https://file.jishuzhan.net/article/1746451872014667778/4002a4eae7a0c0f7c6f7d34763396f3d.webp) 这说明程序完全正确,可以继续下一步了。 在代码最后,发送了一个广播消息,克隆体接收到广播后,需要变色并更新列表数据,继续编写代码如下: ![图片](https://file.jishuzhan.net/article/1746451872014667778/8793daf84b80d60efd067555617a9aa4.webp) 简单说明两点: 1). 之所以使用"*广播并等待* "指令,是确保所有方块先变色,并且"*方块颜色*"列表中的数据已经更新完; 2). "*邻居方块包含_ID* " 指令的意思是,如果当前方块的_ID在"*邻居方块*"列表中,表示它就是邻居方块,当然也包括被点击的方块自己; **4. 计时和游戏胜利** 当"*方块颜色*"列表中没有1的时候,就表示游戏胜利了,所以每次点击方块更新完列表,都需要判断,在上面的广播指令下面增加如下代码: ![图片](https://file.jishuzhan.net/article/1746451872014667778/b5b1b5dc7924a3542a839c9b28b6ebe0.webp) 对应的,切换到胜利角色,先进行初始化设置和计时功能,代码如下: ![图片](https://file.jishuzhan.net/article/1746451872014667778/725704b8ab254446b62e24fc02274bc1.webp) 当接收到"胜利"广播时,显示角色,并停止全部脚本即可,编写代码如下: ![图片](https://file.jishuzhan.net/article/1746451872014667778/8a199c78d753e6ffc9230da1ead17e2f.webp) 至此,整个作品就创作好了,是时候来体验一下游戏效果啦。 ### 四.总结与思考 本题是初/中级组编程部分第4题,分数为60分,积木块数量75个左右,涉及到的知识点主要包括: * 克隆编程,重点是多行多列的克隆技巧; * 循环编程,尤其是嵌套循环; * 变量的使用,重点是私有变量; * 列表的运算; * 事件广播机制; 本题难度中等偏上,完成时间20分钟左右,重难点在于如何找到点击方块的邻居方块并改变其颜色。 为了保存每个方块的颜色及邻居方块,我们使用了列表,这让问题变得更简单,由此也可以看出,列表在编程中的重要性。 类似的九宫格游戏还有很多,比如井字棋、数字华容道、幻方、数独等,它们都可以使用列表来实现,所以,我们一定要熟练掌握列表的各种用法。 超平老师给你留两个思考题: 1). 本题中的九宫格,要全部变为蓝色,最少几步可以完成? 2). 如果要实现4 x 4的16宫格,又该如何实现呢,赶紧动手试试吧。 如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄 需要素材和源码的,可以移步至"超平的编程课"gzh。

相关推荐
黄油烤菠萝10 分钟前
蓝桥杯-卡java排序
c++·算法·蓝桥杯
二狗哈3 小时前
go游戏后端开发24:写完赢三张游戏
python·游戏·golang
benben0444 小时前
Unity3D仿星露谷物语开发34之单击Drop项目
游戏·ui·unity·游戏引擎
weisian1514 小时前
力扣经典算法篇-9-跳跃游戏(贪心算法,反向递推)
算法·leetcode·游戏
妙为4 小时前
unreal engine5开发仿鬼泣5的游戏,把敌人击飞到空中4连击
游戏·游戏引擎·虚幻·仿鬼泣5·空中连击
勘察加熊人4 小时前
vue记忆卡牌游戏
javascript·vue.js·游戏
梁下轻语的秋缘5 小时前
每日c/c++题 备战蓝桥杯(求解三个数的最大公约数与最小公倍数)
c语言·c++·学习·算法·蓝桥杯
程序员爱钓鱼6 小时前
用Go写一个《植物大战僵尸》小游戏:支持鼠标放僵尸、胜利失败判定!
后端·游戏·go
曦月逸霜6 小时前
第十四届蓝桥杯省赛真题解析(含C++详细源码)
c++·算法·蓝桥杯
蓝桥_吹雪7 小时前
【备赛】蓝桥杯实现多个LED联合控制
笔记·stm32·单片机·蓝桥杯