Пьяная походка - Drunked walking / вычисление точки встречи

Разработка новых функций.

Модератор: 4epT

Yoggy
Начинающий
Сообщения: 17
Зарегистрирован: Сб апр 07, 2007 12:10 pm

Сообщение Yoggy »

Взял то что у меня было прикреплено в этой теме пару страниц назад. Попытался ещё раз разобраться и добавить изменяемую дистанцию атаки. Старых записей не сохранил, так что у меня там было в прошлый раз пытался понять очень долго :o

Потом каким-то чудом понял то что у меня там было и вроде как сделал то что хотел. Плюс - добавил очень кривенький графический вывод информации.
Синяяя точка - игрок
Красная точка - моб
Бардовая точка - место куда моб движется
в конце пути на конце синей и красной линии появляются чёрные точки - это именно те места где будут моб и игрок когда игрок может начинать атаку. Эти чёрные точки рисуются на случай если рисуемые линии немного выйдут за свои пределы, чтоб не путаться.
И ещё - если моб доходит то точки назначения - то рисуется его путь дальше, по той-же самой траектории

Потом выложу теоретическое обоснование
Вложения
RO walk calc.rar
v 0.2.0.0
(192.25 КБ) 209 скачиваний
Yoggy
Начинающий
Сообщения: 17
Зарегистрирован: Сб апр 07, 2007 12:10 pm

Сообщение Yoggy »

краткая теория :)
- картинка с пояснением той длинной и страшной формулы
Изображение

- код программы с комментраиями что к чему и зачем

насчёт этого алгоритма есть один большой минус - если игрок не успевает перехватить моба по пути, и тот благополучно успевает дойти до точки назначения - в формуле выходит отрицательное число под корнем. поэтому нужно заранее определить, успеет ли игрок перехватить моба или нет.
Я думал над этим, но тот способ что у меня там используется не всегда подходит, в некоторых случая продолжают вылетать эксепшены.
можно конечно использовать try и в случае эксепшена считать что игрок дойти не успеет - но это как-то непрофесионально


короче вопрос - успеет ли моб добежать до точки назначения? или его по пути успеет начать атаковать бот? найти это как?
Вложения
teorija.txt
(13.72 КБ) 192 скачивания
Аватара пользователя
Click
Разработчик
Сообщения: 1564
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Сообщение Click »

интересно просматривать этот топик, но чем дальше, тем больше мне кажется, что нуно нанять профессионального математика :(
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

Yoggy
Вау.Спасибо.

Правда в описании не встретил проверки на то, что мы можем війти за конечную точку. а значит точка встреси и будет конечной точкой моба.
Yoggy
Начинающий
Сообщения: 17
Зарегистрирован: Сб апр 07, 2007 12:10 pm

Сообщение Yoggy »

теперь вроде правильно определяется - надо идти сразу на конечную точку моба или надо перехватывать его в пути.
а ещё теперь картинка выводится без моргания :D
заодно сразу в исходниках дописал в коментах то что было отдельно в том текстовом документе


тут я ещё одну проблему нашёл :(
допустим координаты мгрока 2 , 14
координаты моба 24 , 12
моб идёт в точку 8 , 12
скорость предположим у обоих 1
дистанция атаки - 1
и благодаря всему этому мы получаем "invalid floating point operation" и ничего не считается

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

если теперь скорость одного из них чуть увеличить - то всё считается и рисуется и всё работает!. Я даже отловил условия возникновения ошибки -
-одинаковая скорость
-моб движется строго горизонтально (или строго вертикально)
и вот теперь я смотрю на ту формулу и мне страшно даже попытаться понять как там при этих условиях может получиться орицитальное число под корнем
Вложения
RO walk calc.rar
0.3.0.0
(223.03 КБ) 197 скачиваний
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

Yoggy
Хм.... нужно будет попробывать засунуть в кору и посмотреть.

Правда, признаюсь по секрету, кору Я не запускал уже полтора года :)
Yoggy
Начинающий
Сообщения: 17
Зарегистрирован: Сб апр 07, 2007 12:10 pm

Сообщение Yoggy »

kLabMouse писал(а):Yoggy
Хм.... нужно будет попробывать засунуть в кору и посмотреть.

Правда, признаюсь по секрету, кору Я не запускал уже полтора года :)
Да я и сам уже в РО почти не играю (и бота последний раз запускал давненько), просто раз уж тут есть шанс как-то помочь благому делу то в свободное время можно и тыковку почесать, подумать.

Ну и вот недавно просматривал топики в "идеях" и наткнулся на эту тему. Решил до конца это дело довести, а потом пусть кто захочет всё это на перл портирует и в опенкору добавляет
а перл я не знаю так что с добавлением этого помочь не смогу :roll:

