C++在2d映射中搜索占用的字段

noi*_*cat 3 c++ search map

我的rts中有一张二维地图.在地图上有一些单位.我想检查是否有任何单位在另一个范围内.单位范围以字段给出.看图像:

范围

在图片中,没有单位(红色,蓝色,绿色)可以互相攻击.我想,例如检查,例如是否有任何蓝色范围内的单位.答案是不.我知道蓝色的范围和位置,我也知道其余的位置.我也知道地图xy是否被占用.我怎么检查这个?

Ker*_* SB 5

你要遍历所有的点(x + i, y + j)在处理您的装置(x, y),使得

|i| + |j| <= R ,
Run Code Online (Sandbox Code Playgroud)

R攻击范围在哪里?(这是L 1 -metric中的磁盘.)所以,像这样:

for (i = -R; i <= +R;  ++i)
{
    jRange = R - abs(i);
    for (j = -jRange; j <= +jRange; ++j)
    {
        // access (x + i, y + j)
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以通过展开将外循环减半:

for (i = 0; i <= R; ++i)
{
    jRange = R - i;
    for (j = -jRange; i <= +jRange; ++j)
    {
        // access (x - i, y + j)
        // if (i > 0) access (x + i, y + j)
    }
}
Run Code Online (Sandbox Code Playgroud)

正如@Alink所说,你必须以某种方式处理地图边界.