在一个二维数组中随机生成簇(cluster)

3

我正在创建一个2D平铺游戏,并想知道在其中生成某种平铺类型的聚类的最佳方法。例如,假设我有一个表示地图的2D数组。草由0表示。

{{0, 0, 0, 0, 0, 0}
 {0, 0, 0, 0, 0, 0}
 {0, 0, 0, 0, 0, 0}
 {0, 0, 0, 0, 0, 0}
 {0, 0, 0, 0, 0, 0}
 {0, 0, 0, 0, 0, 0}}

现在,我想要做的是在我的数组中随机创建一组树(用1来表示)。我希望它看起来像这样:
{{0, 0, 0, 0, 0, 0}
 {0, 0, 0, 0, 0, 0}
 {0, 1, 1, 1, 0, 0}
 {0, 1, 1, 1, 1, 0}
 {0, 0, 1, 1, 1, 0}
 {0, 0, 1, 1, 0, 0}}

什么是完成这个任务的最佳方式?

你想要随机树还是预定义的树? - Ya Wang
不清楚问题在哪里。你卡在哪里了? - Oliver Charlesworth
问题是,你知道如何获取随机数吗?你需要多随机呢?请阅读这篇文章:https://dev59.com/V2sy5IYBdhLWcg3w6iNZ,然后在生成2D数组时,如果(x == 4),就执行2darray[i][j] = 1; 无论你如何生成2D数组,你都可以创建一些树。 - Ya Wang
你为什么不能简单地制作一大块地形,带有树林,并从其中随机位置和旋转采样呢?将其模糊成灰度图像,然后您可能可以使用随机阈值来获得不同的树木总密度。 - Mike Housky
您是否真的要特定地创建瓷砖集群,还是更愿意寻找生成这些瓷砖的自然分布的方法? - happymoep
显示剩余2条评论
1个回答

1
实现一个方法M,对于给定的位置集合S,它取它们相邻的位置N,但只有那些内部没有树木的位置; 在这些相邻的位置N中放置一些树木,并递归地调用自己,只传递放置了树木的相邻位置K(K是N的子集)。
现在触发整个过程:随机在一个点p上放置一棵树,并将仅包含位置p的集合/列表传递给方法M。
该算法保证您将生成一个聚类(即每两个树之间都由其他树连接的树集)。
确保您的递归在某个时候停止(您可以通过引入某些阈值或使用其他适当的启发式来实现此功能)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接