九宫格博弈战-第15届蓝桥杯国赛Scratch初/中级组真题第5题

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

如果想持续关注Scratch蓝桥真题解读,可以点击《Scratch蓝桥杯历年真题》并订阅合集,查阅教程更方便。

第15届蓝桥杯国赛已于2024年9月7日正式落下帷幕,初级组和中级组共用一套试题,编程题一共有6题(初级组只有前5题),分别如下:

九宫格博弈战,本题是2024年9月7日举行的第15届蓝桥国赛Scratch初/中级组编程第5题,题目要求编程实现九宫格博弈战游戏。螃蟹和海龟轮流抢占九宫格,每占一格,谁先占据九宫格的某一行、某一列或者某一条对角线的三个方块,那么谁就获胜。

先来看看题目的要求吧。

一.题目说明

编程实现:

九宫格博弈战。

螃蟹和海龟轮流抢占九宫格,每占一格,就会在该格里放上一只螃蟹或海龟,谁先占据九宫格的某一行、某一列或者某一条对角线的三个方块,那么谁就获胜,海豚会宣布获胜方;如果最终谁都没能获胜,海豚会说〝旗鼓相当”。

具体要求:

1). 点击绿旗,舞台上呈现一个九宫格(九宫格由3行3列排列整齐的方块组成),九宫格左侧显示一只螃蟹,舞台右下角显示一条海豚,如图所示;

图片

2). 鼠标点击任意一个空白方块,该方块中会呈现出一只螃蟹,同时九宮格左侧的螃蟹变成海龟,如图所示;

图片

3). 然后鼠标点击任意一个空白方块时,该方块中会呈现出一只海龟,同时九宫格左侧的海龟变成螃蟹,如图所示;

图片

4). 鼠标点击有动物的方块时,无任何效果;

5). 重复执行“具体要求”2) ~ 4);

6). 如果螃蟹或海龟占据了九宮格的某一行、某一列或某一条对角线的三个方块,九宫格左侧的螃蟹或海龟消失,海豚宣布获胜方1秒,如下图所示,然后游戏结束;

图片

7). 九宫格被占满后,九宫格左侧的螃蟹或海龟消失,如果此时没有分出胜负,海豚说“旗鼓相当”1秒,然后游戏结束;

8). 游戏结束后,当前游戏界面不再有任何变化,并且鼠标点击任意方块都不会有任何效果。

评判标准:

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

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

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

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

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

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

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

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

二.思路分析

本题提供了3个角色,分别是方块、生物种类和海豚,如图所示:

图片

其中方块有3个造型,如图所示:

图片

生物种类有两个造型,如图所示:

图片

本题考查的知识点包括克隆技巧、私有变量、列表、事件广播机制和自制积木等。

看到这道题目,你想到什么游戏了?

对啦,就是井字棋,英文名叫Tic-Tac-Toe。

图片

这是一种在 3 * 3 格子上进行的连珠游戏,和五子棋类似,由于棋盘一般不画边框,格线排成井字故得名。游戏需要的工具仅为纸和笔,然后由分别代表O和X的两个游戏者轮流在格子里留下标记,任意三个标记形成一条直线,则为获胜,因此也叫三连棋游戏。

还是老规矩,我们运用分解思维,将整个游戏分成3个模块:

  • 克隆九宫格棋盘

  • 点击方块落子

  • 判断输赢

1. 克隆九宫格棋盘

又见九宫格,这可是我们的老朋友了,直接使用“克隆4兄弟”和“自私的ID”两大模型即可,又快又好。

2. 点击方块落子

点击九宫格中的任意方块,就表示要落子了,此过程中,我们要注意3个问题:

  • 每个方块只能点击一次

  • 左侧的生物种类随之变化

  • 需要记录每个格子的生物种类

先看第一点,要确保角色只被点击一次,有多种方法,最简单的方法莫过于直接使用“等待条件” + “碰到鼠标指” + “按下鼠标”的组合,如图所示:

图片

接着来说第二点,左侧的生物种类随之变化,这个比较简单,直接切换造型即可。

第三点是最难的,也是最重要的,它是我们判断输赢的依据。

这里一共有9个格子,都需要记录下来,显而易见,列表是我们的首选。实际上,方块有3个造型,分别是海龟、螃蟹和方块,我们可以将角色的造型编号保存到列表中。

刚开始时,将方块的造型编号保存起来,每点击一个方块,就将对应的列表项更新为角色的造型编号。

3. 判断输赢

什么时候判断输赢呢?

每一次点击方块,都有可能决出胜负,所以只要点击了方块,就需要判断输赢。

简单来说,可以分为如下两种情况:

  • 决出胜负

  • 平局

一般来说,有3种情况,海龟赢、螃蟹赢和平局,但是海龟赢和螃蟹赢的判断基本一样,所以将其合并为一种情况,处理起来更简单。

九宫格是大家都熟悉的结构,一共有3行、3列和两条对角线,所以要同时判断8种组合,只要有一种组合满足条件,就说明决出胜负了。

那么平局呢?

当9个格子都填满了,还没有决出胜负,就说明是平局。

思路有了,接下来,我们就进入程序实现环节。

三.编程实现

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

  • 克隆九宫格棋盘

  • 点击方块落子

  • 判断输赢

1. 克隆九宫格棋盘

切换到方块角色,先创建一个自制积木,使用克隆4兄弟模型克隆九宫格,代码如下:

图片

非常经典的代码,说明3点:

1). 之所以使用自制积木,有两个好处,一是通过勾选“运行时不刷新屏幕”,可以瞬间生成九宫格棋盘,二是可以更好的组织代码结构;

