占领地盘-第16届蓝桥STEMA省考Scratch真题第5题

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

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

第16届蓝桥STEMA省考已于2025年5月18日落下帷幕,编程题一共有5题(初级组只有前4道编程题),分别如下:

占领地盘,本题是2025年5月18日举行的蓝桥STEMA省考Scratch编程中级组编程第5题。题目要求编程创作占领底盘游戏,两位玩家使用键盘方向控制不同的角色在网格中移动,各自经过的方格会被其占领,网格全部占领后,根据各自占领方格的数量多少来判定胜负。

先来看看题目的要求吧。

一.题目说明

编程实现:

占领地盘。

占领地盘游戏是两位玩家使用键盘方向控制不同的角色在网格中移动,各自经过的方格会被其占领,网格全部占领后,根据各自占领方格的数量多少来判定胜负。

具体要求:

1). 点击绿旗,舞台上出现3行3列排列整齐的白色方格,如图所示;

图片

2). 1秒后,狮子和老虎出现在随机的两个方格中;

3). 老虎所在或经过的方格变为绿色(表示被其占领),狮子所在或经过的方格变为黄色(表示被其占领)

4). 随机的一个动物角色一直说 “该我走了〞(表示轮到该角色移动,该动物称为当前角色),如图所示;

图片

5). 每按下一次键盘↑、↓、←、→按键,可以将当前角色朝对应方向移动一格,如果当前角色所在方格的对应方向没有方格则不会移动;

6). 狮子无法移动进入绿色方格,老虎无法移动进入黄色方格;

7). 当前角色移动一格(必须移动一格)之后,对手角色变为当前角色,只有当前角色一直说 “该我走了”,如图所示:

图片

8). 重复执行“具体要求“3)、5)、6)、7)直到网格全部被占领,然后长颈鹿出现,此时若狮子占领的方格数多于老虎,长颈鹿说“狮子胜”1秒;若老虎占领的方格数多于狮子,长颈鹿说“老虎胜”1秒。然后游戏结束(游戏结束后方格还在,且无法再控制狮子和老虎移动),如图所示。

图片

评分标准:

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

  • 10分:满足“具体要求”中的2);

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

  • 10分:满足“具体要求”中的4);

  • 10分:满足“具体要求”中的5);

  • 10分:满足“具体要求”中的6);

  • 10分:满足“具体要求”中的7);

  • 10分:满足“具体要求”中的8)。

二.思路分析

本题包含4个角色,分别是方格、狮子、老虎和长颈鹿,如图所示:

图片

其中方格角色有3种不同的颜色,分别是白色、绿色和黄色,如图:

图片

本题考查的知识点包括运动、克隆、按键处理、私有变量、列表、广播及各种运算等。

题目的综合性比较强,根据题目的描述,我们运用分解思维将整个作品分成4大模块:

  • 克隆网格

  • 初始化狮子和老虎的位置

  • 狮子和老虎的移动

  • 判断胜负

接下来,我们分模块逐一进行讨论和分析。

1.克隆网格

这是一个3*3的网格,如果只是生成网格的话,就比较简单了,直接使用超平老师总结的“克隆4兄弟”模型即可。

如果考虑到格子会被狮子和老虎占领后变成黄色和绿色的话,那么我们还需要两个非常重要的信息需要保存。

第一个信息是每个格子的颜色状态,是默认的白色,还是被狮子占领后的黄色,又或者是被老虎占领后的绿色,我们可以定义一个列表,用来保存每个格子的颜色状态。

第二个信息是格子的编号(ID),要区分不同的克隆体方格,需要使用私有变量,从1~9给每个格子依次编号,和列表的编号刚好一一对应。

如果再考虑到狮子和老虎初始时的随机位置,这意味着我们需要知道每个方格的坐标,出于方便和灵活这两个方面的考虑,超平老师建议使用两个列表分别保存每个方格的x坐标和y坐标,在克隆的时候进行初始化即可。

小结一下,我们要创建一个私有变量“ID”,再创建3个列表,分别为“网格”、“x坐标”和“y坐标”。除了“网格”列表之外,在克隆3*3的网格时,对这些变量和列表进行初始化设置。

2.初始化狮子和老虎的位置

3*3的网格一共有9个位置,这就意味着狮子和老虎可以随机挑选两个位置,结合前面的“网格”列表,可以在列表中随机的插入7个1,剩下两项就是2和3了,如图所示:

图片

这个很容易实现吧,聪明的你肯定已经想到了,“插队算法”嘛,就是它了。

