Обчислення траєкторії ракет навколо орбіт перед стрільбою


10

Я будую гру з Unity3D. Це клон Gravity Wars . І башти гравця, і AI стріляють ракетами один на одного (даючи змінні Angle та Power), намагаючись не розбити ракети на планетах. Але ось моє запитання: як мені змусити AI обчислювати потужність і кут перед стрільбою з його ракети, враховуючи також тяжкість планети?

Відповіді:


5

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

1: створити кількість (напр. 100) випадкових рішень (кут, силові пари).

2: моделювати ці рішення.

3: якщо будь-яке з них, в кінці потрапляє в ціль (або наближається досить близько), Готово! інакше продовжуйте.

4: вибрати найкращі 10 рішень (ті, які опиняються найближче до цілі)

5: з цих 10 рішень створіть по 10 дітей для кожного, шляхом випадкового регулювання їх кута та потужності.

6: тепер у вас є 100 нових рішень, повернувшись до кроку 2

Вам потрібно буде обмежити кількість ітерацій, якщо рішення не знайдено, або для пошуку потрібен занадто багато часу.

Навіть такий підхід не гарантовано знайде хороше рішення, оскільки; 1. рішення може не існувати 2. в хаотичній системі невеликі зміни рішення можуть мати величезний вплив на результат


1

Ви повинні вміти імітувати постріл, не малюючи його.

Тоді ви можете сказати, імітуйте 10 пострілів, а потім зробіть найближчий один із 10.


0

Враховуючи, що траєкторія ракети базується на входах Angleі Power, ви повинні мати можливість вирішити (отримати точну відповідь) з оберненого рівняння.

Основні кроки (псуедо) ШІ наступні:

  1. Виберіть випадковий Powerрівень. Не має значення, що саме величина (до певної міри), доки вона потрапляє в розумний діапазон.
  2. Розв’яжіть (перевернуте з фактичного шляху) рівняння, щоб дати точне (ну як можна ближче до парних)Angle .
  3. Виберіть деякий (модифікований) випадковий зсув з Angle, щоб відрегулювати « складність » ШІ.
  4. Запустити ракету, як гравець буде (випадково) Powerта (розраховано)Angle .

Звичайно, ви можете просто мати AI вогонь на випадкових рівнях для обох входів, що може дати цікаві результати ...


Цей метод має ідеальний сенс, коли у вас є гравітація прямо вниз і постійний вітер, але що ви використовуєте для "рівняння, щоб дати точне Angle", коли у вас всесвіт розлітається безліч гравітаційних тіл? Їх тяга залежить від вашого поточного положення. Деякі знімки можуть бути навіть неможливими.
Джон Макдональд

@John - Якщо постріл абсолютно неможливий (знижка поганого вибору вхідної потужності), з вашим ігровим полем є серйозна проблема. За допомогою цих типів ігор будь-який з гравців повинен бути замінений на AI. Зрозуміло, що рівняння ускладнюються (і з кількома тілами, дуже швидко), але це все-таки має бути можливим.
Завод-Муза

Справедливо. Але чи знаєте ви, що б ви використовували для рівняння? Я думаю, саме тому було створено це питання.
Джон Макдональд

Джон правий: я шукаю це рівняння.
Онофріо

@Onofrio - Вибачте, у мене немає відповідних рівнянь ... і, схоже, вам потрібно зробити багатозмінне обчислення, щоб зробити це "належним чином".
Завод-Муза

0

Як щодо того, щоб зробити його реалістичним, не змушуючи їх обчислювати, а починати з здогадки та коригувати належним чином?

Коли я грав у "Гравітаційні війни", це я і робив; Почніть з напіввипадкової потужності і відрегулюйте відповідно приріст. За пару знімків ви дійсно близькі.

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