(правда с учётом этих появляющихся ошибок и исключений - явно видно что моих универских знаний математики и физики тут не хватает, придётся думать кому-то ещё)


источник той предидущей проблемы я нашёл - оказывается при описанных мною условиях происходит не извелкание корня из отрицательного числа, а деление на ноль (там в формуле один значёк деления есть, и вот он единственный вызывает такую бяку). Что с этим делать я как-то пока не сообразил. Насколько я помню тут надо считать предел, с учётом что всё то что в знаменателе стремится к нулю. И добавлять ещё всякие проверки в коде, короче не факт что это сработает, и скорее всего есть более подходящее решение.

Я денька на два пропаду, заодно подумаю что с этим сожно сделать..

И ещё. Скорость моба не должна быть равной нулю, а то получается непрятный казус в виде внеочередного деления на ноль. Ну тут всё просто - делаем соответсвующую проверку и с учётом дистанции атаки считаем точку в которой игрок уже сможет напасть на стоящего на исходной позиции моба.
Ну вот хотя-бы вот эта проблема решится без проблем и мозголомства :)


И ещё И ещё. А если игроку придётся идти не по ровной поверхности, а по полю с деревьями/кустами которые ему ещё придётся обходить? Он тогда по времени не успеет догнать моба, и придёт с явным опозданием. Я не знаю как там это сейчас устроено в опенкоре, но наверное он ещё раз просчитает путь до моба и опять попытается его догнать, так?
И аналогично если моб дошёл до точки назначения, он же не будет стоять на месте а скорее всего попытается пройтись ещё куда-нибудь. В итоге бот придёт к той точке где он хотел атаковать моба, а тот уже свалил...
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

Yoggy писал(а):И ещё И ещё. А если игроку придётся идти не по ровной поверхности, а по полю с деревьями/кустами которые ему ещё придётся обходить? Он тогда по времени не успеет догнать моба, и придёт с явным опозданием. Я не знаю как там это сейчас устроено в опенкоре, но наверное он ещё раз просчитает путь до моба и опять попытается его догнать, так?
И аналогично если моб дошёл до точки назначения, он же не будет стоять на месте а скорее всего попытается пройтись ещё куда-нибудь. В итоге бот придёт к той точке где он хотел атаковать моба, а тот уже свалил...
Давай исключим то что нужно ходить по поверхности с препятсвиями. Ибо рощёт должен происходить только когда траектория чиста, иначе двигаемя ближе к конечной точке, ибо так делают люди обходя препятсвия.
Yoggy
Начинающий
Сообщения: 17
Зарегистрирован: Сб апр 07, 2007 12:10 pm

Сообщение Yoggy »

решение проблемы может и не слишком элегантное, но мне понравилось :)

проверяем, что получается в знаменателе. Если там ноль - то слегка увеличиваем скорость игрока (у меня там увеличение на 1/MaxInt это что-то умноженное на десять в минус десятой степени). Это практически не повлияет на результат, но ноля в знаменателе уже не будет :P

заодно добавил проверку на скорость моба равной нулю

ещё была одна учень глупая ошибка в первой проверке (на досягаемость моба с самого начала). Там проверялось не расстояние от игрока до моба, а от стартовой до конечной точки моба :shock: . Тоже исправил
Давай исключим то что нужно ходить по поверхности с препятсвиями. Ибо рощёт должен происходить только когда траектория чиста, иначе двигаемя ближе к конечной точке, ибо так делают люди обходя препятсвия.
угу

сейчас я бы сказал что это дело уже можно внедрять в опенкору, все ошибки что у меня попадались я вроде исправил
Вложения
RO walk calc.rar
v 0.4.0.0
(223.31 КБ) 208 скачиваний
Аватара пользователя
Click
Разработчик
Сообщения: 1564
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Сообщение Click »

kLabMouse
эм, переписать бы? для тестов :roll:
Аватара пользователя
Aib0
Бывалый
Сообщения: 961
Зарегистрирован: Чт ноя 16, 2006 12:50 am
Контактная информация:

Сообщение Aib0 »

Что переписать? И в какой вид?
Wtf is "OpenKore"?

"What we're dealing with here is a total lack of respect for the law"
Аватара пользователя
Click
Разработчик
Сообщения: 1564
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Сообщение Click »

в бота)
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

Сорри. Я отдыхал с женой на море. :D
Как только адаптируюсь (отойду) немного, сразу-же займусь.

Правда, мне нужна будет платформа для тестов, ибо давно в рагу не играл.
Аватара пользователя
Click
Разработчик
Сообщения: 1564
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Сообщение Click »

Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

Да. И не только. :)
Ответить