ポケモンのような1対1の戦いでAIを設計する


7

私は戦闘システムがポケモンに似ているゲームを設計しています。つまり、数少ない移動(4-6)での1対1の戦いから選択します。ゲームが形になっているので、敵のAIなど、より難しいコーディング領域について考え始めており、いくつか質問があります。私はすでにAIを設計するためのいくつかの可能性を考えており、あなたのフィードバックも聞きたかったです。

私のゲームでは、すべてのモンスターが同じロジックを使用して、使用する動きを決定するユニバーサルAIを試すことを考えています。これは、各移動に割り当てられた方程式/値に基づいており、どちらが最適かを決定します。たとえば、モンスターの動きが相手に抵抗される(1/2ダメージ)場合、他のモンスターよりも低い効果値を受け取り、脆弱性のために追加のダメージを与える動きはより高い効果値を受け取ります。また、コンピューターが常に同じ動きを使用することを避けるために、動きが繰り返し使用された場合に値を減らす変数を追加することを考えていました。これは現在、コンピュータに最高のダメージを与えることだけに限られていると感じています。助言がありますか?

私の質問のためにSO。

  1. 各モンスター/ポケモンのAIロジックを設計することと、すべての一般的なルールセットを使用することは、コードとAIの有効性の点でゲームのサイズにどのように影響しますか?

  2. この方法でAIを設計することについて説明するリソースはありますか?ポケモンゲームのAIについてはほとんど発見できなかったので、他のどのゲームがメカニクスで似ているのかわかりません。

御時間ありがとうございます!

回答:


12

モジュール化されたコンポーネントを備えた一般化されたAIは、おそらくコードが小さくなり、より多くの文字に拡張しやすくなります。すべての文字に対して一般的な重み付けシステムを構築すると想定した場合の考慮事項の例をいくつか示します。

-各キャラクターに、セットリストから「個性」または「態度」を割り当てることができます(例:「攻撃的」、「防御的」、「ランダム」)。次に、重み付け式にそれを考慮させます。つまり、攻撃的なキャラクターはダメージを与える動きにより多くの重みを与え、防御的なキャラクターは自身の回復に大きな重みを与えます。次に、各キャラクターに独自のスクリプトを書くのではなく、各キャラクターに個性を割り当てるだけです。

-常に「最良の」オプションを選択する代わりに、AIは各オプションに重みを付けて、ランダムに決定することができます。したがって、4つの移動が与えられ、計算された値がこの順番で60、35、25、および20になる場合、合計は140になります。1から140の範囲の乱数を選択し、重みと照合してどれを決定するか移動が使用されます。これにより、AI は通常最高の動きをしますが、別の選択肢であなたを驚かせることがよくあります。

-各AIキャラクターに数値の「スキル」評価を与えることができます。これは、彼らが最高の動きを選ぶ可能性をスケーリングするために使用されます。

-ポケモンには直接ダメージを与えず、代わりにステータスエフェクト、バフ、デバフを適用するたくさんの動きがあることを思い出してください。各キャラクターに、ダメージを与える動きとダメージを与えない動きの数値的な好みを与えることができます。また、直接攻撃を開始する前に、彼らが使用するダメージのない動きのセット数または可能な範囲を与えることもできます。現在の自己と対戦相手のHPの値は、戦略的な動きを使用する場合と比べて、攻撃を重み付けするための公式の要因となる場合もあります。両方が完全な状態にある場合は、セットアップする時間がありますが、それぞれのHPの断片になっている場合、それは攻撃を使用する時です(うまくいけば、最初にヒットするものです!)。

-また、ポケモンには二次的な効果を持つ攻撃があります。より多くのダメージを与える攻撃に対して、スタンする可能性のある弱い攻撃よりも常に優先される攻撃をどのように重み付けするかを検討してください。


それらの提案をたくさんありがとう。いくつかの異なるスタイル(アグレッシブ、ディフェンシブ)を設定していくつかのバラエティを追加し、ステータスエフェクトやダメージムーブなどのさまざまなものに重みを与えることは、素晴らしいアイデアだと思います。
12

5

したがって、最大の懸念はコードとAIの有効性です。あなたの質問には44のビューがあり、提案はないので、基本的なゲーマー、特にポケモンゲームをプレイしたゲーマーのアイデアを気にしないと思いました。私はAIの背景を持っていませんが、プログラミングの背景はほんの少ししかありませんが、

ポケ(ポケモン)ごとに固有のAIがある場合、コードが巨大になる可能性があります。したがって、Pokeクラスと、クラスごとのAI(戦略セット)が必要です。問題は、classes = nの場合、「i = nからi = 0までの合計」戦略セット(SS)を作成することです。

Example: 
Classes A, B, C have match-ups AA, AB, AC, BB, BC, CC. n=3 SS=6=3+2+1
Classes ABCD; match-ups AA AB AC AD BB BC BD CC CD DD. n=4 SS=10=4+3+2+1

クラスを典型的な方法で設計する場合、すべてを解決する方法があります。火が打たれるように、水は地球を打ちます。したがって、各PokeはClass of Pokeの識別子を持つことができます。また、あなたは最大5移動と言っています。

Example:
Pikachu's "growl" has the same effect as Raticates "squeal" to "Lower defense"

Pokeオブジェクトには次のものが含まれます

  1. クラスです(A、B、Cなど)
  2. 他のクラスに対して使用する移動を優先する順序付きリストのクラス番号

    例:ピカチュウ:クラスA. StrategySet A; 12345、B; 34512 C; 51234 Chrmndr:クラスB. StrategySet A; 21543、B; 12345 C; 34512 Squirtl:クラスC. StrategySet A; 43215、B; 21543 C; 12345

彼らが戦うとき(たとえば、ピカチュウvsチャーマンダー)、CPUがピカチュウの場合、チャーマンダーオブジェクトはクラスBをピカチュウに渡し、CPU-ピカチュウは戦略セットBを選択します;これは、クラスBの対戦相手と優先順位付けされる方法です。 。これらの5つの動きは、一般的なカテゴリ(攻撃、防御、自己スピードアップ、敵スピードダウン、敵攻撃ダウン)または何を持っているかに分類されるため、コンピューターは何を最初に使用するかを認識しています。リスト内の他のアイテムの使用は、対戦相手のヘルス頻度のようなパラメーターまで、あるいは最大値を超える優先度の値のシミュレーションのようなクレイジーなものでさえあり得ます。


0

言及されているように、ピクセルモンのバトルコードでいくつかの作業を行いましたが、それは移動の重み付けされたオプションで機能しますが、気になるステータスもあり、速度属性を使用して移動を決定します+バフ/デバフ/アイテムそのターンの注文、次のターンの再計算。

ただし、すべてが戦闘の開始時に事前に決定されているため、ポケモンスタイルのゲームで使用できる移動やアイテムは限られています。

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