Пересування / уникання перешкод


12

Я хотів би написати «гру», де можна розмістити перешкоду (червону), а потім чорна точка намагається її уникнути, і дістатися до зеленої цілі.
Я використовую дуже простий спосіб уникнути цього, якщо чорна крапка близька до червоної, вона змінює свій напрямок і рухається на деякий час, то рухається вперед до зеленої точки.
"Нереалістичний" шлях

Як я міг створити "плавний" шлях для "плеєра", керованого комп'ютером?
Редагувати: Не гладкість - це головний момент, але щоб уникнути червоного блокування «стіни» і не врізатися в нього, а потім уникнути його.

Як я міг реалізувати якийсь алгоритм пошуку шляху, якщо у мене просто 3 бали?
(А що би зробило речі набагато складнішими, якщо ви могли б поставити кілька перешкод?)
Гладка стежка

Відповіді:


9

Дуже поширений і загальний підхід - розділити ваш світовий простір на сітки та використовувати такі алгоритми, як A *.

Це посилання допомогло мені почати з розуміння та реалізації алгоритму A *.

Редагувати :

Простіша думка, яка мені спадає на думку, - це ... як тільки ти перетвориш світ на осередки сітки. Завжди, нехай чорна точка дотримується відстані Манхеттена до зеленої точки. Потім ви можете призначити ваги кожній клітинці. Перешкоди можуть мати велику вагу в осередку сітки, а вільний рух може мати 0 ваг. Коли ви рухаєтесь по відстані Манхеттена, для кожного ходу перевірте, чи вага наступної комірки не вище ваги поточної комірки. Якщо вона вище, перевірте вагу сусідньої комірки і переходьте далі.

Сподіваюсь, це допомагає


Ця стаття з алгоритмом A *, здається, саме те, що я шукав, але, на жаль, досі не знаю, як розділити свій "світ" на сітки: S
користувач

Це дійсно залежить. Думка: розділіть свій світ на сітку розміром 32 х 32, яка б потім представляла позиції у двовимірному масиві. Наприклад, у вашому випадку: червона крапка знаходиться у розмірі 120, 120 пікселів (або 120/32 x 120/32: 3,75 x 3,75) 3,75 x 3,75 - це позиція у вашій світовій сітці (або 2D-масиві). Оскільки масиви індексуються цілими числами, ви хочете лише цілу частину його. Таким чином, червона крапка складе 3 х 3. Сподіваюся, що це допомагає
brainydexter

18

Керівництво поведінки розраховане майже на цей точний набір проблем.

http://www.red3d.com/cwr/steer/

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


Керівництво поведінки ідеально підходить для цього.
tenpn

2

Легко спробувати - мати невидиму крапку, яка випереджає чорну крапку і виконує шлях у першому зображенні. Потім чорна точка слідує за невидимою крапкою на невеликій відстані позаду.
Я бачив цю роботу з хорошими результатами, але, звичайно, не може відповідати вашим потребам.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.