【问题标题】:Need an algorithm to randomly generate groups on a hexagon grid需要一种算法在六边形网格上随机生成组
【发布时间】:2022-01-05 07:50:44
【问题描述】:

我根据本文中的信息创建了一个六边形网格 https://www.redblobgames.com/grids/hexagons/

到目前为止,它是这样的:

我想将此网格划分为类似于以下的组:

我想在网格中有间隙,但我还需要连接所有组。本质上,我希望能够从组中的任何六边形移动到组中的任何其他六边形。

我的第一个想法是为每个组选择一个随机图块,然后为每个组添加一个相邻图块,直到一个组接触另一个组,然后可能会减少向该组添加另一个图块的机会。我对此的主要担心是,我最终可能会得到 2 个相互接触但与其他组没有连接的组。

任何想法都值得赞赏。如果您需要更多信息,请告诉我。

【问题讨论】:

  • 建议:首先确定哪些十六进制将保持空白。为此,请选择一些起始的空白十六进制,并以一些概率从它们扩展。如果概率足够低,则剩余的电网将有合理的机会连接。如果剩余的网格未连接,请重置并重试。
  • 然后,为每个区域随机选择一个瓦片,并扩展它们直到所有非空白网格都被填满。
  • PS:我个人不打算提供比我的两个 cmets 更精确的答案,但如果你最终得到了一个可行的算法,我很想看看;请注意,您可以发布自己问题的答案。
  • 我将首先编写一个算法来删除瓷砖。然后应该很容易填充所有剩余的瓷砖。我已经编写了一个简单的函数来删除一些随机图块。我认为我的下一步是删除相邻的瓷砖。

标签: random data-structures game-development procedural-generation hexagonal-tiles


【解决方案1】:

我对此的解决方案是首先移除边缘瓷砖。我通过创建一个随机选择与边缘相邻的图块并将其移除的循环来做到这一点。这会随机重复多次。我这样做了几次,然后删除了内部瓷砖组。我首先选择一个不与边缘相邻的随机图块并将其放入一个组中,然后选择一个不与边缘相邻的相邻图块并随机重复次数。完成之后,我会得到一些看起来不错的地图。

我唯一需要考虑的另一件事是,有时会创建“岛屿”,这意味着 1 个或几个图块没有连接到地图的其余部分。我通过创建一个函数来创建相邻图块组并删除除最大组之外的所有图块来解决此问题。

这是一个例子:

【讨论】:

    猜你喜欢
    • 2022-08-19
    • 2014-01-11
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多