动态迷宫突变

时间:2010-12-16 14:10:56

标签: algorithm maze

我有创造另一个迷宫游戏的想法。然而,有一个关键的区别:迷宫在游戏中即时更改。当我想到这个问题时,我会想到以下限制:

  1. 迷宫中有一条永不改变的主要路线
  2. 主要路线是通往终点的唯一路线
  3. 迷宫突变不应阻止路径返回主路径
  4. 控制(影响游戏难度)也很好:

    1. 在单个突变期间有多少迷宫被改变
    2. 可选择禁用限制#3(即玩家可以在迷宫中被阻挡一段时间)
    3. 编辑: 问题是:你能为所描述的迷宫生成/变异建议一个算法(或给出你的想法),这不会违反给定的限制吗?

3 个答案:

答案 0 :(得分:1)

你可以:

  1. 随机阻止路径(或使用一些偷偷摸摸的标准)。

  2. 扫描迷宫,查看是否已将其划分为2个不再连接的区域。

  3. 如果断开连接,只要它与两个区域相邻,就可以随意敲墙。

  4. 如果您的迷宫在任意两点之间只有一条路径,则第2步将始终拆分迷宫,因此总是需要#3。

答案 1 :(得分:0)

制作一个图表,连接迷宫的所有细胞和它们之间的可步行连接。要修改迷宫,首先选择一个随机墙来击倒,这会在图形中生成新的边缘。然后在图中找到一个包含该边的循环,并在该循环中删除一个随机的非主路径边,这将在其他地方竖立一条边。

此算法确保如果所有单元格在开始时都可以访问,它们将保持不变。你可能想要这个功能,所以你不会被困。

答案 2 :(得分:0)

这可能非常简单。使用standard depth-first-search algorithm生成迷宫。在列表中存储从开始到退出形成(唯一)路径的单元格列表。当您决定要改变迷宫时,请执行以下操作:

  1. 将整个迷宫重置为默认状态(所有墙壁都在适当位置),但关键路径上的任何单元格除外,并且可选地,还有一些单元格位于玩家当前位置的视线内。
  2. 从头开始重新执行广度优先搜索算法,只需进行一项修改:在选择要探索的未访问邻居时,更喜欢已删除墙的边缘。
  3. 第二步中的修改将确保算法首先探索现有路径,然后从那里添加旁路等。如果你不想要保留关键路径,甚至没有必要 - 你可以重新生成整个迷宫,除非用户站立,它仍然有效。

    认为这应该始终以与原始算法相同的方式生成一个有效的树,但我不能100%确定保留用户周围的单元格的含义,这可能是不要走在关键的道路上。我很肯定,重新配置的迷宫总是可以从用户所在的位置解决。

    这也是一个非常巧妙的想法。我喜欢在用户不看的地方将迷宫重新排列的想法。如果您是第一人称这样做的话,甚至可以使用相机视图在用户不看的时候更换用户背后的墙壁!