в общем имеются координаты персонажа
X =355108.875
Y =18228.2207
Z =179779.125
и координаты мобов их где то около 20 и они перемещаются
моб1- ближний
X =354697.6562
Y =18265.28516
Z =180078.6875
моб2 - дальний
X =356206.7812
Y =18145.33008
Z =178735.7969
и тд...
как реализовать дистанцию от координатов перса?
что бы к примеру ближнего било а дальнего нет или наоборот?
сумма и проценты не подходят бред какой то получается... не разбираюсь я в математике так что если можно поподробней
за ранее спасиб
1. AdryV - 13 Декабря, 2017 - 03:34:24 - перейти к сообщению
2. Kibor - 13 Декабря, 2017 - 04:20:14 - перейти к сообщению
Сначала пройтись по массиву sort, потом если нужен ближний берем координаты с массива с индексом 0, если дальнего с последним индексом.
А расстояние узнать - корень суммы квадратов катетов.
А расстояние узнать - корень суммы квадратов катетов.
3. AdryV - 13 Декабря, 2017 - 05:04:46 - перейти к сообщению
Kibor пишет:
Сначала пройтись по массиву sort, потом если нужен ближний берем координаты с массива с индексом 0, если дальнего с последним индексом.
вот с сортировкой будет проблема....
у меня около 5 разных массивов зависят от очередности
как то так
mob_kordX[15];
mob_kordY[15];
mob_kordZ[15];
mob_dist[15];
mob_xp[15];
mob_adres[15];
mob_id[15];
все они поочередно записываются с памяти игры
если я отсортирую массив mob_dist, то в итоге будет не совпадение номера массива с остальными массивами....
Kibor пишет:
А расстояние узнать - корень суммы квадратов катетов.
спасибо оказывается ничего сложного)))
CODE:
double X=355108.875;
double Y=18228.2207;
double Z=179779.125;
double X1=354697.6562;
double Y1=18265.28516;
double Z1=180078.6875;
double X2=356206.7812;
double Y2=18145.33008;
double Z2=178735.7969;
double t;
double t1;
loop()
{
t=sqrt((X-X1)*(X-X1)+(Y-Y1)*(Y-Y1)+(Z-Z1)*(Z-Z1));
t1=sqrt((X-X2)*(X-X2)+(Y-Y2)*(Y-Y2)+(Z-Z2)*(Z-Z2));
textout(0, 20, 20, format(t), 1);
textout(1, 20, 40, format(t1), 1);
sleep(1000);
}
double Y=18228.2207;
double Z=179779.125;
double X1=354697.6562;
double Y1=18265.28516;
double Z1=180078.6875;
double X2=356206.7812;
double Y2=18145.33008;
double Z2=178735.7969;
double t;
double t1;
loop()
{
t=sqrt((X-X1)*(X-X1)+(Y-Y1)*(Y-Y1)+(Z-Z1)*(Z-Z1));
t1=sqrt((X-X2)*(X-X2)+(Y-Y2)*(Y-Y2)+(Z-Z2)*(Z-Z2));
textout(0, 20, 20, format(t), 1);
textout(1, 20, 40, format(t1), 1);
sleep(1000);
}
кажись правильно считает)
4. Zireael - 13 Декабря, 2017 - 05:21:49 - перейти к сообщению
Цитата:
вот с сортировкой будет проблема....
у меня около 5 разных массивов зависят от очередности
у меня около 5 разных массивов зависят от очередности
Записать всё в двухмерный массив и его сортировать.
5. pashahous - 13 Декабря, 2017 - 07:11:19 - перейти к сообщению
Тебе же не обязательно сортировать весь массив по расстоянию. Тебе всего лишь надо найти наиближайшего моба к тебе. Примерно так
т.е. ты пробегаешся по массиву координат, расчитывая расстояния и сравнивая с последним расстоянием, если оно меньше, то перезаписываешь на новое посл расстояние, и так же перезаписываешь адрес хп айди последнего моба.
Надеюсь понятен принцип.
CODE:
posl_rast = 50; // тут максимальное расстояние
if (rast<posl_rast) //если растояние меньше посл растояния
{
xMob[1]=xMob[0]; // в ячйку 1 запишем последние кближайшие координ аты
yMob[1]=yMob[0];
//////// тут же можешь присваивать в отдельный переменные последние данные моба
хп_последние = хпМоба
ид_ последние = ид_моба
adr_posl=adr[k]; //записываем адрес последнего моба
posl_rast=rast; // запишем новое посл минимальное растояние
}
}
if (rast<posl_rast) //если растояние меньше посл растояния
{
xMob[1]=xMob[0]; // в ячйку 1 запишем последние кближайшие координ аты
yMob[1]=yMob[0];
//////// тут же можешь присваивать в отдельный переменные последние данные моба
хп_последние = хпМоба
ид_ последние = ид_моба
adr_posl=adr[k]; //записываем адрес последнего моба
posl_rast=rast; // запишем новое посл минимальное растояние
}
}
т.е. ты пробегаешся по массиву координат, расчитывая расстояния и сравнивая с последним расстоянием, если оно меньше, то перезаписываешь на новое посл расстояние, и так же перезаписываешь адрес хп айди последнего моба.
Надеюсь понятен принцип.
6. AdryV - 13 Декабря, 2017 - 07:21:08 - перейти к сообщению
Zireael пишет:
Записать всё в двухмерный массив и его сортировать.
а можно пример а то чет я сколько не пытаюсь сортировать двумерный массив не получается...
и все равно я не понимаю как оно будет перемещать массив?
к примеру:
mass[0][0]=1000;//расстояние привязано к определенному мобу в массиве mass[1][0]
mass[0][1]=1500;//расстояние привязано к определенному мобу в массиве mass[1][1]
mass[0][2]=100;//расстояние привязано к определенному мобу в массиве mass[1][2]
mass[0][3]=2000;//расстояние привязано к определенному мобу в массиве mass[1][3]
mass[1][0]=4567433;//адрес по которому находится моб mass[0][0]
mass[1][1]=4566433;//адрес по которому находится моб mass[0][1]
mass[1][2]=4568433;//адрес по которому находится моб mass[0][2]
mass[1][3]=4597433;//адрес по которому находится моб mass[0][3]
допустим оно отсортирует хотя у меня не получалось сортировать 2-е массивы
разве оно будет сразу перемещать 2 массива?
mass[0][0] и mass[1][0]
(Добавление)
pashahous пишет:
т.е. ты пробегаешся по массиву координат, расчитывая расстояния и сравнивая с последним расстоянием, если оно меньше, то перезаписываешь на новое посл расстояние, и так же перезаписываешь адрес хп айди последнего моба.
смысл понял спасибо буду пробовать
7. Zireael - 13 Декабря, 2017 - 07:30:30 - перейти к сообщению
Особо не тестил. Если не накосячил, то должно работать.
сортировка двумерного массива (Отобразить)
8. Kibor - 13 Декабря, 2017 - 07:32:04 - перейти к сообщению
Функция имеет две вариации.
Назначение второй вариации функции сортировка элементов в двух массивах координат X Y по расстоянию от указанных в функции координат.
Первый и второй параметры координаты XY относительно которых будет сортировка массивов координат по расстоянию.
Третий и четвертый указатели на массивы координат XY мобов (объектов).
Пятый число элементов в массивах начиная с первого которые будут участвовать в сортировке.
Короче отсортирует от ближних к дальним одной строчкой.
Назначение второй вариации функции сортировка элементов в двух массивах координат X Y по расстоянию от указанных в функции координат.
CODE:
sort(300, 200, #x[0], #y[0], 20);
Первый и второй параметры координаты XY относительно которых будет сортировка массивов координат по расстоянию.
Третий и четвертый указатели на массивы координат XY мобов (объектов).
Пятый число элементов в массивах начиная с первого которые будут участвовать в сортировке.
Короче отсортирует от ближних к дальним одной строчкой.
9. pashahous - 13 Декабря, 2017 - 07:52:18 - перейти к сообщению
Kibor пишет:
Функция имеет две вариации.
Назначение второй вариации функции сортировка элементов в двух массивах координат X Y по расстоянию от указанных в функции координат.
Первый и второй параметры координаты XY относительно которых будет сортировка массивов координат по расстоянию.
Третий и четвертый указатели на массивы координат XY мобов (объектов).
Пятый число элементов в массивах начиная с первого которые будут участвовать в сортировке.
Короче отсортирует от ближних к дальним одной строчкой.
Назначение второй вариации функции сортировка элементов в двух массивах координат X Y по расстоянию от указанных в функции координат.
CODE:
sort(300, 200, #x[0], #y[0], 20);
Первый и второй параметры координаты XY относительно которых будет сортировка массивов координат по расстоянию.
Третий и четвертый указатели на массивы координат XY мобов (объектов).
Пятый число элементов в массивах начиная с первого которые будут участвовать в сортировке.
Короче отсортирует от ближних к дальним одной строчкой.
Команда sort отсортирует координаты, а массив с адрессами структур мобов он то не тронет, и массив координат не будет соответствовать массиву адрессов, для дальнейшей работы.
Ему то нужно что бы массив координат соответствовал массиву адрессов структуры моба
AdryV пишет:
смысл понял спасибо буду пробовать
Так же ты можешь добавить проверку условия типа:Минимальное_расстояние_моба = 5;
Если минимальное_расстояние_моба<=5 то выйти ( ну и функция боя).
После поиска всех мобов в памяти, в твоем массиве первым может быть ближайший моб, и после расчета и проверки расстояния , если это так, не надо продолжать искать ближайшего моба, т.к. ты его уже нашел.
10. Kibor - 13 Декабря, 2017 - 15:53:39 - перейти к сообщению
pashahous пишет:
и массив координат не будет соответствовать массиву адрессов
Пузырьковая сортировка. Что угодно можно добавить в сортировку.
CODE:
int k=20;// количество объектов
double X, Y;//координаты сортировать относительно которых
double Xm[20]; Ym[20];//координаты мобов
int adr[20];//адреса мобов
double RaST_X, RaST_Y, ALL_RaST, ALL_RaST1;
double tmpK;
int tmpA;
for(int n=0; n<k; n++)
{
for(int n1=k-1; n1>n; n1--)
{
RaST_X=Xm[n1-1]-X; RaST_Y=Ym[n1-1]-Y; ALL_RaST=(RaST_X*RaST_X)+(RaST_Y*RaST_Y);
RaST_X=Xm[n1]-X; RaST_Y=Ym[n1]-Y; ALL_RaST1=(RaST_X*RaST_X)+(RaST_Y*RaST_Y);
if (ALL_RaST>ALL_RaST1)
{
tmpK=Xm[n1-1];
Xm[n1-1]=Xm[n1];
Xm[n1]=tmpK;
tmpK=Ym[n1-1];
Ym[n1-1]=Ym[n1];
Ym[n1]=tmpK;
tmpA=adr[n1-1];//Тут переписываем адреса
adr[n1-1]=adr[n1];
adr[n1]=tmpA;
}
}
}
double X, Y;//координаты сортировать относительно которых
double Xm[20]; Ym[20];//координаты мобов
int adr[20];//адреса мобов
double RaST_X, RaST_Y, ALL_RaST, ALL_RaST1;
double tmpK;
int tmpA;
for(int n=0; n<k; n++)
{
for(int n1=k-1; n1>n; n1--)
{
RaST_X=Xm[n1-1]-X; RaST_Y=Ym[n1-1]-Y; ALL_RaST=(RaST_X*RaST_X)+(RaST_Y*RaST_Y);
RaST_X=Xm[n1]-X; RaST_Y=Ym[n1]-Y; ALL_RaST1=(RaST_X*RaST_X)+(RaST_Y*RaST_Y);
if (ALL_RaST>ALL_RaST1)
{
tmpK=Xm[n1-1];
Xm[n1-1]=Xm[n1];
Xm[n1]=tmpK;
tmpK=Ym[n1-1];
Ym[n1-1]=Ym[n1];
Ym[n1]=tmpK;
tmpA=adr[n1-1];//Тут переписываем адреса
adr[n1-1]=adr[n1];
adr[n1]=tmpA;
}
}
}