文/陈新龙
华容道这款益智游戏,以其变化多端、百玩不厌特点与魔方、钻石棋并称为“智力游戏届的三个不可思议”。今天我们要做的数字华容道和传统华容道有一些区别。在《最强大脑》中何猷君曾经以21秒速度完成了4×4数字华容道挑战。常见的数字华容道有3×3、4×4、5×5等三种大小。3×3的游戏界面一共9个格子,需要将1到8八个数字排好顺序;4×4共16个格子,要排好1到15的数字,其实只要掌握到基本解题技巧,数字多少对游戏的难度影响并不大。(图1)
1.脚本规划
我们以最简单的3×3数字华容道为例,游戏开始时数字会完全打乱,然后利用空格位每次移动一个数字,最后将所有数字按顺序复原。玩这个游戏时打乱数字顺序时只能通过在盒子里移动数字的方式打乱,而不是将数字拿出来后再随意放回去,那样可能会出现无解的情况。网上有很多款数字华容道,我们可以参考它们的外观和操作方式,用Scratch编程作一个。
2.素材准备
添加自定义方块角色,在方块造型中填入8个数字,共9个造型。添加游戏胜利的背景(You Win),保留小猫角色。
3.绘制界面
我们用小猫的代码完成界面排布。首先将方块按顺序放入预设位置,创建两个列表分别保存“X坐标”和“Y坐标”,依次将9个方格对应的坐标通过循环存入列表中(具体坐标轴如图1),分别通过三次循环遍历将数字103、0、-103分别添加入X坐标列表中,Y坐标列表的内容通过三个数字分别循环遍历添加入列表中。(图2)
对方块角色编程,通过克隆的方法将九块方格移动到预设位置,默认初始克隆序号值为0,重复执行9次。当克隆体启动时,根据需要显示造型,造型编号等于序号,克隆体的位置由之前创建的X坐标列表和Y坐标列表中提取。(图3)
同时,将数字随机填充入方格中,建立“位置号”列表,通过随机数的方法将1-9数字填入列表中。(图4)
4.与空白块交换位置
还要创建两个自制积木“使用位置号计算行列数”和“计算行列数差值”为完成数字华容道做最后准备。
当我们点击数字方块希望它移动时候,这个方块必须在空白方格旁边才能交换位置。这就需要找到相邻块行列数之间的数学关系来判断鼠标点击的方块和空白方格的位置关系。最后我们通过计算数字块与空白块的行列差来判断空白块是否相邻,如果列数差加行数差的值等于1就说明点击的数字块和空白块相邻,可以移动。交换位置的方法我们已经做了多次,用临时项的方法来完成。(图5)根据胜利时华容道的位置号(1-8),我们可以确定每个数字的行列数,比如数字1就是在第一行第一列,数字5就是在第二行第二列……列数比较容易确定,将位置号除以3的余数,如果结果等于0那么就是第三行,其他为第一行和第二行。行数的确定比列数稍微复杂一点,小于数字4在第一行,否则小于7在第二行,其余在第三行。(图6)
确定完行列值之后,我们可以依据行列值计算出行数差和列数差。当点击数字块列数大于空白块时,列数差为数字块列数减空白块列数,否则的话列数差等于空白块列数减数字块列数。同样行数差也是一样的方法,根据数字块和空白块行数进行对比。(图7)
5.判断胜利条件
检验是否复原的方法其实很简单,当“位置号”列表的数字从1到9顺序排列时,就触发成功的图片。(图8)
数字华容道制作难度虽然不低,但做好之后是可以玩很久的益智游戏,玩华容道要掌握统筹解决问题的方法,尽可能提前部署,争取用最短的时间,将棋盘上的数字方块回复原位。