誰もが知っている、非常に単純なシューティングを想像してください。
あなたはプレイヤーです(緑)。あなたの動きはX
軸に制限されています。私たちの敵(または敵)は画面の上部にあり、彼の動きもX
軸に制限されています。プレイヤーは敵に弾丸(黄色)を発射します。
プレイヤーの弾丸を回避するのに本当に優れているはずの敵にAIを実装したいと思います。私の最初のアイデアは、画面を個別のセクションに分割し、それらに重みを割り当てることでした。
2つの重みがあります。「弾丸の重量」(灰色)は、弾丸によって課される危険です。弾丸が敵に近ければ近いほど、「弾丸の重量」0..1
が高くなります(ここで、1が最も危険です)。弾丸のないレーンのウェイトは0です。2番目のウェイトは「距離ウェイト」(ライムグリーン)です。すべての車線に0.2
移動コストを追加します(この値は現在では任意であり、調整可能です)。
次に、重みを追加し(白)、重みが最も小さいレーンに移動します(赤)。しかし、このアプローチには明らかな欠陥があります。最適な場所は、 2つの入ってくる弾丸の間(白い矢印で示されているように)であるため、極小値を簡単に見落とす可能性があるからです。
だからここに私が探しているものがあります:
- 弾丸の脅威を課す場所がない場合でも、弾丸嵐を乗り越える方法を見つける必要があります。
- 敵は、最適な(またはほぼ最適な)ソリューションを選択することで、確実に弾丸をかわすことができます。
- アルゴリズムは、弾丸の移動速度を考慮できる必要があります(異なる速度で移動する可能性があるため)。
- さまざまなレベルの難易度を適用できるようにアルゴリズムを微調整する方法(超知能の敵には馬鹿です)。
- 敵は弾丸を避けたいだけでなく、プレーヤーを撃つこともできるため、アルゴリズムはさまざまな目標を許可する必要があります。つまり、弾丸をかわすときは、敵がプレイヤーを射撃できる位置が優先されるはずです。
それでは、これにどのように取り組みますか?このジャンルの他のゲームとは対照的に、私は少数の、しかし非常に「熟練した」敵を大勢の愚かな敵の代わりに持ちたいです。