【问题标题】:Pseudo random for procedural generation用于程序生成的伪随机
【发布时间】:2013-12-19 09:25:41
【问题描述】:

我正在使用程序地图制作游戏,我想应用这种方式:

Procedural Island Generation

它很容易实现,结果正是我想要的。

我唯一坚持的部分是第 3 部分,当我必须绕圈并随机将水变为陆地时,当水接触到大量陆地时,水变为陆地的机会更高。

我试过这样做:

if (rand() % 10 < 3 + countAdjacentTile(x, y, LAND))

countAdjacentTile 函数只计算用 x 和 y 坐标指定的图块周围标记为第三个参数的图块数。

因此,如果周围没有土地,水瓦仍然有机会变成土地瓦,如果周围有土地,机会就更高。

但它给了我这个:

虽然它在我之前给出的链接上给出了这个:

我想拥有相同种类的分支。你知道这个算法的名称吗?我读过这个: Exponential Distribution 但这对我来说不是很健谈...

感谢您到目前为止的阅读。

【问题讨论】:

  • 您是否仔细检查过您的 countAdjacentTile 函数是否返回了您所期望的结果?
  • 是的,我得到了很好的返回值。
  • 如果您使用的是 C++11 编译器,您可能会考虑使用 random 标头中较新的随机生成器之一。 rand 不是最好的,将它与 mod 混合往往会使情况变得更糟。
  • 你玩过概率吗?

标签: c++ algorithm random procedural-generation


【解决方案1】:

countAdjacentTile() 是如何工作的?它是计算对角线上的瓷砖,还是只计算 4 个邻居?如果您计算对角线,请不要这样做。还可以尝试调整常量 - 10 和 3,如果没有此代码,很难说哪个值会好,只需检查一些组合并选择最佳结果。

【讨论】:

  • 做完这个,我玩了很多概率来找到不同种子的好东西:)。
【解决方案2】:

您可能想编写一个函数,根据到岛中心的距离给出密度。然后使用此密度值对定义元素是土地还是水的阈值进行加权。

【讨论】:

    猜你喜欢
    • 2011-11-03
    • 2015-08-07
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 2010-10-05
    • 2014-05-18
    • 1970-01-01
    相关资源
    最近更新 更多