Отже, я робив цю гру в 2D гру Java на цій основі під назвою Greenfoot, і я працював над AI для хлопців, з якими ти збираєшся битися. Я хочу, щоб вони могли реально рухатися по всьому світу, тому я незабаром зрозумів, що серед кількох інших речей мені знадобиться якесь проходження маршруту.
Я зробив два прототипи A *. Один - на основі сітки, а потім я зробив такий, який працює з точковими точками, тому зараз мені потрібно розробити спосіб пройти з 2d "карти" перешкод / будівель до графіка вузлів, з яких я можу зробити шлях. Фактичне накладання маршрутів здається прекрасним, просто мої відкриті та закриті списки можуть використовувати більш ефективну структуру даних, але я до цього довідаюся, якщо і коли потрібно.
Я маю намір використовувати навігаційну сітку з усіх причин, викладених у цій публікації на ai-blog.net . Однак проблема, з якою я зіткнулася, полягає в тому, що те, що A * вважає найкоротшим шляхом від центрів / країв полігону, не обов'язково є найкоротшим шляхом, якщо ви проїжджаєте через будь-яку частину вузла. Для кращого уявлення ви можете побачити питання, яке я задав на stackoverflow .
Я отримав хорошу відповідь щодо графіка видимості. З тих пір я придбав книгу ( Обчислювальна геометрія: Алгоритми та програми ) та прочитав далі тему, однак я все ще прихильний до навігаційної сітки (Див. " Управління складністю " з приміток Аміта про пошук шляху ). (Як бічна примітка, можливо, я міг би використати Theta * для перетворення декількох точкових точок в одну пряму, якщо перша і остання не затьмарені. Або кожен раз, коли я рухаюсь назад, перевірте, до останньої точки, щоб побачити, чи можу я перейти прямо з що до цього)
Отже, в основному те, що я хочу, - це навігаційна сітка, де після того, як я перекладу її через алгоритм воронки (наприклад, цей з Digesting Duck ), я отримаю справжній найкоротший шлях, а не отримаю той, який є найкоротшим шляхом, наступним за вузлом до вузла, але не справді найкоротший з огляду на те, що ви можете пройти кілька полігонів і пропустити вузли / краї.
О, і я також хочу знати, як ви пропонуєте зберігати інформацію, що стосується багатокутників. Для прикладу прототипу маршрутної точки, який я зробив, я просто мав кожен вузол як об'єкт і зберігав список всіх інших вузлів, до яких можна було подорожувати з цього вузла, я здогадуюсь, що це не буде працювати з полігонами? і як мені сказати, чи багатокутник відкритий / прохідний або це твердий предмет? Як зберігати, які вузли складають багатокутник?
Нарешті, для запису: я хочу запрограмувати це з нуля, хоча вже є інші рішення, і я не збираюся (повторно) використовувати цей код ні в чому, окрім цієї гри, тому це не має значення це неминуче буде неякісним.