Знайдіть найкоротший шлях через перешкоди, коли всі звичайні шляхи заблоковані


10

Я роблю Tower Defense, і я працюю з базовими маршрутами, але у мене виникла проблема.

Я хочу зробити шлях заблокованим, і коли відбудеться блок, бігуни атакують вежі, що блокуються.

Тому мені потрібен спосіб знайти найкоротший шлях, який, що ще важливіше, має найменшу кількість веж на шляху.

Як це зробити?


1
хіба це не буде виявлення зіткнення в межах вашого шляху?
Приз

Оскільки вежі, що блокують, руйнуються, шлях насправді є. Просто вартість проїзду через них набагато вища, ніж рух по безперешкодному шляху. (Дивіться відповідь від кодеранжера нижче)
bummzack

Відповіді:


21

На вашому шляху підрахунок просто зробить так, що проходження через вежу коштує так само, як і проходження через велику кількість плиток. Взагалі, вони намагатимуться їх обійти, але якщо такого шляху немає, вихід все одно буде проходити через найменшу кількість перешкод. Ви можете налаштувати штраф, щоб іноді вони просто проходили замість того, щоб пройти всю карту, якщо хочете.


хотілося б побачити приклад коду цієї реалізації, який звучить просто та надійно
DFectuoso

3
Алгоритм A * ( en.wikipedia.org/wiki/A * _search_algorithm) працює з витратами на шлях. Просто збільшите вартість сегментів, які проходять через вежу. Тоді ваші агенти намагатимуться уникнути веж, або, якщо це "дешевше" напасти на вежу, вони нападуть на неї. Ідея алгоритму A * полягає в тому, щоб мінімізувати витрати, тому ви повинні мати можливість досягти того, що ви хочете, просто налаштувавши витрати на шляху ...
bummzack

Це чудове рішення, про яке я б не подумав, дякую!
поштовх

Лише зауваження: Подання величезним рухом на вузли вежі, не збільшуючи також оцінку, що використовується для алгоритму A *, коли шлях очевидно заблокований, означатиме, що ваші агенти перевірять кожен вузол на своїй частині перешкоди, перш ніж вирішити питання про перерву - через точку. Залежно від кількості вузлів та агентів, це може зробити алгоритм непомірно повільним.
Мартін Сойка
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.