确保可以解决带有电梯的房屋地图迷宫?


13

在我的游戏中,我们从侧面看到房屋的地板,英雄可以乘电梯-电梯可以向上(向下一个向上的电梯),也可以向下(向下一个向下的电梯),具体取决于箭头如图所示,并且总是有一对正好相连的两个电梯。尽管英雄可以水平自由移动,但这是英雄可以垂直移动的唯一方法。房屋地图是一个随机的11x5网格,其中包含不同的项目,并且在最左侧,最右侧以及有时在两个中间位置之一处设有不可逾越的墙:

举个例子

我的问题:如何确保地图始终随机且始终可求解,并且英雄可以从最低层的左侧开始,始终可以通过最高层的任何向上举升离开地图?

为了值得,我正在使用Lua语言进行开发。非常感谢!

Answers:


14

您要做的是创建一个Graph,使每个节点都是一个电梯位置,并且它们之间的边缘意味着您可以在此处行走/提升。制作完图形后,您可以使用dfs / bfs来查看是否可以从起始节点到达终止节点。

在上面的示例中,我对图形进行了描绘。绿圈表示那里有电梯,绿线表示您可以在一个节点之间移动。

节点


谢谢,这非常有用!我应该在我的问题中更加强调地图也必须首先生成。我现在正在思考的是,是否可能更容易-而不是一遍又一遍地生成完全随机的举升/墙组合并检查其可解决性-让算法像英雄一样穿过房子,并且这种方式生成随机的电梯和门(例如,通过随机选择电梯距离和左右旋转以及增加墙体)。如“向右走0、4或8圈;创建一个向上的电梯,从1层上升到4层...”
Philipp Lenssen 2012年

@PhilippLenssen本质上,这是在图形上生成迷宫的“随机深度优先搜索”方法。
凯文·里德

5

您所拥有的与普通迷宫之间的区别仅在于,它在垂直方向上具有非相邻的连接。我认为您应该看的是基于图的迷宫生成算法。您只需要比普通的2D迷宫拥有更多的“相邻房间”或“可能的墙”,因为每对垂直对齐的地板网格单元都没有相邻的电梯。您可以将其建模为图形,其中添加确定的提升边缘会偶然删除其他可能的提升边缘。某些算法可能对此感到困惑,而其他算法则不会。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.