玩法
左上角的绿色格子是起点,右下角的红色格子是出口,蓝色圆点就是你的角色。用方向键、W・A・S・D键或屏幕上的四个按钮,每次移动一格。朝着有墙的方向按键时只会发出低沉的提示音,角色不动,移动次数也不增加。移动次数只统计真正换格的步数,所以走进死胡同再退出来,每一格都要算两次。 计时从你迈出第一步时才开始,而不是迷宫出现的那一刻,所以观察全局的时间不计入成绩。到达出口后计时停止,走过的格子会保留浅蓝色,方便看出哪些分支已经试过。 切换难度或点击"新迷宫"会立刻生成新的迷宫并重置记录。成绩不会保存,也不会向服务器发送任何信息。
各难度的迷宫规格
三个难度的区别只是正方形网格的边长格数。下表根据游戏代码使用的格数和格子大小计算得出。通道数量由迷宫"所有格子相连且没有环路"的结构决定:N个格子组成无环的连通结构时,连接恰好是N−1条。剩下的内部墙数量,等于格子之间的边界总数2n(n−1)减去已打通的通道,即(n−1)²。
| 难度 | 网格 | 格数 | 已打通的通道 | 剩余内部墙 | 画布(px) |
|---|---|---|---|---|---|
| 简单 | 11×11 | 121 | 120 | 100 | 352×352 |
| 普通 | 17×17 | 289 | 288 | 256 | 408×408 |
| 困难 | 23×23 | 529 | 528 | 484 | 460×460 |
最短步数参考表
起点和出口总在对角两端,所以即使一堵墙都没有,也至少要走2(n−1)步。真实的迷宫弯弯曲曲,最短路线要长得多。表中"模拟"的几列是依赖随机数的值:对每种尺寸运行本页的生成方法3,000次,每次测出最短步数后取整得到。你玩到的每个迷宫都不同,重新模拟一次数值也会略有变化。最低10%、中位数、最高10%是把3,000个结果从小到大排列后对应位置的值。
| 难度 | 理论下限 | 模拟最小值 | 最低10% | 中位数 | 最高10% | 沿墙走最大值 |
|---|---|---|---|---|---|---|
| 简单 | 20 | 20 | 32 | 52 | 78 | 240 |
| 普通 | 32 | 40 | 68 | 112 | 164 | 576 |
| 困难 | 44 | 60 | 112 | 190 | 274 | 1056 |
"沿墙走最大值"不是实测值,而是上限。在没有环路的迷宫里,一直扶着墙走的方法每条通道最多来回各走一次,因此不会超过2×(格数−1)步。通关后,游戏会把这个迷宫的真实最短步数和你的步数一起显示。
移动效率与验算示例
移动效率是最短步数 ÷ 你的步数 × 100(%)。100%表示一步冤枉路都没走。因为除以的是每个迷宫自己的最短步数,所以不同迷宫之间也能公平比较,不会把碰巧遇到的短迷宫误当成自己的实力。
- 在"普通"难度下,最短路线正好等于模拟中位数112步的迷宫,如果你用140步逃出,效率为112 ÷ 140 ≈ 80%,即多走了28步。
- "普通"难度的理论下限是32步,能达到它的迷宫几乎是一条直线,极为罕见。即使只比下限多走14步,效率也是32 ÷ 46 ≈ 70%。
迷宫如何生成,最短步数如何计算
生成方式是广为人知的深度优先回溯法,用循环和栈实现,而不是递归。开始时所有格子四面都有墙。程序把起点标为已访问,随机选一个尚未访问的相邻格子,拆掉两者之间的墙并走过去;没有可去的地方时就沿栈回退,换个方向再试;栈空了就说明所有格子都访问过。随机选择使用浏览器的Math.random,它不是加密级随机数,不能用于需要安全性的场合。
结果是所有格子相连且没有环路的"完美迷宫"。任意两格之间恰好只有一条路,所以不会出现无法到达出口的迷宫。这种方法生成的迷宫通常通道又长又弯、岔路相对较少,这与上表中"普通"难度的最短步数中位数达到理论下限三倍以上相符。
通关后显示的最短步数,是迷宫生成之后立即用广度优先搜索算出的:从起点出发,按距离由近到远访问格子,不穿墙,记录每个格子的距离,出口处记录的距离就是最短步数。计算量与格子数成正比,因此即使是529格的"困难"迷宫也瞬间完成。
逃出迷宫的技巧
- 扶墙走:在脑中一直扶着右手(或左手)边的墙前进。在无环迷宫里一定能到达出口,并且不会超过表中的上限。缺点是每个死胡同都要走到底,效率偏低。
- 优先向右和向下:出口总在右下角,遇到岔路时先试向右或向下的路。这不是确定的规则,只是经验法则,平均来说能减少回头的次数。
- 利用浅蓝色足迹:走过的格子会留下颜色,可以避免再次走进已经探过的死胡同。
- 先用眼睛解:"简单"难度的整个迷宫都能在屏幕上看全。路只有一条,从出口倒着看,第一个岔路就能告诉你从起点该选哪一边。
- 岔路口前点按:按住方向键会连续移动,在通道里很方便,但在路口前松手、想清楚方向再走,能减少误操作。
操作与显示说明
方向键和WASD由游戏接管,因此游戏中页面不会滚动,难度下拉菜单的值也不会被方向键改变。选好难度后,菜单会自动释放焦点,可以直接用键盘移动。带Ctrl、Alt或Command的快捷键不受影响。手机上请使用棋盘下方的四个按钮。画布会随屏幕宽度缩小,但内部分辨率不变;不过"困难"难度的画布是460px的正方形,在小屏幕上线条会显得较细。
提升成绩的思路
同一难度多玩几次,关注效率(%)的变化,而不是单纯的步数。100%只有在移动前就看清全部路线时才会出现,所以刚开始把目标定在50%到70%就足够了。用时会受输入速度和设备影响,只作为辅助指标。"困难"难度的棋盘太大,很难一眼看全,每经过一个岔路就对照浅蓝色足迹确认一下,会更稳妥。
常见问题
迷宫里有多条路线吗?
没有。用这种方法生成的迷宫是"完美迷宫",任意两点之间恰好只有一条路。岔路很多,但没有环路,所以不存在绕开障碍的另一条路,遇到死胡同必须退回来。
撞墙会增加移动次数吗?
不会。朝墙按键只会发出声音,只有角色真正换了格子才会计数。
计时从什么时候开始?
从第一步开始,而不是迷宫出现的时候,所以观察迷宫的时间不计入。到达出口后停止,并显示到小数点后一位。
手机上能玩吗?
可以。点按棋盘下方的方向按钮,每点一次前进一格,没有键盘也能玩。
能重玩同一个迷宫吗?
不能。迷宫每次随机生成且不会保存,同样的形状不会再次出现。刷新页面或切换难度后,当前迷宫就会消失。