Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (1): [1]   

> Без описания
AdryV
Отправлено: 13 Декабря, 2017 - 11:34:24
Post Id



Пользователь
Специалист


Покинул форум
Сообщений всего: 449
Дата рег-ции: Май 2016  
Репутация: 11




в общем имеются координаты персонажа
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
и тд...
как реализовать дистанцию от координатов перса?
что бы к примеру ближнего било а дальнего нет или наоборот?
сумма и проценты не подходят бред какой то получается... не разбираюсь я в математике так что если можно поподробней
за ранее спасиб Подмигивание
 
 Top
Kibor
Отправлено: 13 Декабря, 2017 - 12:20:14
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8094
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Сначала пройтись по массиву sort, потом если нужен ближний берем координаты с массива с индексом 0, если дальнего с последним индексом.
А расстояние узнать - корень суммы квадратов катетов.
 
 Top
AdryV
Отправлено: 13 Декабря, 2017 - 13:04:46
Post Id



Пользователь
Специалист


Покинул форум
Сообщений всего: 449
Дата рег-ции: Май 2016  
Репутация: 11




 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);
}

кажись правильно считает)
 
 Top
Zireael
Отправлено: 13 Декабря, 2017 - 13:21:49
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4394
Дата рег-ции: Нояб. 2017  
Репутация: 580




 Цитата:
вот с сортировкой будет проблема....
у меня около 5 разных массивов зависят от очередности

Записать всё в двухмерный массив и его сортировать.
 
 Top
pashahous
Отправлено: 13 Декабря, 2017 - 15:11:19
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 24
Дата рег-ции: Февр. 2016  
Репутация: 2




Тебе же не обязательно сортировать весь массив по расстоянию. Тебе всего лишь надо найти наиближайшего моба к тебе. Примерно так

CODE:
posl_rast = 50; // тут максимальное расстояние
if (rast<posl_rast) //если растояние меньше посл растояния
{
xMob[1]=xMob[0]; // в ячйку 1 запишем последние кближайшие координ аты
yMob[1]=yMob[0];
//////// тут же можешь присваивать в отдельный переменные последние данные моба
хп_последние = хпМоба
ид_ последние = ид_моба
adr_posl=adr[k]; //записываем адрес последнего моба
posl_rast=rast; // запишем новое посл минимальное растояние
}
}

т.е. ты пробегаешся по массиву координат, расчитывая расстояния и сравнивая с последним расстоянием, если оно меньше, то перезаписываешь на новое посл расстояние, и так же перезаписываешь адрес хп айди последнего моба.

Надеюсь понятен принцип.

(Отредактировано автором: 13 Декабря, 2017 - 15:12:52)

 
 Top
AdryV
Отправлено: 13 Декабря, 2017 - 15:21:08
Post Id



Пользователь
Специалист


Покинул форум
Сообщений всего: 449
Дата рег-ции: Май 2016  
Репутация: 11




 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 пишет:
т.е. ты пробегаешся по массиву координат, расчитывая расстояния и сравнивая с последним расстоянием, если оно меньше, то перезаписываешь на новое посл расстояние, и так же перезаписываешь адрес хп айди последнего моба.

смысл понял спасибо буду пробовать
 
 Top
Zireael
Отправлено: 13 Декабря, 2017 - 15:30:30
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4394
Дата рег-ции: Нояб. 2017  
Репутация: 580




Особо не тестил. Если не накосячил, то должно работать.
сортировка двумерного массива (Отобразить)

(Отредактировано автором: 13 Декабря, 2017 - 15:34:37)

 
 Top
Kibor
Отправлено: 13 Декабря, 2017 - 15:32:04
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8094
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Функция имеет две вариации.
Назначение второй вариации функции сортировка элементов в двух массивах координат X Y по расстоянию от указанных в функции координат.
CODE:
sort(300, 200, #x[0], #y[0], 20);


Первый и второй параметры координаты XY относительно которых будет сортировка массивов координат по расстоянию.
Третий и четвертый указатели на массивы координат XY мобов (объектов).
Пятый число элементов в массивах начиная с первого которые будут участвовать в сортировке.

Короче отсортирует от ближних к дальним одной строчкой.
 
 Top
pashahous
Отправлено: 13 Декабря, 2017 - 15:52:18
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 24
Дата рег-ции: Февр. 2016  
Репутация: 2




 Kibor пишет:
Функция имеет две вариации.
Назначение второй вариации функции сортировка элементов в двух массивах координат X Y по расстоянию от указанных в функции координат.
CODE:
sort(300, 200, #x[0], #y[0], 20);


Первый и второй параметры координаты XY относительно которых будет сортировка массивов координат по расстоянию.
Третий и четвертый указатели на массивы координат XY мобов (объектов).
Пятый число элементов в массивах начиная с первого которые будут участвовать в сортировке.

Короче отсортирует от ближних к дальним одной строчкой.


Команда sort отсортирует координаты, а массив с адрессами структур мобов он то не тронет, и массив координат не будет соответствовать массиву адрессов, для дальнейшей работы.
Ему то нужно что бы массив координат соответствовал массиву адрессов структуры моба

 AdryV пишет:
смысл понял спасибо буду пробовать
Так же ты можешь добавить проверку условия типа:
Минимальное_расстояние_моба = 5;
Если минимальное_расстояние_моба<=5 то выйти ( ну и функция боя).
После поиска всех мобов в памяти, в твоем массиве первым может быть ближайший моб, и после расчета и проверки расстояния , если это так, не надо продолжать искать ближайшего моба, т.к. ты его уже нашел.

(Отредактировано автором: 13 Декабря, 2017 - 15:53:15)

 
 Top
Kibor
Отправлено: 13 Декабря, 2017 - 23:53:39
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8094
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




 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;
}
}
}
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы и решение проблем »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by