嗨,好吧,就這樣吧。 我們有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