A.I.M.(http://forum.ja2.su/cgi-bin/yabb/YaBB.pl)
Обсуждаем игры >> Гробокопатели >> Алгоритм обхода припятствий?
(Message started by: derick на 22.04.2005 в 08:17:45)

Заголовок: Алгоритм обхода припятствий?
Прислано пользователем derick на 22.04.2005 в 08:17:45
Кто знает?

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Force_Majeure на 22.04.2005 в 19:18:59
А чего тут знать, в JA используется стандартный A*

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Ломолом на 22.04.2005 в 20:02:38
2Force_Majeure:
Хороший ответ!

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Force_Majeure на 23.04.2005 в 05:38:06
2Ломолом:

Quote:
2Force_Majeure:  
Хороший ответ!

Каков вопрос :)

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем derick на 03.05.2005 в 19:49:57
так чем не понятен вопрос?? я имею в виду как персонаж выбюирает пусть обхода препятвия

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем derick на 03.05.2005 в 19:50:53
т.е. щелкаешь, а он же идет не напрямик, а обходит деревья и т.д.

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Force_Majeure на 04.05.2005 в 07:50:56
т.е. тебе изложить сам алгоритм?
В кратце принцип такой: известны координаты (в двумерной плоскости карты) точки А, где стоит человек и В, куда ему нужно переместиться. По ним находится длина L прямой между этими точками. Карта делится на клетки (массив) заполненные 0, значит свободно, и 1, там где есть препятствие. Из точки А делается "ход" персонажа на одну клетку карты по всем 8 направлениям (самоадресуемый список). Длину каждого из 8 маршрутов считают исходя из того, что двинуться на соседнюю клетку напрямую стоит 2 ед., а по диагонали 3. При движении, ессно, берем только теварианты, где "свободно".  Все 8 вариантов кладутся в массив Р. Все имеющиеся арианты сравниваются с L и выбирается наиболее близкий. далее обсчитываем его по томуже принципу, а 7 ост. вариантов сбрасываются в др. масств Р1, их нельзя выбрасывать т.к. в последствии они могут оказаться более выгодными, чем идти напрямую (например, если прямой путь заведет внутрь препятствия, по форме буквы "П"), тогда из Р1 достается наиболее выгодный вариант и все продолжается уже с ним.

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Mr Evil на 11.06.2005 в 11:47:57
Даже не знаю в какую тему вопрос написать.
Вопрос такой: Каким образом можно транспорту прописать хождение по водной глади на тактической карте? (По принципу Хамера на дорогах).
Я понял, что нужно прописать сектора, по которым транспортное средство может передвигаться. Я прв или нет?

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Force_Majeure на 11.06.2005 в 12:21:46
2Mr Evil:
Как хаммер ездит по дорогам в JA?
Классический случай применения Астар.

Quote:
понял, что нужно прописать сектора, по которым транспортное средство может передвигаться. Я прв или нет?

Простой думерный массив с 0 и 1. 0 - сектор с водой, 1 - там где ехать нельзя (суша).

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Mr Evil на 11.06.2005 в 13:44:35
2Force_Majeure: Хм... Довольно просто. Спасибо.  ;D

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Ghaydn на 13.08.2006 в 21:44:01
[attach]
Крайне странно смотрится в свете описанного выше алгоритма обхода препятствий. В бою такой путь может оказаться фатальным. За врагами и ополченцами такого я не замечал, так как AI несколько шире возможности управления. В частности враги могут замирать на бегу каждую клетку аналогично нажатию ESC, но не останавливаясь, что бы привело к лишней трате очков за повторное начало бега.
Просто к слову пришлось.

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Чертовска Вражiна на 14.08.2006 в 02:10:13
Ghaydn:
  В СквадЛидере м.б. путь по клеткам отметить: часть пути которая тебя устраивает в конце помечается 1 кликом, а далее м. другой маршрут избирать и помечать его. Когда весь путь отметил -- двойной клик и происходит движение. Но это только к багмонстру -- если сможет расковырять и переделать данный алгоритм.

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Force_Majeure на 15.08.2006 в 13:21:04
2Ghaydn:
А что странного? Если бы дерева не было, он шел бы по диагонали (на рисунке вниз) до конца, а потом повернул направо. А так, он дошел до дерева, обогнул его и дальше продолжил обычный путь. А опасности боя классический А-стар не учитывает, для этого нужно какие-то модификации.

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Ghaydn на 19.08.2006 в 21:44:00
2Force_Majeure: Обогнуть дерево можно двумя путями. Но он почему-то упорно выбирает именно тот, что длиннее. И дело даже не только и не столько в опасности боя, сколько в элементарном просчёте: проход слева длиннее, чем справа. Значит, при сравнении длины путей правый не просчитывается совсем. Значит, алгоритм неполный/несовершенный. Значит, его надо доработать.

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Force_Majeure на 20.08.2006 в 06:10:10
2Ghaydn:

