回答:
Strategyパターンは、それを行うにはときに何をすべきかを決定するための素晴らしいですが、ありません。また、有限状態マシンを使用して、AIがどの状態にあり、どのような適切な決定が利用可能かを知る必要があります。
AIを開発するのがこれが初めてであれば、状態パターン、行動数学などのことを心配する必要はなく、そのテーマに関する本を入手する必要さえありません。
次のようなもので文字通り逃げることができます。
if( targetInRange == true )
{
FireAtTarget();
}
else if( bulletComingTowardsMe == true )
{
MoveAwayFromBullet();
}
else
{
WanderAroundAimlessly();
}
AIを正しく取得する主な側面は、キャラクターにどのような動作をさせたいか、そしてこれをどのように現実的に達成できるかを考えることです。したがって、基本的な宇宙船の敵の場合、実行可能なアクションは次のようになります。
そして、これらのアクションはいつ発生しますか?
キャラクターが存在できる「状態」の数が少ないため、これを行った後、上記のような単純なifステートメントを使用できます。これらは実装するのが非常に簡単な動作であり、実際に見栄えの良い動きをもたらす可能性があるため、ステアリング動作を確認することをお勧めします。
ここで見つけることができます:http://www.red3d.com/cwr/steer/
そして、私は間違いなくマットバックランドの本の推薦例ではプログラミングゲームAIをあなたが出始めている場合は特に、。
これらに本当に満足しているなら、州と戦略のパターンを見ることをお勧めします。
ポイントは、小さくてシンプルなものから始めることです。誰もがFSMやデザインパターンなどに夢中になっているこれらすべての用語について心配する必要はありません。まず設計と構築を行い、次に既存の方法または標準を使用してどのように改善できるかを心配します。
お役に立てば幸いです!
OpenSteerとそれに付随するSteering Behaviorsのドキュメントをご覧ください。ソースコードは初心者レベルではありませんが、その背後にある概念から良いアイデアが得られるはずです。
あなたは見たいかもしれない戦略デザインパターン。基本的に、船の振る舞いについて同じ基本戦略を書きます。
次に、ロジック(ステートマシン)を使用してこれらの戦略を選択します。例:船の盾が50%を下回った場合、ターゲットから逃げ、パワーアップ/回復アイテムなどに向かって移動します。
イアン・ミリントンによるゲーム用人工知能の本を購入することをお勧めします-それは素晴らしいです!:) http://www.ai4g.com/
ソースコードはGithub-MITライセンスにあります。
もちろん、C / C ++を使用していない場合、これはあまり重要ではありません。
しかし、人工の愚かさ/知性の世界への本当に素晴らしい入門書です。
それから必要になるものは、ステアリングとステートマシンです。手始めに。
ステートマシンを使用する場合の実用的なアドバイス:メガステートに注意してください。
逃げる位置の設定、高い目標速度の設定、すべての目標のクリアなどを処理する「逃げる」状態にするのは魅力的です。ターゲット位置の選択を処理するステートマシン、銃などを処理するステートマシン
個々のマシンに逃亡状態を追加する必要があるため、これは愚かに見えるかもしれませんが、1つまたは2つの出力のみに制限されているため、状態は非常に小さくなり、これは問題になりません。
また、各コントロールは個別に制御されるようになったため、攻撃状態で銃をコントロールしながら、逃げるターゲット位置を選択することになります。クーラント漏れのためにエンジン出力を節約しながら、敵を横取りすることができます。対策をダンプしながら、衝突を回避するように操縦できます。これらすべては、単一のすべてを網羅するステートマシンでは不可能です。
AIプログラミングを学習するための出発点のリストにこの本を追加します。限られたアプリケーションのアルゴリズムではなく、観察と動作の実装に重点を置いているため、タスクに適していると思います。
AIを作成する方法は、多くの部分で構成されているため、難しい質問です。
他のポスターは素晴らしい本を提案し、私はjacmoeによって提案されたAI4Gamesが好きです。それは部分的にはかなり一般的ですが(もちろん多くの本のように、もちろん理解できます)。
もちろん、各タイプのゲームには固有のニーズがあり、アーケード/シューティングゲームは、興味深いゲームプレイをサポートするために複雑なアーキテクチャを必要としません。シンプルなステアリングライブラリがその動作の基礎としての役割を果たします。その後、さまざまな種類の敵の詳細を追加します(一部は定期的に撮影し、一部はプレイヤーの動きを予測して撮影し、一部は敵に直面するためにターンし、他は調整します彼らの攻撃など)。
ゲームをプレイするときに何をするかを考えてください。いくつか質問してください。
次に、私がすることは、AIにプレイフィールドを見てもらい、AIがそれらの質問に基づいて実行できるアクションまたは動作のリストを作成することです。これらの動きを「スマートファクター」でランク付けして並べ替えます。次に、ランダム性とプレイヤーがゲームの開始時に選択した難易度の組み合わせに基づいて、動き/アクションを選択して実行するのと同じくらい簡単です。
その後、500ミリ秒後にもう一度やり直します。
学習能力などは何もありませんが、十分に調整すればかなり説得力があり、本当に重要なことです