花了两天时间,完成了Excel 宏绘制随机迷宫的代码。迷宫高宽可调,如果不考虑内存问题的话,可以完成1×1至999×999之间的随机迷宫的初始化。

编写过程中遇到的一个困难是存储已完成迷宫部分和未完成迷宫部分的边界的存储问题,开始想用数组来存储,可是,数组的长度设定比较麻烦,后来改用数字编码来存储一个单元格的信息,然后将所有单元格信息按顺序存放到了字符串中储存来解决。

从编码中提取行号和列号的过程中,遇到了一个问题是以0开头的字符串数字,VBA会将其认成8进制数字,这一点比较讨厌。解决的办法是增加一位编码,比如行号0~999,列号0~999,现在将行号编码改为(1000+行号),将列号编码改为(1000+列号)。提取行号和列号的时候,不再使用Val(三位行号)的形式,而是用Val(四位行号)-1000的形式。

表示墙的方位时,开始使用了1左2右3上4下的编码。后来发现这样编码找对接的单元格比较麻烦,于是改成了1下2左3右4上的编码顺序。次要原因是符合字母顺序1Bottom,2Left,3Right,4Top。主要原因是这样计算方便:1=5-4;2=5-3。要寻找对接单元格墙的编码,用5减去自己墙的编码数字即可。

以下是生成的几张迷宫图。

高20宽60的迷宫

高20宽60的迷宫

高30宽60的迷宫

高30宽60的迷宫