AIを作成するのは初めて-どこから始めますか?[閉まっている]


58

私はゲームプログラミングの初心者であり、互いに戦う2つの宇宙船で基本的な2Dトップダウンスペースゲームを作ろうとしています。私はユーザー制御の宇宙船でうまくやっていますが、AIのプログラミングを開始する方法すらわかりません。特定の方法/パターンはこの状況に適していますか?どこから始めますか?


1
これが、私が作成したコースのAIに関するスライドです。sol.gfxile.net
ジャリコンパ

4
ifステートメント。それらの多くは。
減速

回答:



27

AIを開発するのがこれが初めてであれば、状態パターン、行動数学などのことを心配する必要はなく、そのテーマに関する本を入手する必要さえありません。

次のようなもので文字通り逃げることができます。

if( targetInRange == true )  
{
    FireAtTarget();
}
else if( bulletComingTowardsMe == true )
{
    MoveAwayFromBullet();
}
else
{
    WanderAroundAimlessly();
}

AIを正しく取得する主な側面は、キャラクターにどのような動作をさせたいか、そしてこれをどのように現実的に達成できるかを考えることです。したがって、基本的な宇宙船の敵の場合、実行可能なアクションは次のようになります。

  • 動き回る
  • 逃げる

そして、これらのアクションはいつ発生しますか?

  • 動き回る-他に何もする必要はありません
  • 火-敵を見つけたとき
  • 逃げる-健康状態が悪いとき/火を吹くとき/など

キャラクターが存在できる「状態」の数が少ないため、これを行った後、上記のような単純なifステートメントを使用できます。これらは実装するのが非常に簡単な動作であり、実際に見栄えの良い動きをもたらす可能性があるため、ステアリング動作を確認することをお勧めします。

ここで見つけることができます:http://www.red3d.com/cwr/steer/
そして、私は間違いなくマットバックランドの本の推薦例ではプログラミングゲームAIをあなたが出始めている場合は特に、。

これらに本当に満足しているなら、州と戦略のパターンを見ることをお勧めします。

ポイントは、小さくてシンプルなものから始めることです。誰もがFSMやデザインパターンなどに夢中になっているこれらすべての用語について心配する必要はありません。まず設計と構築を行い、次に既存の方法または標準を使用してどのように改善できるかを心配します。

お役に立てば幸いです!


:)編集チームメイトのため@Fuu乾杯
レイ・デイ

9

OpenSteerとそれに付随するSteering Behaviorsのドキュメントをご覧ください。ソースコードは初心者レベルではありませんが、その背後にある概念から良いアイデアが得られるはずです。


ゲームでopensteerを使用していますか、それともシミュレーション用ですか?
-jle

少なくとも開発中のゲームで使用しようとしています。これまでのところ私にとってはうまく機能しています。著者はソニーのプレイステーショングループで働いている間にそれの多くを開発したと信じています-それはおそらくいくつかのゲームになったでしょう。MobyGamesは、JohnMadden FootballのクレジットとLeisure Suit Larryのゲームの1つに彼を挙げています。
AShelly

FreeOrionは、戦術戦闘エンジンでOpenSteerを使用しています。
マイクストロベル

1
+1 opensteerに言及するため。非常に単純な動作を組み合わせて、非常に複雑で複雑に見えるものを形成する素晴らしい例をいくつか見たい場合。ステアリング動作をチェックしてください!Google、「ボイド」といくつかのクールな使用を見てください。あなたが望むものは静かではありませんが、単純さから複雑さが生じることを示します
-onedayitwillmake

9

あなたは見たいかもしれない戦略デザインパターン。基本的に、船の振る舞いについて同じ基本戦略を書きます。

  • ターゲットに近づく
  • 攻撃対象
  • ターゲットから逃げる
  • パワーアップに向かう
  • パワーアップを使用する

次に、ロジック(ステートマシン)を使用してこれらの戦略を選択します。例:船の盾が50%を下回った場合、ターゲットから逃げ、パワーアップ/回復アイテムなどに向かって移動します。


1
ゲームループを実行するたびに、それらの「戦略」のどれを優先するかを決定し、それを実行しますか?
-jle

@jleかなり。そのため、戦略はそれぞれ独自のクラスに分類され、コードが整理されます。
ブライアンデニー

