XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Общение> Трактир
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
DanFi

offline
Опыт: 7,220
Активность:
Алгоритм нахождения пути. VB.
Добрый вечер!
Начал я тут недавно создавать (опять) игру свою (2D, с видом сверху, стрелялка). Работает всё отлично. Присутствует редактор карт, ГГ уже и анимирован, и стрелять умеет, и ходить… НО! Столкнулся с большой проблемой! Забыл про AI… когда начал программировать, столкнулся с большой проблемой… противники не могут найти и дойти до ГГ! Была ошибка в алгоритме нахождения пути. Противники, то тупо останавливались, то упирались в стены. Мучился долго. Потом со злости, что ничего не получилось, снёс ИИ к чёрту, а в мести и с ИИ пол кода программы (не заметил…немного…). Теперь восстанавливаю.
Помогите, кто может! Я, конечно, понимаю, что это сложнейший алгоритм, но хотя бы подтолкните меня на это, пожалуйста!
SWF- ролик. Описание:
Белый квадрат – пусто (Значение 0)
Коричневый квадрат – стена (Значение 1)
Зелёный – враг (Значение 4)
Жёлтый – ГГ (значение 10)
Зелёная линия – правильный путь противника
Коричневый – неправильный
Заранее благодарю!
Прикрепленные файлы
Тип файла: rar 1.rar (3.6 Кбайт, 46 просмотров )
Старый 21.12.2006, 21:57
DanFi

offline
Опыт: 7,220
Активность:
ComotozNick, ты какие языки программирования знаешь?
Старый 21.12.2006, 22:55
ComotozNick
Активность: 666
offline
Опыт: 26,206
Активность:
C++, Perl
Старый 21.12.2006, 23:05
DanFi

offline
Опыт: 7,220
Активность:
Посмотрел? Есть идеи, как это реализовать? Я даже не знаю с чего отталкиваться...
Хотя нет, я думаю, можно реализовать с помощью ОЧЕНЬ большого количества If.
Старый 21.12.2006, 23:08
ComotozNick
Активность: 666
offline
Опыт: 26,206
Активность:
DanFi я подумаю в течение сегодня-завтра, потом выложу.

Самый простой (и нудный в реализации) вариант - тупой перебор всех полей, потом находить все возможные варианты как проити и из них выбирать самый короткий, но это реализовать просто задолбаешься.
Старый 21.12.2006, 23:11
DanFi

offline
Опыт: 7,220
Активность:
Ну вот я о том же...
Хотя можно с помошью For...
Старый 22.12.2006, 08:23
DanFi

offline
Опыт: 7,220
Активность:
С помощь IF у меня ни чё не получилось!
Старый 22.12.2006, 19:02
nic666

offline
Опыт: 5,612
Активность:
Вообще алгоритм нахождения кратчайшего пути базируется на том, что нужен двумерный массив и в первую клетку заносится 1, затем а каждую точку рядом с начальной заносится 2, кроме той, что содержит 1, затем в следующие рядом с теми что содеражат 2, заносится 3, но при условии что там 0, но не 1 или 2 и .т.д. И так до тех пор пока не дойдешь до конечной точки. А тогда остается лишь пройтись по точкам со значениями 1,2,3,4,N и вот тебе кратчайший путь...
Старый 22.12.2006, 21:05
DanFi

offline
Опыт: 7,220
Активность:
Да ты гений! Только я немного не понял. сейчас вникну.

DanFi добавил:
Я и использую двухмерный массив.

DanFi добавил:
А как быть, если присутствуют стены?
Старый 22.12.2006, 21:55
nic666

offline
Опыт: 5,612
Активность:
Имеется ввиду ставить числа в клетки связанные с текущей. Сначала ставишь единицу (она всего одна в начальной клетке), потом просматриваешь 8 клеток вокруг и ставишь 2 в те с которымы есть связь (может и 4 а не 8, смотря какой у тебя лабиринт), там где стены - там не надо ставить ничего (должен 0 остаться)... потом просматриваешь двойки и ставишь 3 в те клетки с которыми связь есть, но там не туда где 1 или 2 и т.д.
Этот алгоритм придумали в 198х затертом году он называется "волновой алгоритм поиска пути", и дает 100% результат, если конечно вообще путь есть...
Старый 22.12.2006, 22:19
ComotozNick
Активность: 666
offline
Опыт: 26,206
Активность:
nic666 говорит толковую идею. У меня была подобная идея, но там были недочеты и я ее откинул... как получается зря.
Старый 22.12.2006, 23:23
Mefist
Is it cocktail hour yet?
offline
Опыт: 98,190
Активность:
а может кто-нибудь на словах объяснить как вообще работает такой алгоритм? и лично ничего придумать не могу =\
Старый 22.12.2006, 23:52
ComotozNick
Активность: 666
offline
Опыт: 26,206
Активность:
% щас попытаюсь тебе накатать рисунок, чтобы ты понял суть идеи..
Старый 23.12.2006, 00:09
NETRAT

offline
Опыт: 83,712
Активность:
Алгоритм нахождения кратчайшего пути - построение дерева достижимости. Да, млин, по этой теме материалов - хоть залейся. Суть в том что находятся все кратчайшие пути от начальной, до каждой точки карты, итерационно, пока не встречаем нашу конечную точку, когда встречаем, просто формируем путь, по которому мы в нее пришли.
Помогает литература по теории алгоритмов, и почти уверен что статьи по этой теме есть на геймдеве
Старый 23.12.2006, 16:52
zibada

offline
Опыт: отключен
Старый 23.12.2006, 17:14
Mefist
Is it cocktail hour yet?
offline
Опыт: 98,190
Активность:
спасиб .. почитаю
Старый 24.12.2006, 17:37
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Старый 25.12.2006, 14:38
Sir Lothar

offline
Опыт: 5,740
Активность:
Цитата:
Да ты гений!

Сомневаюсь ) Точно такое же было написано в одной из статей журнала "Игромания" (цикл по програмированию в GLScene).
Старый 25.12.2006, 15:03
DanFi

offline
Опыт: 7,220
Активность:
Дай ссылку на статью
Старый 25.12.2006, 17:12
nic666

offline
Опыт: 5,612
Активность:
А в чем проблема? Я же в принципе описал как делать.
Единствено забыл указать ньанс:
  • когда все клетки заполнены, нужно начинать просмотр с КОНЕЧНОЙ точки в порядке уменьшения цифр: N,N-1,N-2, ..., 1 В принципе не важно какую выбирать клетку если цифры в них одинаковы, все равно путь будет длины N клеток.
Старый 26.12.2006, 09:50
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 11:23.