Quote:
Обогнуть дерево можно двумя путями. Но он почему-то упорно выбирает именно тот, что длиннее.

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

[attach]

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Strax5 на 21.08.2006 в 10:18:17
2Force_Majeure:

вообщето 4 против 3

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Force_Majeure на 21.08.2006 в 13:33:03
2Strax5:
Может я где то ошибаюсь? Первые три клетки абсолютно одинаковы, так? Остается или две клетки по красному пути 2+2=4 очка или одна клетка по синему плюс поворот 3+1=4 очка.

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Strax5 на 23.08.2006 в 13:01:23
2Force_Majeure:

0.5 + 3 + 0.5 = 4 полных (всего 5 клеток)
0.5 + 2 + 0.5 = 3 полных (всего 4 клетки)

А поворот отдельно считается?

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Ghaydn на 23.08.2006 в 20:21:43
Вообще если быть совсем точным, то сама система траты очков в игре меня смущает. Тайл ведь при взгляде сверху (а не в проекции) имеет форму квадрата. Значит, примем его сторону за 1. Тогда диагональ будет равна корню из двух, то есть примерно 1.4. Приравнять 1.4 к двум совсем уж не получается (приравняем к 1.5 :) ). Теперь подсчитаем путь Карлоса с имеющимися данными. Получается синий 6, а красный 7. В жизни путь получился бы длиннее на целую единицу.

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Force_Majeure на 24.08.2006 в 08:30:20
2Strax5:
В классическом а-старе нет, но в Джа ведь считаются. Никак не пойму, как ты счиатешь, но кажется догнал, в чем моя ошибка, не считал одного поворота на красном пути, действительно получается красный на единицу длиннее.

2Ghaydn:
В а-старе обычно прямой переход берут за 2 а диагональный за 3.

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем lalien на 24.08.2006 в 11:43:26
А разве повороты при ходьбе вообще считаются? Даже если шагнуть на клетку которая находится за спиной это будет стоить столько же сколько шаг вперёд.

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Ghaydn на 24.08.2006 в 12:15:33
2lalien: Не считаются ни при ходьбе, ни при любом другом движении.

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Force_Majeure на 25.08.2006 в 08:00:14
Хм, действительно, повороты не считаются. Вот что значит давно в Джа не играл :)
Тогда и вправду, путь предложенный алгоритмом длиннее, с чем это связано не знаю ???

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем GreenEyeMan на 23.09.2006 в 04:47:35
Надеюсь в правильную ветку задал вопрос. Можно ли (если можно то где) изменить скорость передвижения персов\вражин\монстров? Запретить бег для врагов?

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем bugmonster на 26.09.2006 в 15:30:44
2GreenEyeMan:

Quote:
Надеюсь в правильную ветку задал вопрос

И не надейся, но модеры разберутся, если что ;D

Quote:
Можно ли (если можно то где) изменить скорость передвижения персов\вражин\монстров?

Что ты подразумеваешь под "скоростью передвижения"? Если скорость анимации, то в JA2CW это сделано.

Quote:
Запретить бег для врагов?