7

イアン・ミリントンによるゲーム用人工知能の本を購入することをお勧めします-それは素晴らしいです!:) http://www.ai4g.com/

ソースコードはGithub-MITライセンスにあります。

もちろん、C / C ++を使用していない場合、これはあまり重要ではありません。

しかし、人工の愚かさ/知性の世界への本当に素晴らしい入門書です。

それから必要になるものは、ステアリングとステートマシンです。手始めに。


2

ステートマシンを使用する場合の実用的なアドバイス:メガステートに注意してください。

逃げる位置の設定、高い目標速度の設定、すべての目標のクリアなどを処理する「逃げる」状態にするのは魅力的です。ターゲット位置の選択を処理するステートマシン、銃などを処理するステートマシン

個々のマシンに逃亡状態を追加する必要があるため、これは愚かに見えるかもしれませんが、1つまたは2つの出力のみに制限されているため、状態は非常に小さくなり、これは問題になりません。

また、各コントロールは個別に制御されるようになったため、攻撃状態で銃をコントロールしながら、逃げるターゲット位置を選択することになります。クーラント漏れのためにエンジン出力を節約しながら、敵を横取りすることができます。対策をダンプしながら、衝突を回避するように操縦できます。これらすべては、単一のすべてを網羅するステートマシンでは不可能です。


2

ゲームAIの行動数学

AIプログラミングを学習するための出発点のリストにこの本を追加します。限られたアプリケーションのアルゴリズムではなく、観察と動作の実装に重点を置いているため、タスクに適していると思います。


1

AIを作成する方法は、多くの部分で構成されているため、難しい質問です。

  • AIの一般的なアーキテクチャ/パラダイムを選択します。スクリプトに基づいていますか?計画を使用しますか?シンプルなFSMですか、それともBTが好きですか?
  • 次に、特定の実装/ツールセットを使用してこれらのパラダイムを適用します。
  • アーキテクチャで使用する動作を考える必要があるため、ゲームデザインの選択肢が残っています。

他のポスターは素晴らしい本を提案し、私はjacmoeによって提案されたAI4Gamesが好きです。それは部分的にはかなり一般的ですが(もちろん多くの本のように、もちろん理解できます)。

もちろん、各タイプのゲームには固有のニーズがあり、アーケード/シューティングゲームは、興味深いゲームプレイをサポートするために複雑なアーキテクチャを必要としません。シンプルなステアリングライブラリがその動作の基礎としての役割を果たします。その後、さまざまな種類の敵の詳細を追加します(一部は定期的に撮影し、一部はプレイヤーの動きを予測して撮影し、一部は敵に直面するためにターンし、他は調整します彼らの攻撃など)。

  • ゲーム(AI)コーディングについて学ぶ最良の方法は、実行中の良いコードを見ることだと思います。したがって、ohloh.netとgithubを探索し、既存のFOSSプロジェクトを探してください!
  • もちろん、難しい部分を選択し、既存の(ただし単純な)ゲームをプレイできます。動作をリバースエンジニアリングし、「これをどのように設計しますか?」と考えてください。もちろん、ヒントは常に役立ちます。それがおそらく、あなたがここgamedev.SEで尋ねた理由です!
  • 中間にあるものは、GameMakerフォーラム内の既存のシューティングゲームをあまりにも見ています!トリックを実行する簡単なスクリプトをたくさん見つけることができます!;)

1

ゲームをプレイするときに何をするかを考えてください。いくつか質問してください。

  • 決定を下すにはどのような情報が必要ですか?
  • いつ変更に対応しますか?
  • この特定のプレイセッションでの私の「長期」目標は何ですか?

次に、私がすることは、AIにプレイフィールドを見てもらい、AIがそれらの質問に基づいて実行できるアクションまたは動作のリストを作成することです。これらの動きを「スマートファクター」でランク付けして並べ替えます。次に、ランダム性とプレイヤーがゲームの開始時に選択した難易度の組み合わせに基づいて、動き/アクションを選択して実行するのと同じくらい簡単です。

その後、500ミリ秒後にもう一度やり直します。

学習能力などは何もありませんが、十分に調整すればかなり説得力があり、本当に重要なことです

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.