Попытки Упростить Алгоритмы Поиска Путей Обучения.

Алгоритмы поиска пути являются неотъемлемой частью разработки игр.

А также различные системы навигации, ориентации и многое другое.

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

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

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

Здесь на помощь приходят алгоритмы поиска пути.



Попытки упростить алгоритмы поиска путей обучения.
</p><p>



За что?

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

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

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



Несколько слов об основных алгоритмах

Мы рассмотрим 3 основных алгоритма.

Теперь в двух словах о каждом из основных алгоритмов и скриншотах визуализации их работы в программе (немного опережая события).



Алгоритм Дейкстры

Разработан голландским ученым Одсгером Дейкстра в 1959 году.

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

Подробнее можно прочитать, например, здесь .



Попытки упростить алгоритмы поиска путей обучения.
</p><p>



А*(Звезда)

Этот алгоритм был впервые описан в 1968 году Питером Хартом, Нильсом Нильссоном и Бертрамом Рафаэлем.

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

Вы можете начать учиться Здесь .



Попытки упростить алгоритмы поиска путей обучения.
</p><p>



Поиск точки прыжка

Этот алгоритм был представлен в 2011 году Д.

Харбором и А.

Грастиеном.

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

«Точки перехода» позволяют ускорить алгоритм поиска пути, рассматривая только «нужные» узлы.

Очень хорошо объяснен принцип работы Здесь

Попытки упростить алгоритмы поиска путей обучения.
</p><p>



Небольшой отказ от ответственности

Стоит отметить, что Растущее дерево генератор, также представленный в программе, создает «классический лабиринт» как на картинке ниже (только большего размера), высота и ширина в настройках затем задаются специально для него.

Данный генератор добавлен для создания «Вау» эффекта для новичка и для демонстрации пути, построенного по самым базовым алгоритмам (Правило правой или левой руки, DFS), в посте я не буду на этом останавливаться и сосредоточусь на ручном режиме.

.



Попытки упростить алгоритмы поиска путей обучения.
</p><p>



Основа поиска — клетчатое поле

Поиск работает по графику; Самый простой способ создать график из карты — самостоятельно расставить путевые точки и перенести карту в клетчатое поле.

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

Для начала нам нужно определить класс ячейки.

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

В результате получаем представленный класс (функции set- и get-функции я удалил для экономии места):

   

enum Status{ Click, Unclick, Enter, Exit, NoStatus }; enum ListStatus {NoList, InClosed, InOpen}; class GraphicsCell : public QGraphicsRectItem { public:

Теги: #Qt #алгоритмы поиска пути #поиск пути #C++ #Qt #Разработка игр
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.