APP下载

Scratch 制作井字棋游戏

2021-09-13陈新龙

电脑报 2021年34期
关键词:方块方格棋盘

陈新龙

井字棋,英文名叫Tic-Tac-Toe,是一种在3×3格子上进行的连珠游戏,和五子棋类似,由于棋盘一般不画边框,格线排成井字故得名。游戏需要的工具仅为纸和笔,然后由分别代表O和X的两个游戏者轮流在格子里留下标记(一般来说先手者为X),任意三个标记形成一条直线,则为获胜。由于井子棋难度低,常用作儿童游戏。玩过这个游戏的人都会发现,如果两个玩家都做出最优选择,这个游戏一定会出现平局。别看这个游戏简单,但用数学计算它整个过程却复杂得多,从理论上讲“井字棋”一共可能有19683种现象!今天就和大家一起用Scratch把“井字棋”游戏给做出来。这个游戏的代码没有大家想象的那么难,只要大家跟紧思路就没有任何问题,让我们一起开始吧(图1)。

首先我们创建需要的角色和背景。点击舞台背景在造型中绘制四条线作为棋盘,线条的间距稍微放宽一些,粗细也稍微加粗一些。再写上X WIN和O WIN两种结局的背景造型。

完成三个背景造型之后,新建角色,这个角色的造型中需要添加四个不同的造型,分别是两个正方形的方块,方块比棋盘格子稍微小一点。颜色为一白一灰用于遮挡和显示鼠标焦点。当鼠标移动到棋盘上的格子时,颜色切换成灰色,默认情况下颜色为白色。另外两个角色是X和O用来表示棋子。准备好的背景和角色如图2。

一切就绪后,可以开始编写代码了,我们先为棋盘每个格子编号,左下角为1号位,右上角为9号位。使用两个变量sign_num(用于标记每个方块的编号)和toggle(用于标记每个方块背后的X或者O)。

将角色造型切换成白色方块,移动到1号位(-115,-112)。套用双重循环,每次重复执行3次,克隆自己,将X坐标增加115(X和Y的数值是根据棋盘与角色方块的高宽实际情况计算出来的,可以自行调整)。同时将sign_num的值增加1,内层循环结束。将X坐标重新设为-115,恢复到左边格子的坐标,将Y坐标增加110,角色到了中间一行。3×3次循环结束之后,棋盘中的每个方格都有了一个克隆体(如图3)。

为了标记这些克隆体,我们新建一个列表cell、一个变量count,默认起始情况下删除cell中的全部内容,将变量count设置为10,重复执行9次,将数字10-19添加到列表中,对应9个位置的角色。列表有两个作用,第一作为区分方格的数字编号,第二游戏时将X和O与列表中的数字进行替换用来记录棋局,到此第一步结束(如图4)。

游戏开始后所有克隆體快速铺满棋盘后,初始状态是所有的方格上都是白色的造型(造型编号=1)。我们移动鼠标开始游戏,当碰到鼠标指针后切换成灰色造型(造型编号=2),之后分成两种情况,点击鼠标落子和没有操作移开鼠标。

当按下鼠标且该位置没有棋子时(造型编号=2)可以落子,按照井字棋游戏的规则,两个玩家轮流按下鼠标打叉(X)和画圈(O),我们可以通过toggle变量来控制X和O的次序,当toggle为奇数时(toggle除以2的余数=1时说明toggle是奇数),切换成O的造型,当toggle为偶数时,切换成X的造型,切换造型之后将列表中格子对应的项替换成X或O。每次鼠标点击,toggle数值增加1。

当没有点击操作,鼠标移开,就将灰色块恢复成白色块。

到目前为止,游戏已经可以操作了,只是还缺少了最重要的一部分判断胜利,就是需要判断是否产生了三连。井字棋不同于五子棋,获取胜利的局面数量很少,才横三条、竖三条、斜线两条共八种可能。我们只需要将八种方式一一列举出来就可以了,比如当列表的第1项=等2项=第3项的时候,对应方格中的1、2、3号位刚好横向连成一条线。实际编程时使用“第1项=等2项与等2项=第3项”。再根据方格中的内容来判断到底是哪一方获得了胜利。最后用广播的方式传递胜利信息给背景显示出来(如图5)。

到这里,我们的井字棋游戏也成功完成了,这里小陈老师留一个问题,在目前井字棋代码中我只判断了赢和输,如果最终的结局是平局该怎么用代码表示呢?剩下整个问题就交给大家了。一起动脑思考一下吧,期待你们的答案。

猜你喜欢

方块方格棋盘
谜题方块
玩转方格
纸板俄罗斯方块拼图
玩转方格
上期《玩转方格》答案
叠方格
有序数方块
棋盘人生
棋盘里的天文数字
棋盘疑案