Можно. Если сильно надо, могу поискать где и что менять.

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем GreenEyeMan на 26.09.2006 в 19:18:49
2bugmonster: "Если сильно надо, могу поискать где и что менять." - ну, если не в лом. ::) А если еще в своу ПдМ такую возможность встроешь, вообще здоровски будет.
"скорость анимации" - ну да, но только не для всех, а для отдельных "особей".

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем bugmonster на 02.10.2006 в 12:54:53
2GreenEyeMan: Вообще скорость анимации движения в Джа и так рассчитывается "на лету" в зависимости от многих праметров: пошаговка/реалтайм, бодитайп, физ. параметры, усталость, здоровье. Поэтому уточни: что требуется по задумке?

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем GreenEyeMan на 04.10.2006 в 19:01:32
2bugmonster: В принципе, хочеться отключить бег и снизить в два раза скорость передвижения пешком у определенного перса (допустип - качок). Можно сказать, это ради эксперемента толлько: можно или нельзя.

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем VM на 04.10.2006 в 19:30:16
2GreenEyeMan: Скорость передвижения напрямую зависит от подвижности перса. Уменьши ее в его профиле и получишь медленного качка.

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Strax5 на 02.11.2006 в 12:56:12
А как вам такой обход?  :(

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Strax5 на 16.02.2007 в 20:10:52
Вот такой еще обход препятсвия. Если курсор поставть на одну клетку выше - обход будет с другой стороны.

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Strax5 на 02.04.2008 в 09:13:47
Вот еще глючные обходы.

При этом если сделать пару шагов по этому пути, Барри автоматически получает стакон дроби в голову.

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Strax5 на 02.04.2008 в 09:16:42
Самый нелогочный на мой взгляд.

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Strax5 на 02.04.2008 в 09:16:59
Еще один

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем pipetz на 02.04.2008 в 09:40:28
В 2, 3 такое ощущение что такой путь игра считает более безопасным.
Вообще алгоритм обхода, кажется, отличается в скрытном режиме.
Но у тебя тут везде не скрытный режим. Почему так ныкаются непонятно.

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Strax5 на 05.05.2008 в 13:15:14
Вот еще глюк с передвижением мне абсолютно не понятный.

Если Стефен бежит прямо - 7 АР, если сворачивает направо сразу после входа - 8.
А если налево - 10.

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Strax5 на 05.05.2008 в 13:15:34
Вот так.

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем pipetz на 14.08.2009 в 05:27:46
Ну, вот я и досюда добрался.  :)
2Force_Majeure:  
on 1114186739, Force_Majeure wrote:
А чего тут знать, в JA используется стандартный A*

Откуда такая информация? Неужели из исходников?  :o
Я спрашиваю потому что сам в них нефига не разобрался.
Там активно используется оператор "goto". Я как увидел чуть в обморок не упал. :)

Вот в 1.13 точно A* по крайней мере судя по названиям классов и функций. :)

Если кто интересуется алгоритмом А* вот небольшая прога с исходниками на C#.
По  моему очень наглядно. Автор некий Карлос Барбоса.
Я правда немного подправил, у него там не A* было, а какой-то A+. :)

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем Force_Majeure на 14.08.2009 в 06:52:24
2pipetz:
2005 год... тогда исходники еще не копали :) А писал я это судя просто по тому, как осуществляется обход мерками препятствий. Естественно, мог и ошибаться, но скорее всего там все-таки она родимая А-звездочка.

Заголовок: Re: Алгоритм обхода припятствий?
Прислано пользователем pipetz на 14.08.2009 в 07:16:59

on 1250221944, Force_Majeure wrote:
Естественно, мог и ошибаться, но скорее всего там все-таки она родимая А-звездочка.

Да вот ХЗ. Она или не она. Зачем тогда создатели 1.13 переписали этот код именно под A*?
Ежели он уже был A*. Возможно, конечно, просто чтобы отрефакторить , в смысле "причесать".
Дело тёмное. Надо медведей трясти.



A.I.M. » Powered by YaBB Modification 4 (v.4.0.0-pre)!
YaBB © 2000-2003. All Rights Reserved.