Привет, так что положите так. У нас есть 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