我的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 边界。