有了这个列表,就可以通过“列表中第一个xx的编号”指令获取2和3的编号了,为方便起见,可以定义两个变量“狮子”和“老虎”分别保存起来,再结合“x列表”和“y列表”就可以设置老虎和狮子的初始位置了。

3.狮子和老虎的移动

这是本作品中最难的部分了,超平老师建议对这一模块进行二次拆分,可以分为如下几个小模块:

  • 轮流移动

  • 按键判断

  • 狮子和老虎的移动

  • 方格变色

轮流移动比较简单,一个变量就能搞定,定义变量“动物”,将其设置为1~2之间的随机数,1表示狮子,2表示老虎,狮子和老虎移动之后,重新设置一下变量的值即可。

按键判断是老生常谈了,需要强调的是不要使用事件模块中的“当按下xx键”指令,而是结合广播来精确控制按键的时机,同时加上“等待条件”指令避免长按情况。

狮子和老虎的移动是关键,它有两个限制,一是不能越界,二是不能走到对方已经占领的方格,这就需要在移动之前进行判断,如何判断呢?

这和第15届的变色游戏作品《变色游戏-第15届蓝桥第三次STEMA测评Scratch真题精选》有异曲同工之妙。

可以通过狮子或老虎当前所在的格子判断是否会出界,再计算出上下左右4个方向的格子编号,结合“网格”列表,就可以获取其颜色,再判断是否能移动。

方格变色就比较简单了,狮子或老虎移动后,同时需要更新列表中的数据,然后给方格克隆体发送一个广播消息,重新切换造型即可。

4.判断胜负

这是长颈鹿角色的工作了,无非就是两个问题,一是什么时候判断,二是如何判断?

先解决第一个问题,当所有的格子被占领后进行判断即可,关键是我们怎么找到所有的格子被占领了呢?

此时就凸显出列表的作用了,随着列表的更新,1会逐个的修改为2或3,最后1肯定不存在了,也就是说列表中不包含1。

第二个问题就比较简单了,遍历列表,分别计算出2(狮子占领的格子)和3(老虎占领的格子)的数量,然后进行比较即可。

由于代码比较多,为了方便讲解,超平老师会使用自制积木来组织代码,建议你也这么做。

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

三.编程实现

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

  • 克隆网格及初始化

  • 初始化狮子和老虎的位置

  • 狮子和老虎的移动

  • 判断胜负

1. 克隆网格及初始化

切换到网格角色,先创建好私有变量"_ID"、“狮子”、“老虎”,列表“网格”、“x坐标”和“y坐标”。

创建自制积木“初始化网格列表“,编写代码如下:

图片

代码还算简单,说明3点:

1). 一定要记得清空列表;

2). 这里使用的是”插队算法“,确保列表中的数据是随机的;

3). 变量”狮子”保存的是狮子所在的格子编号,“老虎”保存的是老虎所在的格子编号,此处先计算出来,后续可以直接使用。

创建自制积木“克隆网格”,并编写代码如下:

图片

代码不少,但都是我们熟悉的内容,强调4点:

1). 在创建自制积木时,勾选“运行时不刷新屏幕”选项,这样可以瞬间克隆出网格;

2). 创建变量“_ID”时,一定要勾选“仅适用于当前角色”,否则就不是私有变量了,同时要确保克隆体的编号从1开始;

3). 克隆的那一刻,将本体的x、y坐标分别保存到两个列表“x坐标”和“y坐标”中,移动要在改变坐标之前保存;

4). 方格角色的造型中心并不在方块的中间,要注意起点坐标的位置,确保克隆出来的3*3网格刚好位于舞台中间。

有了自制积木,就可以在绿旗指令下编写代码如下:

图片

对应的,在“当作为克隆体启动时”指令下,编写代码如下:

图片

两个代码块都比较简单,说明两点:

1). 本体角色的初始化包括造型编号、隐藏和层次关系,3个都要有;

2). 每个克隆体都有自己ID编号,通过ID从列表中获取造型编号,然后就可以切换成对应的造型;

2. 初始化狮子和老虎的位置

由于准备工作在上一步中都已经做好了,接下来就比较简单了,切换到狮子角色,编写代码如下:

图片

在切换到老虎角色,编写代码如下:

图片

两个角色的代码基本是一样的,简单说明两点:

1).  要等待1秒,确保和网格一起出现;

2). x坐标要+30,y坐标要-30,是因为方格角色的造型中心是方格左上角,方格的大小是60*60,因此要右移30步、下移30步,才刚好在方格的中心位置。

执行代码,狮子和老虎就可以出现在随机的两个格子中了,如图:

图片

3. 狮子和老虎的移动

