算法在2D tilemap中生成随机路径

时间:2017-07-18 07:56:55

标签: algorithm path 2d tiles procedural

我需要在2D tile map中生成一个简单的随机路径。输入参数是多个步骤。条件是每个瓷砖在路径上只有两个相邻的瓷砖,所以没有房间,没有十字路口。

我在网上寻找一些解决方案,我没有找到这样的东西。 Drunkard算法使房间和其他一切都是迷宫生成算法。也许我没有用适当的关键词搜索。

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

编辑:添加样本图片

示例路径:

img

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

改进版本的方法是使用特定的目标图块作为路径的末尾以及最小和最大的步骤,但现在不是那么重要。

谢谢你的任何想法。

3 个答案:

答案 0 :(得分:0)

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

尝试并以相对较快的速度减慢计算速度,以便在很长一段时间内跨越这一点,以引入更多随机性。

或者,在2D地图上执行DFS之类的遍历,并将每个唯一路径存储在哈希映射或集合中,并将唯一数字作为键添加到此映射中,这是预处理部分,现在随机选择一个唯一的从一组所有可能的解决方案中获取密钥,将其从集合中删除,如果您需要另一个随机唯一路径,只需从剩余的可用路径中随机选择一个。

答案 1 :(得分:0)

  1. 创建2D地图

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

  2. 清除它
  3. 添加N随机障碍

    例如地图中填充的圆圈

  4. 使用A *查找最短路径

    你可以使用我的...... C++ A* example

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

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

答案 2 :(得分:0)

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

tag-4.2.23.1

在您的情况下,您应该对步骤2进行一些更改:您应该检查相邻的瓦片本身及其所有邻居(当然,currentTile除外)是否不在路径中。这可能会使您的算法可能多次陷入死锁,但是对于像您的图片一样小的路径,重复几次就不会成为问题。