我正在创建一个 2d 瓷砖游戏,想知道在其中生成特定瓷砖类型的集群的最佳方法是什么。例如,假设我有一个二维数组,它是我的 map 。草用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}}
执行此操作的最佳方法是什么?
最佳答案
实现一个方法 M,该方法执行以下操作:对于给定的一组位置 S,它采用它们的相邻位置 N,但仅采用那些自身内部没有树的位置;将树放在这些相邻位置 N 的一些中,并调用自己递归地只传入它放置树的相邻位置 K(K 是 N 的子集)。
现在触发整个事情:在一个点 p
中随机放置一棵树,然后调用 M 将位置 p
的集合/列表传递给方法M.
此算法保证您将生成一个集群(我的意思是一组树,其中每两棵树都由其他树连接)。
确保您的递归在某个点停止(您可以通过引入特定阈值或使用其他适当的启发式方法来实现这一点)。
关于java - 在二维数组中随机生成簇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28421373/