检查大网格上的放置重叠

时间:2013-07-20 19:54:30

标签: c++ grid placement

我正在制作一个游戏,您可以将连接器链接在矩形网格上。没有什么可以重叠。建筑物和连接器一旦进入电网就不能改变;他们可以随时被摧毁。定义网格使得左下角为(0,0)。

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

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

理想情况下,网格非常大(200x200或更高)但这意味着可能有数千个这样的对象和连接器。

当一个对象构建时,我需要检查它是否与任何东西重叠。如果我制作一个位网格,它的大小将超过300x300。如果我列出所有对象,我可以在一定限度内搜索,但我如何处理连接器?

看不到2位D位数组,我必须索引所有建筑物,然后按x坐标排序,然后按y坐标排序。我可以对连接器进行线性搜索,但这将是非常繁琐和痛苦的。

有人有建议吗? 附:我在C ++中这样做

1 个答案:

答案 0 :(得分:1)

除了300x300并不大,如果你真的想要你可以在一个字节内包装你的布尔值(但我不建议出于速度原因)你可以检查连接器是否与一个简单的函数相交:{{ 3}}

假设您已经检查过您的新建筑物与任何其他建筑物没有相交,那么需要检查的是新建筑物(区段)的一侧是否与您已经建立的任何连接器相交