[ Обновленные темы · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: server2009, Сергей  
Форум » VB6 и всё с ним связанное » FAQ по Visual Basic 6.0 » Волновой алгоритм - Поиск крaтчaйшего пути
Волновой алгоритм - Поиск крaтчaйшего пути
server2009Дата: Воскресенье, 22.11.2009, 12:34 | Сообщение # 1
Admin
Группа: Администраторы
Сообщений: 18
Репутация: 0
Статус: Offline
Все мы играли в компьютерные игры. Кто-нибудь задумывался, как объекты управляемые пользователям движутся по карте?

Суть алгоритмов поиска кратчайшего пути:
Давайте попробуем разобраться на примере типовой стратегии. Чтобы игрок двигался по карте рациональным путем от начальной позиции к конечной, используются алгоритмы поиска кратчайшего пути.
Мы остановимся на "Волновом" алгоритме, он или его модификации чаще всего используется в играх. И так, мы указали координату куда следует направить персонажа, компьютер начинает поиск пути.
Принцип работы подобных алгоритмов очень прост, есть различные места на карте, которые можно классифицировать по типу:
  • непроходимые части (их мы исключаем из пути сразу)
  • проходимые, но с большими затратами по скорости или другим факторам, их мы будем использовать только в крайнем случае
  • наилучшие участки (пешеходные дороги или что-то в этом роде), их мы будим использовать наиболее часто


Для этого в массиве должны содержаться данные с "ценой" прохождения участка.

Разберем для начала более простой вариант реализации:
На двумерной клетчатой карте (матрице), состоящей из "проходимых" и "непроходимых" клеток, обозначена клетка старта и клетка финиша.
Цель алгоритма - проложить кратчайший путь от клетки старта к клетке финиша, если это возможно.
  • От финиша во все направления распространяется волна, причем каждая пройденная волной клетка, помечается как "пройденная".
  • Волна, в свою очередь, не может проходить через клетки помеченные как "пройденные" или "непроходимые".
  • Волна движется, пока не достигнет точки старта или пока не останется не пройденных клеток.
  • Если волна прошла все доступные клетки, но так и не достигла клетки старта, значит путь от старта до финиша проложить невозможно.
  • После достижения волной старта, от старта прокладывается путь до финиша и сохраняется в массиве.
 
server2009Дата: Воскресенье, 22.11.2009, 12:34 | Сообщение # 2
Admin
Группа: Администраторы
Сообщений: 18
Репутация: 0
Статус: Offline
Пример реализации прикреплен к сообщению:
Прикрепления: 2423339.rar (16.9 Kb)
 
Форум » VB6 и всё с ним связанное » FAQ по Visual Basic 6.0 » Волновой алгоритм - Поиск крaтчaйшего пути
  • Страница 1 из 1
  • 1
Поиск: