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

文摘   教育   2024-10-29 20:45   湖北  

[导读]:超平老师的《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。

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

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

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

需要素材和源码的,可以添加本人微信

另外,超平老师创建了一个蓝桥杯备考交流群,这是专门为老师和家长打造的免费社群,您可以与来自全国各地的老师、家长共同交流经验,分享学习心得。

超平老师也会给大家带来及时的赛事动态,备考攻略,真题资源分享,帮助各位更好备考第15届蓝桥杯赛事,力争取得优异的成绩。

扫码或长按加入微信群

超平的编程课
青少儿编程教育专家,中国人民大学硕士,大学讲师,曾任知名上市机构金牌讲师,16年编程教研经验。大耳猴少儿编程联合创始人,致力于通过编程教育提升孩子的逻辑思维、数学思维和计算思维,迎接AI时代。
 最新文章