嗨,好吧,就这样吧。 我们有12名球员,我想要做的就是找到最接近的球员。找到xyz之间的最小距离
我已经在下面写了一些代码;我尝试的两个版本(相信我,他们已经多了很多,可以写一本圣经现在)
/*int client::closestEnemy()
{
for(u32 i = 0; i<12; i++)
{
DbgPrint("i: %i\n", i);
u32 index = 0;
if(!p[i].exist() || !p[i].alive() || p[i].team() == 3 || i == s.index)
continue;
for(u32 o = 0; o<12; o++)
if(vec.distance(*pos(), *p[i].pos()) <= vec.distance(*pos(), *p[o].pos()) || vec.distance(*pos(), *p[i].pos()) == vec.distance(*pos(), *p[o].pos()))
index++;
DbgPrint("PLAYER %s INDEX = %i\n", p[i].readName(), index);
if(index>10)
return i;
index = 0;
}
return -1;
}*/
int client::closestEnemy()
{
float distacnes[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
u32 index = 0;
for(u32 i = 0; i<12; i++)
if(p[i].exist() || p[i].alive() || p[i].team() != 3 || i != s.index)
distacnes[i] = vec.distance(*pos(), *p[i].pos());
else
continue;
for(u32 i = 0; i<12; i++)
if(distacnes[i]<distacnes[i+1])
index++;
DbgPrint("Score = %i\n", index);
if(index>11)
return index;
return -1;
}
什么我做的是简单地增加1指数当过另一个客户距离较大然后我的。
现在第一个是最好的选择,但有时不会创建足够高的索引,这使得零感,因为至少有一个客户端必须有一个较小的距离,然后其他人。
是否已确认在第一循环(任一版本)这个漫长的条件,做你想要它做什么?从你对这个问题的描述中,我不知道为什么有一半的这些条件存在,也许我只是缺乏背景。 – delnan
当你通过时,'距离'是否包含正确的值?如果是这样,只需遍历存储最小值(从无穷远处开始,因此第一个始终最小)和它对应的索引的列表。对不起,如果我错过了一些什么 –
是的抱歉,我在这里很沉闷。我的声明好,距离也是。 – TomSwoobs