[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第197讲。
第15届蓝桥杯国赛已于2024年9月7日正式落下帷幕,初级组和中级组共用一套试题,编程题一共有6题(初级组只有前5题),分别如下:
九宫格博弈战,本题是2024年9月7日举行的第15届蓝桥国赛Scratch初/中级组编程第5题,题目要求编程实现九宫格博弈战游戏。螃蟹和海龟轮流抢占九宫格,每占一格,谁先占据九宫格的某一行、某一列或者某一条对角线的三个方块,那么谁就获胜。
螃蟹和海龟轮流抢占九宫格,每占一格,就会在该格里放上一只螃蟹或海龟,谁先占据九宫格的某一行、某一列或者某一条对角线的三个方块,那么谁就获胜,海豚会宣布获胜方;如果最终谁都没能获胜,海豚会说〝旗鼓相当”。具体要求:
1). 点击绿旗,舞台上呈现一个九宫格(九宫格由3行3列排列整齐的方块组成),九宫格左侧显示一只螃蟹,舞台右下角显示一条海豚,如图所示;
2). 鼠标点击任意一个空白方块,该方块中会呈现出一只螃蟹,同时九宮格左侧的螃蟹变成海龟,如图所示;
3). 然后鼠标点击任意一个空白方块时,该方块中会呈现出一只海龟,同时九宫格左侧的海龟变成螃蟹,如图所示;5). 重复执行“具体要求”2) ~ 4);
6). 如果螃蟹或海龟占据了九宮格的某一行、某一列或某一条对角线的三个方块,九宫格左侧的螃蟹或海龟消失,海豚宣布获胜方1秒,如下图所示,然后游戏结束;
7). 九宫格被占满后,九宫格左侧的螃蟹或海龟消失,如果此时没有分出胜负,海豚说“旗鼓相当”1秒,然后游戏结束;
8). 游戏结束后,当前游戏界面不再有任何变化,并且鼠标点击任意方块都不会有任何效果。
10分:满足"具体要求"中的1);
5 分:满足"具体要求"中的2);
5 分:满足"具体要求"中的3);
5 分:满足"具体要求"中的4);
10分:满足"具体要求"中的5);
20分:满足"具体要求"中的6);
20分:满足"具体要求"中的7)
在编程之前,先来看一下作品的完整效果吧:
本题提供了3个角色,分别是方块、生物种类和海豚,如图所示:
本题考查的知识点包括克隆技巧、私有变量、列表、事件广播机制和自制积木等。对啦,就是井字棋,英文名叫Tic-Tac-Toe。这是一种在 3 * 3 格子上进行的连珠游戏,和五子棋类似,由于棋盘一般不画边框,格线排成井字故得名。游戏需要的工具仅为纸和笔,然后由分别代表O和X的两个游戏者轮流在格子里留下标记,任意三个标记形成一条直线,则为获胜,因此也叫三连棋游戏。还是老规矩,我们运用分解思维,将整个游戏分成3个模块:
又见九宫格,这可是我们的老朋友了,直接使用“克隆4兄弟”和“自私的ID”两大模型即可,又快又好。点击九宫格中的任意方块,就表示要落子了,此过程中,我们要注意3个问题:先看第一点,要确保角色只被点击一次,有多种方法,最简单的方法莫过于直接使用“等待条件” + “碰到鼠标指针” + “按下鼠标”的组合,如图所示:接着来说第二点,左侧的生物种类随之变化,这个比较简单,直接切换造型即可。第三点是最难的,也是最重要的,它是我们判断输赢的依据。这里一共有9个格子,都需要记录下来,显而易见,列表是我们的首选。实际上,方块有3个造型,分别是海龟、螃蟹和方块,我们可以将角色的造型编号保存到列表中。刚开始时,将方块的造型编号保存起来,每点击一个方块,就将对应的列表项更新为角色的造型编号。
每一次点击方块,都有可能决出胜负,所以只要点击了方块,就需要判断输赢。一般来说,有3种情况,海龟赢、螃蟹赢和平局,但是海龟赢和螃蟹赢的判断基本一样,所以将其合并为一种情况,处理起来更简单。
九宫格是大家都熟悉的结构,一共有3行、3列和两条对角线,所以要同时判断8种组合,只要有一种组合满足条件,就说明决出胜负了。
当9个格子都填满了,还没有决出胜负,就说明是平局。切换到方块角色,先创建一个自制积木,使用克隆4兄弟模型克隆九宫格,代码如下:1). 之所以使用自制积木,有两个好处,一是通过勾选“运行时不刷新屏幕”,可以瞬间生成九宫格棋盘,二是可以更好的组织代码结构;2). 这里的_ID要定义成私有变量,并且确保第一个克隆体的_ID = 1,从而和列表的编号一一对应;3). 最后的“将_ID设为0”指令的作用是将本体的ID设置为0,从而和克隆区分开,在这个作品中并不是必须的,不过还是建议加上,养成良好的习惯;
1). 这里的“九宫格”列表要提前创建好,在使用之前要清空列表;2). 方块角色有3个造型,分别是方块、海龟和螃蟹,而生物种类有两个造型,包括海龟和螃蟹,为了方便,我们调整一下方块角色3个造型的顺序,确保海龟和螃蟹的造型编号一致,如图:所以,初始情况下,将数字3加入到列表,表示空白方块。执行程序,九宫格方块和列表数据如图所示:根据题目的描述,一开始,左侧显示的是螃蟹造型,我们可以使用变量“生物”来表示其造型编号。1). 螃蟹的造型编号是2,所以将变量的初始值设置为2;
2). 一旦变量发生变化,通过循环就可以立刻切换造型;再切换到方块角色,在克隆体启动指令下,增加代码如下:
1). 一旦某个方块被点击了,马上切换成当前生物的造型,如果左边显示的是螃蟹,方块就切换成螃蟹,如果是海龟,就切换成海龟造型;2). 方块呈现螃蟹或海龟的同时,要对应的列表项更新为其造型编号,即“生物”变量的值;3). 一方落子之后,要轮到对方了,这里是通过改变变量”生物“的值来实现的,如果变量值为1,就设置为2,否则设置为1,对应的生物种类角色会切换到相应造型;4). 完成落子之后,需要判断输赢,最后发送了一个”判断“的广播消息;根据前面的思路分析,我们要判断8种不同的组合,每一种组合都包括3个格子,对应于列表项的数据,组合如下:8种组合判断的逻辑完全一样,为了简化代码,我们可以定义一个自制积木判断给定的3个编号输赢情况,代码如下:1). i,j,k表示对应的格子编号,每个格子的造型都保存在列表中;
2). 如果第i、j、k三项都相等,并且不是空白造型,那么就说明决出胜负了;
3). 怎么表示决出胜负了,这里使用了变量flag,一旦满足条件,就将flag设置为1;然后在接收”判断“广播消息时,使用自制积木来判断,继续编写代码如下:
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届蓝桥杯赛事,力争取得优异的成绩。
扫码或长按加入微信群