Я розробляю мережеву гру на бойовій стратегії 3D-6DOF космічного флоту, яка значною мірою покладається на налаштування корабля. Дозвольте мені трохи пояснити гру, оскільки вам потрібно трохи знати про неї, щоб поставити питання.
Те, на що я прагну, - це можливість створити власний флот кораблів із заздалегідь нанесеними формами та приєднаними модулями (гвинти, тракторні балки ...), які б давали переваги та недоліки кожному кораблю, тому у вас є багато різних розподілів флоту. Наприклад, довгий корабель з двома гвинтовими гвинтами дозволив би судно легко крутитися навколо цієї площини, більші кораблі рухатимуться повільно, якщо ви не розмістите багато гвинтів у задній частині (тому витрачайте більше "будівельних" точок та енергії при русі, і це буде тільки швидко рухайтесь у цьому напрямку.) Я планую збалансувати всю гру навколо цієї функції.
Гра оберталася б двома фазами: порядком і бойовою фазою. Під час фази замовлень ви командуєте різними кораблями. Коли всі гравці закінчують етап замовлення, починається бойова фаза, і корабельні накази на деякий час вирішуються в режимі реального часу, після чого дія призупиняється і настає нова фаза замовлень.
Проблема виникає, коли я думаю про введення гравця. Щоб перемістити судно, вам потрібно увімкнути або вимкнути різні гвинти, якщо ви хочете керувати, рухатися вперед, гальмувати, обертатись на місці ... Ці гвинти не повинні працювати на всі сили, так що ви можете досягти більшого руху комбінації з меншими гвинтами.
Я думаю, що такий підхід трохи нудний. Гравець не хоче возитися з моторами чи чим-небудь, ви просто хочете МУЖИТИ та Вбивати. Те, як я маю намір гравець давати накази цим кораблям, - це за призначенням і поворотом , і тоді AI обчислить правильну потужність гвинта, щоб досягти цього руху та обертання. Приведення в рух не повинно бути однаковим під час розрахунку всього повороту (після надання наказів), тому було б здорово, якби кораблі реагували під час руху, динамічно регулюючи потужність гвинтів для своїх потреб, але це може бути занадто складно реалізувати, і це не дуже потрібно для гри.
В обох випадках як AI вирішив, які гвинти активувати для найкращої (або принаймні не найгіршої) траєкторії, яку потрібно досягти?
Я хоч про деякі підходи:
- Навчання AI: типи кораблів дізнаються про їх рух шляхом спроб та помилок, коригуючи свою поведінку з більшою кількістю застосувань і, нарешті, стають "розумними". Я не хочу втягуватися ТАК далеко в кодування AI, і я думаю, що це може неприємно для гравця (навіть якщо ви можете дозволити йому вчитися без гри.)
- Попередньо обчислений рух кроку часу: Після створення корабля ВСІ можливі рухи обчислюються для кожної конфігурації гвинта та потужності для заданого дельта-часу. Пам'ять інтенсивна, потворна, погана.
- Попередньо обчислені траєкторії: Те саме, що було зазначено вище, але не для кожної дельта-часу, а для всієї траєкторії, яка б потім була максимально встановлена. Потрібна фіксована конфігурація гвинта для всієї фази бою, і досі зберігає пам'ять, негарна та погана.
- Безперервне грубе форсування: AI безперервно перевіряє ВСІ можливі конфігурації гвинта протягом усієї фази бою, заздалегідь обчислює кілька кроків за часом і вирішує, який на цій основі найкращий. Con: те, що зараз добре, може бути не таким хорошим пізніше, і це занадто інтенсивно, некрасиво і погано процесором.
- Одномісний грубої форсування: Те саме, що вище, але тільки грубе форсування на початку моделювання, тому йому потрібна постійна конфігурація гвинта протягом усієї фази бою.
- Безперервна перевірка кута: Це не повний метод руху, але, можливо, спосіб відкинути "тупі" конфігурації гвинта. Враховуючи нормальний вектор поточного гвинта і остаточний, ви можете наближати потужність, необхідну для гвинта, виходячи з кута. Ви повинні робити це безперервно протягом усієї фази бою. Я зрозумів це нещодавно, тому я не надто замислювався. Апріорі, у нього є і недолік "те, що зараз добре, може бути не так добре згодом", і це не хвилює інших гвинтів, які можуть діяти разом, щоб зробити кращу конфігурацію навішування.
Я справді застряг тут. Будь-які ідеї?