0

我正在开发一款游戏,您可以将通过连接器连接的建筑物放置在矩形网格上。没有什么可以重叠。建筑物和连接器一旦在网格上就不能改变;他们可以随时被摧毁。网格被定义为左下角为 (0,0)。

建筑物是矩形,每条边可以有 1 - 4 个单位长;还有一个5x5的正方形。

连接器具有起点和终点。它们不能重叠,并且是 1 个单位宽。他们可以直线编辑:(左,右,上和下)并在任何地方弯曲 90 度。无限长度。

理想情况下,网格应该很大(200x200 或更大),但这意味着可能有成千上万个这样的对象和连接器。

当一个对象被构建时,我需要检查它是否与任何东西重叠。如果我制作一个比特网格,它的大小将超过 300x300 大得令人望而却步。如果我列出所有对象,我可以在一定范围内搜索,但我将如何处理连接器?

看到二维位数组是不可能的,我必须索引所有建筑物,并按 x 坐标排序,然后按 y 坐标排序。我可以对连接器进行线性搜索,但这会非常乏味和痛苦。

有人有建议吗?PS我在C++中做这个

4

1 回答 1

1

除了 300x300 不大,如果你真的想要,你可以将布尔值打包成一个字节内的位(但我不建议出于速度原因),你可以检查连接器是否与一个简单的函数相交:https://stackoverflow .com/a/565282/2436175

假设您已经检查过您的新建筑没有与任何其他建筑相交,那么剩下要检查的是您的新建筑(段)的侧面是否与您已有的任何连接器相交。

于 2013-07-20T20:34:05.053 回答