ネットワークターンベースの3D-6DOF宇宙艦隊戦闘戦略ゲームを設計しています。これは、船のカスタマイズに大きく依存しています。質問を設定するにはゲームについて少し知る必要があるので、ゲームについて少し説明しましょう。
私が目指しているのは、カスタムシェイプと付属モジュール(プロペラ、トラクタービームなど)を備えた独自の艦隊を作成する能力です。これにより、各艦に長所と短所が与えられるため、艦隊の分布が多数あります。たとえば、側面に2つのプロペラを備えた長い船は、その飛行機の周りを簡単に回転し、後方に多くのプロペラを置かない限り、大きな船はゆっくりと動きます(したがって、移動するときに「建設」ポイントとエネルギーを多く消費し、その方向に向かって速く移動するだけです。)この機能を中心にすべてのゲームのバランスをとる予定です。
ゲームは、注文と戦闘の2つのフェーズを中心に展開します。注文フェーズでは、さまざまな船を指揮します。すべてのプレイヤーが注文フェーズを完了すると、戦闘フェーズが開始され、船の注文がリアルタイムでしばらくの間解決され、その後アクションが一時停止し、新しい注文フェーズがあります。
問題は、プレイヤーの入力について考えるときに発生します。船を動かすには、操縦、前進、ブレーキ、定位置で回転したい場合、異なるプロペラをオンまたはオフにする必要があります...これらのプロペラは全力で動作する必要がないため、より多くの動きを実現できますより少ないプロペラとの組み合わせ。
このアプローチは少し退屈だと思います。プレイヤーはモーターなどをいじりたくありません。ただ移動して殺したいだけです。私がプレイヤーにこれらの船に命令を与える方法は、目的地と回転によるもので、AIは正しいプロペラ力を計算してその運動と回転を実現します。ターン計算全体を通して推進力が同じである必要はないため(注文が与えられた後)、船が移動するときに反応し、必要に応じてプロペラの出力を動的に調整する場合はクールになりますが、実装するのが難しすぎて、ゲームが機能するために実際には必要ありません。
どちらの場合でも、AIはどのプロペラをアクティブにして最適な(または少なくとも最悪ではない)軌道を達成するかをどのように決定しますか?
私はいくつかのアプローチについて:
- AIの学習:船の種類は試行錯誤によって動きを学習し、より多くの用途で動作を調整し、最終的に「スマート」になります。AIコーディングにこれほど関与したくはありませんし、プレーヤーにとってはイライラすることになると思います(プレイしなくても学習させることができたとしても)。
- 事前に計算されたタイムステップの動き:船の作成時に、特定のデルタ時間の各プロペラ構成と出力について、考えられるすべての動きが計算されます。メモリ集約型、,い、悪い。
- 事前計算された軌跡:上記と同じですが、各デルタ時間ではなく、軌跡全体が可能な限り適合します。戦闘フェーズ全体でプロペラの構成を固定する必要がありますが、それでもメモリを大量に消費し、ugくて悪いです。
- 継続的なブルートフォース: AIは、戦闘フェーズ全体で可能なすべてのプロペラ構成を継続的にチェックし、いくつかのタイムステップを事前計算し、それに基づいて最適なプロペラを決定します。短所:今は良いことは後でそれほど良くないかもしれませんし、CPUに過度に負荷がかかり、見苦しく、悪いです。
- 単一のブルートフォーシング:上記と同じですが、シミュレーションの開始時にブルートフォーシングのみが行われるため、戦闘フェーズ全体で一定のプロペラ構成が必要です。
- 連続角度チェック:これは完全な移動方法ではありませんが、「愚かな」プロペラ構成を破棄する方法かもしれません。現在のプロペラの法線ベクトルと最後のベクトルを考えると、角度に基づいてプロペラに必要なパワーを概算できます。これは、戦闘フェーズ全体を通して継続的に行わなければなりません。私は最近、これを考え出したので、あまり考えませんでした。先験的に、それは「今は良いことは後で良くないかもしれない」という欠点もあり、より良い推進構成を作るために一緒に行動する他のプロペラを気にしません。
私は本当にここで立ち往生しています。何か案は?