先创建变量“动物”,用来表示当前移动的动物,然后将初始值设置为1或2。这部分代码放在哪个角色中都是可以的,干脆就放在长颈鹿角色中吧。

切换到长颈鹿角色,在绿旗下编写代码如下:

图片

代码非常简单,注意一个细节,就是这里发送了一个“开始”的广播消息,狮子和老虎只有在接收到“开始”的广播消息之后按键才有效。

切换到狮子角色,继续编写代码如下:

图片

代码比较长,强调4点:

1). 变量“动物“为1时,轮到狮子走了,狮子会说”该我走了“,如果轮到老虎了,即”动物“=2,狮子就要停止说话了,用说空指令覆盖到之前的内容;

2). 按键的判断,这里先使用了一个”等待条件“指令,判断是否有按下↑、↓、←和→方向键,然后使用”如果...那么“指令判断具体按下了哪个方向键;

3). 当按下↑、↓、←和→方向键时,分别使用了”上移“、”下移“、”左移“和”右移“自制积木来处理具体的移动,同时加上了”等待按下xx键不成立“指令,这样可以避免长按连续移动的情况;

4). 当处理完移动之后,将变量”动物“设置为2,轮到老虎移动了,同时发送一个”开始“的广播消息,这样就可以循环处理按键了。

”上移“自制积木的代码块如下:

图片

”下移“自制积木的代码块如下:

图片

”左移“自制积木的代码块如下:

图片

”右移“自制积木的代码块如下:

图片

理解并编写这几个代码块的秘诀在下面这张图中:

图片

还是详细说明6点:

1). 当位置(变量”狮子“) > 3时,说明不在第一行,要考虑上移,当位置 < 7时,说明不在最后一行,要考虑下移;

2). 将位置(变量”狮子“)对3取余数,如果余数为不为1,说明不在第一列,要考虑左移,如果余数不为0,说明不在最后一列,要考虑右移;

3). 上移时位置要减3,下移时位置要加3,左移时位置减1,右移时位置加1;

4).  狮子能否移动,还要看即将要移动的格子是否已被老虎占领,也就是对应的列表项不能等于3;

5). 一旦可以移动,需要改变狮子的坐标,变量”狮子“要相应的更新,对应的”网格“列表项”也要更新为2,表示这个方格被狮子占领;

6). x坐标“和”y坐标“列表不用更新,它只是在初始化狮子和老虎的位置时用到。

切换到”方格“角色,编写代码如下:

图片

当狮子占领一个方格后,对应的列表项被修改了,需要重新设置其造型。

老虎角色的代码和狮子基本是一样的,只有几个地方需要修改一下,这里就不再单独列出了。

4. 判断胜负

判断胜负也是长颈鹿角色的工作,切换到长颈鹿角色,在绿旗代码块中继续编写代码如下:

图片

代码不少,说明3点:

1). 前面还有7行代码,这里就不再列出了;

2). 当”网格“列表中没有1时,说明所有的格子被占领,发送一个”停止“的广播消息;

3). 重新利用”老虎“和”狮子“变量来表示分别被占领的方格数,不过要先将其设置为0,然后遍历”网格“列表,统计各自的数量;

在接收到”停止“广播后,狮子和老虎角色需要停止说话,在两个角色中都添加如下代码:

图片

为了确保最后一个方格也能改变颜色,还需要在方格角色中增加如下代码:

图片

至此,整个作品就创作好了。

四.总结与思考

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

  • 运动编程;

  • 克隆编程;

  • 全局变量和私有变量;

  • 列表及其运算;

  • 按键处理;

  • 事件广播机制;

  • 自制积木;

  • 算术运算、比较运算和逻辑运算等;

这是中级组的最后一题,初级组没有此题,作为本次stema省考的压轴大题,难度较大,完成时间30分钟左右。

不要看积木块数量有300多个,如果去掉老虎和狮子一样的代码后,也就200来个,还有不少代码有相似的结构,直接复制代码,稍作修改就OK了。

完成此作品关键点是使用列表来保存9个格子的状态,它有3大作用:

1). 使用私有变量“ID”来标识每个格子,从而确保精确的控制每个方格;

2). 狮子和老虎占领方格时,不是直接将这个方格变色,而是先修改列表的值,再根据列表的值来切换方格的造型;

3). 它是判断胜负的重要依据,什么时候判断,怎么判断,通过列表中的数据轻轻松松就搞定了。

超平老师给你留一道思考题,此题是否可以利用颜色碰撞指令来控制角色的移动,如果可以,该怎么实现呢,要注意哪些细节呢?

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

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值