基于网格的地牢,房间大小随机



我正在制作一个游戏,其中级别是基于网格的。首先,我有矩形MxM单元格。然后我必须在这个矩形内放置房间。房间是另一个矩形,它是AxB单元,其中2<=A、 B<=4.此外,每行放置N个房间,每列放置N个。他们应该填满所有的空间,他们之间不能有空位。换句话说,我必须感觉矩形和其他矩形之间不会有空格,它们将形成一个N行N列的网格。

我做了什么:我以房间左上角的形式存储房间信息,计算它,然后根据房间和邻居的角放置房间。要做到这一点:

  1. 在房间上划分网格3x3
  2. 在3x3个房间中,每个房间都定义了必须楼层的区域(2x2平方,我们称之为红色区域(
  3. 在每个房间计数的循环中,它的邻居x和y角的位置不会穿过任何强制性的楼层。为此:a.获取当前房间及其邻居的红色区域。在它们之间的某个地方设置一个角落,确保房间的尺寸在上面的范围内。b.当无法设置随机拐角时,解决冲突。例如,如果上面房间的x位置不等于我们的房间,那么我们就不能把房间之间的水平墙放在随机的y位置,因为在这种情况下,这些房间会相互重叠
  4. 将角落信息转换为房间本身的其他内容

那么,问题出在哪里?我的代码中有很多if语句和拐杖,变得非常不可读和庞大,几乎不可能测试和发现错误。我使用的方法似乎有效,但不可能控制它的工作方式或不工作方式。

另一个问题是,我想对它的外观有更多的控制权。网格必须是有趣的,这意味着相邻房间的大小最好不相同。有一个这样的网格的例子(网格((红色区域是灰色的(,这还不错。

有什么替代方案可以解决这个问题吗?在其他问题中,我看到了很多类似的解决方案,但它们都不假设有固定数量的行和列。给我推荐一些我没有找到的文章,可能是专门针对这个主题的文献,或者指明前进的方向,找到一个有效的解决方案。

生成包含房间的网格的传统方法是使用二进制空间分区树。

该方法的一点是,它通常生成的网格密度比您的示例低。您也许可以修改一些BSP示例代码,使映射更加密集。

另一种可能的方法是首先生成矩形(可能沿着间隙的两条边有一个边界(,然后尝试使用矩形打包算法对它们进行打包。前面的答案有几种潜在的打包算法。

相关内容

  • 没有找到相关文章

最新更新