【问题标题】:algorithm to generate random path in 2D tilemap在 2D tilemap 中生成随机路径的算法
【发布时间】:2017-07-18 07:56:54
【问题描述】:

我需要在 2D 瓦片地图中生成一个简单的随机路径。输入参数是多个步骤。条件是每个图块在路径上只有两个相邻的图块,因此没有房间也没有十字路口。

我在网上寻找一些解决方案,但没有找到类似的东西。醉汉算法制造房间,其他一切都是迷宫生成算法。也许我没有按正确的关键字搜索。

重要的是随机性,因为我每次都需要完全不同的路径。

编辑:添加示例图片

样本路径:

主要特点是每个图块只有 2 个邻居。

改进后的版本将使用特定的目标图块作为路径的末端以及最小和最大步数,但现在这并不重要。

感谢您的任何想法。

【问题讨论】:

  • 为什么不添加一些地图示例,以便我们可以看到您正在处理的内容...
  • 用简单的方法添加了答案...

标签: algorithm path 2d tiles procedural


【解决方案1】:
  1. 创建 2D 地图

    所以创建地图大小的二维数组并通过例如0 清除它

  2. 添加N随机障碍物

    例如地图中的实心圆圈

  3. 使用 A* 求最短路径

    你可以用我的……C++ A* example

如果您想要更复杂的东西,那么您可以创建随机地形并使用 A* 来找到最短路径(而上去会比下山花费更多......)。要创建随机地形,您可以使用:

也可以用于随机地图生成...

【讨论】:

  • 哦,那很酷,障碍可以解决麻烦...谢谢!
  • 改进思路——创建迷宫,使用A*解决,使用路径
【解决方案2】:

将其分解为子部分,您必须做出的唯一随机决定是是否在路径上的给定点向左/向右/向上/向下而不形成交叉点,这可以使用任意生成机器的时间戳,例如,检查天气最后一位数字是偶数还是奇数,然后左转偶数,右转奇数,向上取模 4 等,因此每次都给你一个相当随机的路径。

尝试以相对较快的速度减慢计算速度以跨越大量时间,以引入更多随机性。

或者,在 2D map 上做一个类似 DFS 的遍历,并将每个唯一的路径存储在一个 hash map 或 set 中,并在这个 map 中添加一个唯一的数字作为 key,这是预处理部分,现在随机选择一个唯一的从一组所有可能的解决方案中提取密钥,将其从集合中删除,如果您需要另一个随机唯一路径,只需从剩余的可用路径中随机选择一个。

【讨论】:

    【解决方案3】:

    我正在为类似流氓的地牢爬行者创建一个随机地图生成器,我的入口到出口路径的方法是这样的:

    1. Randomly select a tile as the dungeon entrance. Add it to the path and set it as currentTile
    2. Randomly pick a neighboring tile of currentTile that's not already in the path. Add it to the path and set it as currentTile.
    3. Repeat step 2 until your path reaches the desired length. If a deadlock occurs, restart from 1.
    

    在您的情况下,您应该稍微更改第 2 步:您应该检查相邻的瓦片本身及其所有邻居(当然,除了 currentTile)不在路径中。这可能会导致您的算法多次陷入死锁,但对于像您图片中的路径一样小的路径,重复几次不会有问题。

    【讨论】:

      猜你喜欢
      • 2015-01-05
      • 2016-02-28
      • 1970-01-01
      • 2020-01-29
      • 1970-01-01
      • 2012-08-11
      • 2011-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多