我的rts中有2d map 。在 map 上有一些单位。我想检查另一个范围内是否有任何单位。单位范围在字段中给出。见图片:

在图片上,任何单位(红色,蓝色,绿色)都无法互相攻击。我想检查例如蓝色范围内是否有任何单位。答案是不。我知道蓝色的范围和位置,我也知道其他位置。我也知道 map xy是否被占用。我该如何检查?

最佳答案

您想遍历单元周围所有点(x + i, y + j)(x, y),以便

|i| + |j| <= R ,

其中R是攻击范围。 (这是L1度量标准中的磁盘。)因此,如下所示:
for (i = -R; i <= +R;  ++i)
{
    jRange = R - abs(i);
    for (j = -jRange; j <= +jRange; ++j)
    {
        // access (x + i, y + j)
    }
}

或者,您可以通过展开以下内容将外循环减半:
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)
    }
}

正如@Alink所说,您将不得不以某种方式处理 map 边界。

09-10 04:07