今天对Excel宏迷宫代码进行了改进,实现了可以用键盘进行游戏操作的功能。虽然操作界面不是很友好,但是好歹是动起来了。

下面分享一下制作过程中遇到的困难以及解决办法,供参考。

开始是用按钮控制角色移动的,后来发现眼睛既要看着角色位置,角色周围的环境,又要看着按钮,操作起来很不方便。于是将方案定为使用快捷键。

但是快捷键只对录制的宏起作用,对自己写的宏貌似不起作用。于是录制宏的时候设置好快捷键,然后将写好的宏代码复制到录制的宏里面去,发现快捷键仍然可以使用。这样快捷键的问题就解决了,有一点不友好的就是:Excel宏的快捷键是Ctrl+字母或者Ctrl+Shift+字母的形式,还不支持方向键。所以使用了Ctrl+WSAD四个键来表示移动的方向,操作的时候,一个手按着Ctrl键不放,另一个手操作WSAD四个键即可。

发现的第二个问题是自动生成的迷宫,最终的解决路线往往都是接近直线的。这或许是等概率导致的必然结果,暂时还没有想到有什么解决办法。

用不同颜色表示不同的含义

黑色填充表示尚未探索的迷宫区域;黑色线条表示墙壁;紫色填充表示角色当前位置,角色可以看到周围8格范围,白色填充表示角色曾经看到过但是没去过的区域;灰色填充表示角色去过并认为没必要去的区域;绿色填充表示角色去过并认为应当去的区域,入口到出口之间的绿色路线对应着解决方案中的最短路线。黄色填充表示迷宫外围区域,防止角色从迷宫外面绕行而设置的颜色。

运动及变色的逻辑:

1.角色能否向某个方向移动取决于两点:当前单元格和前方单元格之间不能有黑色边框,即不能穿墙过;前方单元格的填充色必须是白色、灰色或者绿色,因为白色只能从黑色变来,所以角色不会从迷宫外面的黄色区域到达出口位置,灰色或者绿色只能从紫色变来。

2.角色一旦向某个方向移动了,角色左前、正前、右前三个单元格如果是黑色就变成白色表示新探索区域;如果角色当前位置前一刻是白色或者灰色,那么角色前一刻位置变为绿色表示正在探索新的区域;如果角色当前位置前一刻是绿色,那么角色前一刻位置变为灰色表示正在原路返回;角色当前位置设置为紫色。

下面附上两张迷宫图案,隐藏地图的迷宫。

新生成的迷宫

完成探索的迷宫