AIを単純な2Dシューティングゲームに書き込む経験について

読者の皆様、ご挨拶申し上げますが、2003年から2004年の遠い年に、単純な2DおもちゃのAIを作成した経験についてお話したいと思います。 私は人生でエッセイを書くことに決して成功したことはないとすぐに言いますが、試してみます。

ほとんどの場合、ゲーム開発者はこの投稿Nubianを見つけるでしょうが、残りが興味深いものになることを願っていますので、最初から始めましょう。



ゲームの世界


ゲームの世界は同じサイズの「四角」で構成されており、テレポート、ジャンパー、およびプレイヤーの位置を変更する他の要素が突然利用可能になります。

有用な要素は、武器、カートリッジ、救急箱、鎧などの形で地図上に散らばっています。 プレイヤーは、ゲームの世界を自由に移動できるように、スペースでロングジャンプをプレイできます。



ゲームの世界



将来のボットのタスクは、プレイヤーに優雅に屈服し、可能な場合はできるだけ多くの敵を殺すために、絶対に新しいマップを自由にナビゲートすることです。



優先システム


AIボットの本質は、優先順位のシステムに基づいています。 立つことができるマップ上の各重要ポイントが配列に入力され、各要素の重みが現在の状況に基づいて計算されます。

重要なポイントには、救急キット、アーマー、武器の位置、敵が現在地上にいる場合の位置が含まれます。 応急処置キットでのポジションの重量は、健康レベルの量とポイントに到達するのに必要な時間に反比例し、応急処置キットに選択された特定の条件付き重量に直接比例します。

健康レベルが完全な場合、このポイントの重みがリセットされることは完全に明らかです。 状況は他の重要なポイントと似ています。 敵の位置は、体力が低いか、武器がない場合に優先されます。 武器の位置は、存在しない場合は重量を増やし、存在する場合はゼロに等しくします。 目標の修正は、数秒ごとに1回、または現在のターゲットの位置に到達したときに行われます。

すべてが語られたように見えますが、説明されたAIが機能しなかったもう1つのポイントがあります。重要なポイントに到達するまでの時間の計算です。



最短の方法


AIシステムがゲームプロセスを遅くしないようにするために、マップの開始時に動きが計算されます。 同時に、立つことができる各ポイントにはシリアル番号が割り当てられ、ポイント間の距離はプレーヤーの1ステップに等しくなります。 ゲームの開始前に、動きの完全な計算が行われました。 ボットはこれらの各ポイントに順次配置され、それ自体に対して可能なアクションを実行しました。左へのステップ、右へのステップ、左への弱いジャンプ、左への強いジャンプなど。

アクションが完了した後、ゲームプロセスはボットが停止するまで続き、その後、結果は「[開始点] [アクション] = {タッチダウンポイント、移動時間}」という形式の2次元配列に保存されました。 このメカニズムにより、ボットはテレポーター、ジャンパー、ゲーム世界の他の要素を次のように使用できます。 ボットは、ポイントXにいて左に足を踏み入れると、N秒後にポイントYに現れることを知っていました。

全世界でこの配列を使用して、「[開始点] [終了点] = {最短移動時間}」という形式の動きの配列が作成されました。 このため、かなり一般的なウェーブアルゴリズムが使用されました。

波動アルゴリズム



さらにアクションのみ:

波動アルゴリズム



その結果、ボットはいつでも目標を達成するための正確な時間と、これに必要な一連のアクションのリストを取得できます。



自己学習


最適な重量パラメータを選択するためにミニトーナメントが編成されました(救急キット、武器、または弱い敵を殺すよりも重要です)。 それぞれ10個のボットが関与し、それぞれの重みパラメーターはランダムな値で異なりました。 20分間の節約の後、最強のものが目立って次のレベルの戦いに移り、すでに強い敵を殺しました。 その結果、ライブプレイヤーにとってはかなり良いライバルになりました。もちろん、彼は完全に賢く呼ぶことはできませんが、応急処置キットまたは弾薬を時間内に退却して走らせることができます。

照準や最高の武器の選択など、その他のポイントは非常に退屈であり、注意する価値はありません。

最後までお読みください。 そして最後に、このアクションの短いビデオ:




All Articles