回答:
Gamasutraの問題に関する非常に興味深い記事があります。インテリジェントミス:愚かさをAIコードに組み込む方法(ミックウエスト)。
この記事では、プールゲームAIについて説明します。このようなAIを実装する場合、各撮影でボールをポットにするのは非常に簡単です。AIを「スマート」にしない単純な方法は、他の答えで提案されているように、ランダムな要素を計算に追加して、AIをよりミスにします。
しかし、このようなアプローチには2つの大きな欠陥があります。まず、予測不可能です。「イージー」モードでプレイしているプレイヤーの場合、AIが「ラッキー」になることは受け入れられません。あなたのランダムな要因がAIにさらに良いショットをさせたり、より価値のあるボールを打ったり、コンボをさせたりしたらどうでしょうか?何が起こるかわからないので、ラッキーであることは、イージーモードのAIの選択肢ではありません。
もう1つの欠点は、プレーヤーがAIの動作のパターンを識別しようとすることです。そして、単純なランダム係数では、パターンはありません。しかし、それはプレーヤーが実際にはパターンをまったく見ないということではなく、まったく逆です。AIが幸運になるとすぐに、プレイヤーはその行動に戦略を見るでしょう。この記事では、プレーヤーはAIがポジション戦略をプレイしていることに不満を言っています。角度精度にランダムな要因がある場合。
私の観点からは、この目を見張るような記事を読んだ後、不完全なAIは単純化の要素としてランダム化を使用すべきではありません。それはまったく逆です。より簡単なAIはより賢くなければなりませんが、プレーヤーを助けようとします。
プールゲームの例の記事で、「イージーモード」AIを実装するための最良のオプションは、実際にはすべてのランダム要素を削除し、ポジショニング戦略を追加することでした。AIはプレーヤーに簡単で素晴らしいショットを準備するためにボールを打とうとします。
このようにして、プレーヤーは自分が幸運になったと思うでしょう。そして、それはあなたがそれを簡単にプレイするときにゲームに期待していることです。
重要な概念は、NPCに「完全な知識」を与えないようにすることです。
もっとたくさんの例が提供されると確信しています。おそらくあなたのゲームについて教えていただければ、より具体的になるでしょう:-)
完璧なAIを戦闘可能にする簡単な方法の1つは、入力または出力のいずれかに「ノイズ」を追加して、不完全な決定を下すことです。ノイズとは、ランダムな要素を意味します。
出力の小さな例を次に示します。
入力に関するいくつかのアイデアを次に示します。
考慮すべき明らかなことの1つは、AIの速度です。ほとんどのゲームでは、AIが反応することができMUCH(RTSゲームでは非常に目に見える)(特に戦闘で)速く、人間よりも、見掛けマルチタスクを実行します。そのため、AIを少し遅くして(おそらく適応的に)AIを実行し、決められた時間内に実行できることの量を制限する(つまり、0.5秒ごとに1アクション)必要があります。
これがお役に立てば幸いです!
あなたが何をしようとしているかを正確に知らずに、直接役に立つ答えを出すことは困難です。
私はあなたを助けるかもしれない主題について言いたいことが2つあります。
最初に(そしてこれが最も重要なものです)、敵をより面白く人間的に感じさせようとする場合、戦闘戦術は無関係です。プレイヤーを敵が生きていると「信じさせる」ための秘Theは、アニメーション、サウンド、および細部を使用して人間の行動を暗示することです。完璧なAIは、角を曲がって歩き、プレーヤーを見て、撃つかもしれません。人間のAIは、角を曲がって歩き、プレーヤーを見て、驚いた顔をして警戒して叫び、撃ちます。最初のものはロボットのようです。2番目は人間のようです。どちらも、撮影の直前にアニメーションを挿入することを除いて、すべての方法で同一のAIを使用しています(または、撮影中に戦術的な振る舞いを同じに保つため)。
第二に、ランダム化を避けます。プレイヤーは、デザイナーが彼らがそうするだろうと思っているほど感謝しません。プレイヤーは「コンピューターが100のうち1つを生成し、その後に5、3、および4が生成されたため、最後の4ショットのエラー係数は1%、5%、3%、および4%でした。なぜこのラウンドで0.5秒で死んだのか」プレイヤーは、見逃すことのない敵を時々見逃したり、認識できない理由で繰り返し釘を刺したりします。優れたゲームデザインは、主に人間のプレイヤーができるパターンを構築することですプレイヤーが幸運に恵まれたかどうかを判断するのではなく、彼自身の判断とスキルと直感に基づいて、プレイヤーの成功を観察し、学び、打ち負かします。ランダム化の衝動は、卓上ゲームやギャンブルゲームの経験から生じます。どちらもビデオゲームとは信じられないほど異なる媒体です(また、ある媒体で機能するものは別の媒体では意味をなさないことがよくあります)。
大学のAIコースで、AIをより「人間的」で完璧ではないものにするというトピックがあったことを覚えています。それは何年も前のことだったので、頭の中でいくつかの箇条書きを思い出しただけです。
もちろん、これらは各ケースで調査およびプレイテストする必要がある単なる一般的なアドバイスであり、実際にAIが意図したものよりもさらに人工的に見える場合があります。しかし、それらは良い出発点だと思います。
このポップアップが表示され、過去に使用したアイデアを共有したいと思いました。
キャラクターに3つの動きがあり、それぞれにスコアが付けられているとしましょう。スコアが高いほど動きが良くなります。(他の回答では、このスコアの作成にノイズを追加することについて説明しています。)
合計ポイントを合計する(100)
キャラクターの知性の統計値を、この統計情報の最大可能値(100のうち60としましょう)から取り出します。
0(または他のフロア)とインテリジェンス比(0.6)の間の乱数を生成し、合計ポイント(100)を掛けます。この例では、結果が45であるとしましょう。
ここで、ゼロに達するまで、この値から悪い動きの減算を開始します。(順番に減算します。)
最初に、20を獲得したIceスペルを検討します。45-20 =25。これはゼロを超えているため、Iceスペルをスローします。
第二に、30ポイントの価値がある剣で攻撃を見てください。25-30 = -5。しきい値に達したので、剣による攻撃を選択します。
このシステムでは、知能の低いキャラクターは最高の動きを選択しません。そして、知能の高いキャラクターは、しばしば最高の動きを選びます。(この例では、完全なインテリジェンスを持つキャラクターが50%の時間で最高の動きを選択します。)
フロアメカニズムを乱数に追加すると、より良い動きが選択される可能性が高くなります。