上一节Scratch编程课程,我们已经实现了使用列表来记录黑白棋子的落子情况。那么,对于这些记录在列表中的数值,我们约定0代表没有棋子,1代表对应的位置是黑棋,2代表对应的位置是白棋。
今天的Scratch编程课程,我们就会使用这些数据,来判断是否五子连珠。这里,我还要特别告诉大家,本节课的代码不是最终代码,如果直接讲最终代码,大家很有可能听不懂,所以我还是一步一步从头说起。
落子在列表中的编号请大家先看一下图1。
上一节,我们讲过,为了代码容易理解,我们新建了“左下角开始的行数”和“左下角开始的列数”两个变量。
这节课,同样的道理,我们建立新变量“落子在列表中的编号”。为了更好地理解,请大家对比图1和上一节课的代码。
图1
那么,现在,图1中,一共有了3个变量,并且我们给它们都取了个有意义的名称。也就是一看就知道这个变量是存放什么数据的。它们的功能仅仅是方便代码的阅读么?当然不是。另外一个重要的功能就是,后续的脚本如果想要计算“行数”、“列数”或者“编号”的时候,就不用再重新写代码计算了,直接使用这个变量就可以了。就像我前面课程讲的,变量就像一个盒子,用来存放内容,大家都可以随时去查看变量里存放了什么内容。
判断是否五子连珠首先,我要告诉大家,我们首先进行横向的判断。也就是判断落下的棋子和它左右两端的棋子,能否五子连珠!当你把这部分理解了,其它三个方向,即上下、右上左下、右下左上,就都迎刃而解了。
现在,我们看图2,和“更新落子情况”一样,我们把“判断是否五子连珠”写在“自定义积木”中。
图2
下面我来解释这段代码:
- “连珠总数”变量用来计算落下的棋子两端,和它一样颜色的棋子的总数,包括它自己,总数大于4,就判定为五子连珠。
- 为了不影响图1建立的三个变量,我们建立3个对应的临时变量,即“临时列数”、“临时行数”、“临时编号”。因为它们在重复执行中是变化的。
- 进入重复执行。对落下的棋子的右边所有的落子点,一个一个检查,判断是否有同样颜色的棋子。如果,颜色一样,“连珠总数”增加1;如果,颜色不一样,那么,再向右的落子点也没必要检查了,直接把“临时列数”设为15或者其他大于14的数,重复执行的条件不再满足,重复执行停止。可见,“临时列数”的作用就是控制重复执行的次数。那么,“临时编号”为什么每次重复执行都加1呢?那是因为,我们的编号,是从左下角开始的,所以,每向右一个落子点,它的编号相应地增加1。
- 判断是否颜色一致的原理是:计算出当前判断的落子点的编号,然后按照编号去列表中读取落子点数据是0、还是1、还是2。造型编号对应了当前落子的颜色,将数据和造型编号对比,如果一致说明颜色一样,反之不一样或者该点没有落子。
再看图3的代码,他们是接着图2的代码的,为了方便讲解,我将它分开。
- 首先,“临时编号”、“临时列数”重新初始化为落下的棋子的编号和列数。也就是,我们把判断的对象回到落子处。下面将在它的左边,一个一个落子点进行判断。如果,颜色一样,“连珠总数”增加1;如果,颜色不一样,那么,再向左的落子点也没必要检查了,直接把“临时列数”设为0或者其它小于2的数字,重复执行的条件不再满足,重复执行停止。
图3
最后,对连珠总数进行判断,如果大于4,发出赢棋广播。
图4
演示效果
本节Scratch编程课程最终效果,我录制了视频,请大家点击下面的视频观看。
本次Scratch编程课程就讲到这里,后续课程见!
本文所有图片、视频及文字内容,均为原创,转载时请保留版权信息。
查看更多Scratch编程教程,请点击下一行的了解更多,进入程序员猪猪的头条主页。
点击关注,每天接收更新哦。
,