A* Или Поиск Пути На Практике Javascript

Где-то года три-четыре назад, когда тот объем кода, который я написал, стер и переписал, с одной стороны, вызывал у меня непреодолимое чувство гордости, а с другой (что было для меня совершенно незаметно) совсем не собирается превращаться в качество, идея реализации браузерной игры.

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

Для начала естественно была поставлена задача: в игре герой должен перемещаться по миру, щелкая мышкой по карте, отображая построенный путь (аля Герои Меча и Магии).

В то время рынок браузерных игр был в несколько раз.

нет, в несколько раз меньше, и небольшое исследование этого рынка показало: не было достойной реализации карты перемещения героя по миру (по крайней мере, я так и сделал).

не нахожу).

И я пошел искать свой путь, а точнее, как этот путь реализовать.

После поиска информации о поиске пути и ее изучения в качестве алгоритма реализации был выбран A* (Звездочка).

Вот основные преимущества этого алгоритма:

  • Это один из самых быстрых алгоритмов поиска пути.

  • Стоимостью прохождения можно легко манипулировать (т.е.

    по диагонали дальше, чем по прямой или 3 хода по болоту хуже, чем 5 ходов по песку)

  • Вы можете использовать не только квадратные ячейки карты, но и полигональные.

  • Он довольно легко трансформируется в алгоритм Дейкстры (без заданного вектора поиска), что делает его пригодным для поиска пути, когда координаты конечной точки неизвестны.

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

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

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

Заготовка, в виде js-файла, была подготовлена, устранена до нужных мне функций, оптимизирована в меру моих на тот момент знаний и приговорена к вечной службе сложному вопросу куда идти, куда идти .

Посыпая голову пеплом, с прискорбием и сожалением сообщаю, что, увы, я потерял все данные о том, кто написал исходную версию js-реализации А*,.

ну никогда не думал, что такое может еще быть полезно.

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

На тот момент это имело второстепенное значение и реализовывалось первым пришедшим на ум способом.

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

Например, как CSS-спрайты.

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

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

Кстати, когда-то был скрипт рисования препятствий, но видимо он канул в Лету.

P.S. В настоящее время он работает под: FF 3, IE 7, Chrome и Safari 4 (все под Vista).

Опера 9.64 отказывается работать, но это не цель.

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

Теги: #a* #Звезда #в поисках пути #Чулан

Вместе с данным постом часто просматривают:

Автор Статьи


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

Dima Manisha

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