Чи є якась істотна різниця між використанням квадратної або шестикутної сітки для області, яку шукають алгоритмом пошуку шляху. Іншими словами, краще квадратний або шестикутний, і якщо так, то чому.
Чи є якась істотна різниця між використанням квадратної або шестикутної сітки для області, яку шукають алгоритмом пошуку шляху. Іншими словами, краще квадратний або шестикутний, і якщо так, то чому.
Відповіді:
Основне значення для вирішення питання щодо використання квадратних та шестигранних сіток не повинно бути простою реалізацією AI - алгоритми пошуку по ширині та глибині спочатку майже однакові незалежно від того, який графік у вас є.
Скоріше, це питання геймплея, яке слід розглянути ігровим дизайнерам. Квадратні сітки є більш доступними для масового ринку (шестигранні дошки, як правило, виглядають "видовищними"), і в світі елементів управління вгору / вниз / вліво / вправо набагато інтуїтивніше орієнтуватися по квадратах, ніж шестигранні з точки зору користувальницького інтерфейсу. Квадратні сітки також, як правило, трохи більше обмежують рух; припускаючи ортогональний рух (а не діагональний), потрібно пройти 4 ходи навколо одноквадратної перешкоди, порівняно з 3-ма ходами в шестигранній сітці. З точки зору програмування, шестигранники також трохи легше реалізувати, але мова йде не про алгоритми пошуку, а про те, що квадратна сітка дорівнює двовимірному масиву, але шестигранна сітка насправді не відповідає стандартній структурі даних.
Нижня сторона квадратних сіток полягає в тому, що рух ніколи не відчуває себе правильним. Переміщення по діагоналі повинно приймати точки руху sqrt (2), але на практиці це або 1 рух (що дає змогу ходити по діагоналях швидко, і рідко є причина ходити ортогонально), або це 2 руху (завдяки чому діагональний рух відчувається занадто повільним ). За допомогою шестигранних сіток відстань руху набагато інтуїтивніше, оскільки це завжди однакова відстань від одного шестигранника до іншого, незалежно від того, яким шляхом ви проходите.
Я жодним чином не є експертом з ІІ, але різниця повинна бути незначною. Квадратні сітки трохи швидші (4 підключення на вузол замість 6), але це насправді не є обмежуючим фактором в алгоритмічному режимі виконання. Залежно від того, який алгоритм ви плануєте використовувати, код може бути дещо складнішим для шістнадцяткової сітки, оскільки обчислити координати трохи складніше, і складніше використовувати такі ярлики квадратури / октри, які, на мою думку, є часто використовується в обробці доріжок.
Але для простого світу, такого як рівень покрокової стратегії гри, різниця між двома макетами не повинна мати великого значення; квадратна сітка буде трохи простішою та швидшою.
Цей посібник з шестикутників є приголомшливим. Частина про нанесення маршрутів містить інтерактивний приклад та деяку інформацію про те, як адаптувати квадратний шлях.
Якщо ви використовуєте графік на основі графіків, такий як алгоритм A * або Dijkstra або Floyd-Warshall, накладання маршрутів на шестигранних сітках не відрізняється від накладання маршрутів на квадратних сітках.
- Сусіди. Зразок коду, який я надаю в навчальному посібнику для проходження маршрутів, викликає graph.neighbors, щоб отримати сусідів місця. Використовуйте для цього функцію в розділі сусідів. Відфільтруйте сусідів, які є непрохідними.
- Евристичний. Зразок коду для A * використовує евристичну функцію, яка дає відстань між двома місцями. Використовуйте формулу відстані, масштабовану, щоб відповідати витратам на рух. Наприклад, якщо ваша вартість руху становить 5 за шістнадцятку, то помножте відстань на 5.