2). 这里的_ID要定义成私有变量,并且确保第一个克隆体的_ID = 1,从而和列表的编号一一对应;

3). 最后的“将_ID设为0”指令的作用是将本体的ID设置为0,从而和克隆区分开,在这个作品中并不是必须的,不过还是建议加上,养成良好的习惯;

然后在绿旗指令中,编写代码如下:

图片

接下来是显示克隆体,代码如下:

图片

代码比较简单,强调两点:

1). 这里的“九宫格”列表要提前创建好,在使用之前要清空列表;

2). 方块角色有3个造型,分别是方块、海龟和螃蟹,而生物种类有两个造型,包括海龟和螃蟹,为了方便,我们调整一下方块角色3个造型的顺序,确保海龟和螃蟹的造型编号一致,如图:

图片

所以,初始情况下,将数字3加入到列表,表示空白方块。执行程序,九宫格方块和列表数据如图所示:

图片

2. 点击方块落子

根据题目的描述,一开始,左侧显示的是螃蟹造型,我们可以使用变量“生物”来表示其造型编号。

在生物种类角色中,编写代码如下:

图片

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

1). 螃蟹的造型编号是2,所以将变量的初始值设置为2;

2). 一旦变量发生变化,通过循环就可以立刻切换造型;

再切换到方块角色,在克隆体启动指令下,增加代码如下:

图片

代码不多,说明4点:

1). 一旦某个方块被点击了,马上切换成当前生物的造型,如果左边显示的是螃蟹,方块就切换成螃蟹,如果是海龟,就切换成海龟造型;

2). 方块呈现螃蟹或海龟的同时,要对应的列表项更新为其造型编号,即“生物”变量的值;

3). 一方落子之后,要轮到对方了,这里是通过改变变量”生物“的值来实现的,如果变量值为1,就设置为2,否则设置为1,对应的生物种类角色会切换到相应造型;

4). 完成落子之后,需要判断输赢,最后发送了一个”判断“的广播消息;

3. 判断输赢

根据前面的思路分析,我们要判断8种不同的组合,每一种组合都包括3个格子,对应于列表项的数据,组合如下:

  • 1、2、3

  • 4、5、6

  • 7、8、9

  • 1、4、7

  • 2、5、8

  • 3、6、9

  • 1、5、9

  • 3、5、7

8种组合判断的逻辑完全一样,为了简化代码,我们可以定义一个自制积木判断给定的3个编号输赢情况,代码如下:

图片

代码比较简单,说明3点:

1). i,j,k表示对应的格子编号,每个格子的造型都保存在列表中;

2). 如果第i、j、k三项都相等,并且不是空白造型,那么就说明决出胜负了;

3). 怎么表示决出胜负了,这里使用了变量flag,一旦满足条件,就将flag设置为1;

然后在接收”判断“广播消息时,使用自制积木来判断,继续编写代码如下:

图片

代码比较长,说明5点:

1). 在判断之前,将flag设置为0,表示还没有决出胜负;

2). 使用自制积木来处理8种情况,如果已经决出胜负了,变量flag的值就等于1;

3). 一旦决出胜负,根据变量”生物“的值说螃蟹或海龟获胜,然后停止脚本,注意在点击之后变量发生了变化,所以生物=1时,表示螃蟹获胜,生物=2时,则海龟获胜;

4).  如果flag不为1,则继续执行后续的如果指令,当列表中不包含3时,说明格子都填满了,这就是平局;

5). 不管是决出胜负还是平局,都需要发送一个”生物隐藏“的广播消息;

对应的,在生物种类角色中增加如下代码:

图片

这样就可以确保左侧的螃蟹或海龟消失了。

再切换到方块角色中,增加如下代码:

图片

这个代码的作用是停止方块角色所有的脚本,从而确保无法点击空白的方块格子。

至此,整个作品就创作好了,可以玩一玩动物版本的井字棋游戏了。

四.总结与思考

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

  • 克隆编程;

  • 私有变量;

  • 列表;

  • 事件广播机制;

  • 自制积木;

这是本次国赛的第5题,也是初级组的最后一题,题目难度较大,完成时间25分钟左右。本题的关键点有两个,一是如何记录落子情况,二是如何判断输赢。

对于第一点,表面上来看,就是使用列表来记录,再进一步,要求我们具备良好的数据思维。

在各种编程中,用户看到的是界面,但是支撑界面的是数据,作为编程创作者,需要关注这些数据是如何组织及处理的,这就是所谓的MV模型(数据驱动视图)。

至于第二点,超平老师使用了自制积木,实际上,你也可以直接在“如果...那么”指令中嵌套“如果...那么”指令,理解起来相对更简单一些,但是代码嵌套层数比较多。

你知道,第一个用程序实现Tic-Tac-Toe的人是谁吗?

他就是鼎鼎大名的前微软总裁比尔·盖茨,当时他才13岁,这也是他写下的第一个程序。

图片

当盖茨八年级的时候,他母校的“母亲俱乐部”(Mothers Club)用慈善品义卖获取的资金,购买了一台Teletype Model 33 ASR终端机。盖茨在这台通用电气生产的计算机上花费了大量的时间。利用这台计算机,盖茨编写出了自己的第一个人机对抗计算机应用程序:Tic-Tac-Toe。

超平老师给你留一道思考题,在判断输赢时,如果不使用自制积木,你该如何编写代码呢?

你还有什么好的方法吗,非常欢迎您和超平老师交流分享。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值