Уявіть собі дуже просте зйомка, що ми всі знаємо:
Ти гравець (зелений). Ваш рух обмежений X
віссю. Наш ворог (або вороги) знаходиться у верхній частині екрана, його рух також обмежений X
віссю. Гравець вистрілює в ворога кулі (жовті).
Я хотів би реалізувати AI для ворога, який повинен бути справді хорошим уникнення куль гравців. Моя перша ідея полягала в тому, щоб розділити екран на окремі секції та призначити їм ваги:
Є два ваги: "кульова вага" (сірий) - це небезпека, яку наносить куля. Чим ближче куля до супротивника, тим вище "вага кулі" ( 0..1
де 1 найбільша небезпека). Доріжки без кулі мають масу 0. Друга вага - "відстань-вага" (вапняно-зелений). Для кожної смуги руху я додаю 0.2
вартість руху (це значення зараз є довільним і може бути налаштовано).
Тоді я просто додаю ваги (білий) і виходжу на смугу з найменшою вагою (червона). Але такий підхід має очевидний недолік, оскільки він може легко пропустити місцеві мінімуми, оскільки оптимальним місцем для поїздки буде просто між двома вхідними кулями (як позначено білою стрілкою).
Тож ось що я шукаю:
- Потрібно знайти шлях через штормову бурю, навіть коли немає місця, яке б не загрожує кулею.
- Ворог може надійно ухилитися від кулі, вибравши оптимальне (або майже оптимальне) рішення.
- Алгоритм повинен вміти враховувати швидкість руху кулі (оскільки вони можуть рухатися з різною швидкістю).
- Способи налаштувати алгоритм, щоб можна було застосувати різні рівні складності (тупі до супер-розумних ворогів).
- Алгоритм повинен допускати різні цілі, оскільки противник не хоче лише ухилятися від куль, він також повинен мати можливість стріляти по гравцеві. Це означає, що позиції, де противник може стріляти по гравцеві, слід віддавати перевагу при ухиленні від куль.
То як би ви вирішили це? На відміну від інших ігор цього жанру, я хотів би мати лише декількох, але дуже «кваліфікованих» ворогів замість маси німих ворогів.