タグ付けされた質問 「ai」

ゲーム内エンティティがその動作について決定を行う方法の設計および/またはロジック。

1
ビヘイビアツリーのコード例
http://altdevblogaday.org/2011/02/24/introduction-to-behavior-trees/ 明らかに、私がこのウェブサイトで見つけた最も興味深い記事。あなたはそれについてどう思いますか ? それはいくつかのコード例を欠いています、あなたは少しも知りませんか?また、ステートマシンはビヘイビアツリーに比べてあまり柔軟ではないことも読みました...その上、ステートマシンと状態パターンの間に真のリンクがあるかどうかはわかりません...
23 ai  state  tree  behavior 

6
スペルキャスト-毎秒のダメージを最適化する方法
いくつかの呪文を知っているウィザードがあると想像してください。各スペルには、ダメージ、クールダウン時間、キャスト時間の3つの属性があります。かなり標準的なRPGのもの。 クールダウン時間:その呪文を再び唱えることができるまでにかかる時間(t)。呪文は、キャストを開始した瞬間に「クールダウン」します。 キャスト時間:呪文を使用するのにかかる時間(t)。ウィザードが何かを唱えている間、別の呪文は唱えられず、キャンセルすることもできません。 質問は次のとおりです。異なるスペルのセットを与えられた場合、どのようにダメージを最大化するのでしょうか? キャストタイムごとの最大ダメージを計算するのは簡単です。しかし、はるかに高い呪文が利用可能な場合、低ダメージの呪文を「スタック」してキャストするのを待つ方が良い状況ではどうでしょうか? 例えば、 ファイアボール:3000ダメージ、3秒のキャスト時間、6秒のクールダウン。 フロストボルト:ダメージ20、キャスト時間4秒、クールダウン4秒。 ファイヤーブラスト:ダメージ3、キャスト時間3秒、クールダウン3秒。 この場合、フロストボルトではなく、DPCTの低いスペル(ファイアブラスト)を選択すると、1秒あたりのダメージが大きくなります。そのため、呪文を選択した結果を考慮する必要があります。 次の例は、「オーバーキャスト」と「待機」の場合です。

10
利用可能なAIミドルウェア[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 AIミドルウェアの便利なリスト。URL、無料/オープンソースまたはライセンス、およびアビリテの簡単な説明を提供してください。 フォーマット: *Package* (License) Link Pros Cons
22 ai 

3
ドワーフ要塞の命令順序アーキテクチャ
AI用のコマンドオーダーシステムを実装する最もエレガントな方法は何ですか?たとえば、小人の要塞では、森林伐採エリアに木材の切断をマークすると、小人は次のシーケンスを実行します。 木に行く 木を切る 備蓄に木材を届ける 別の木に行く 等々.. 私はすでにスタックコマンドが動作していません。アイドル状態からツリーの宛先タイルに到達する1。 私が恐れているのは、このような注文をさらに作成すると、これがどのように面倒になるかです: 家を建てる 備蓄に行く 建設エリアに木材を持ち込む 備蓄に戻る 建設エリアに石を持参 建物のスプライトをアニメートする 植付 備蓄に行く 種を農場に持ち込む 醸造 備蓄に行く 植物を静止させる 醸造スプライトをアニメートする だから私の質問は、ドワーフ要塞のようなコマンド順序システムをどのように実装し、同時にスパゲッティコードを回避するのですか?調査する必要があるデータ構造はありますか?コマンドシーケンスを別のxmlファイルに配置する必要がありますか?

6
衝突100%回避の実装
私は、ゲーム開発と、私が知っているすべての衝突回避/解像度については、私はそれを学んだと絶対初心者だ上またはを通じて、過去の週に、このサイト...私はここに求めているものですので、もし正しい私に躊躇しないでください間違った仮定/誤解に基づいています。明確にするために最善を尽くしましたが、それは主題がまだ私にとって斬新であると言いました。 乗り物 私のゲームでは、自律的に移動する車両があります。それらは3D空間に配置され、その動きは各車両ごとに異なる多くの変数によって管理されます。ここで関心のあるものは主に: 前進のみ。 速度最小と最大の間で変化することができるが、その分ではない(でも近くに)ゼロ。 速度に依存するステアリング半径(速度が速いほど、半径が大きい) 2つの最大加速度(速度の増減に使用) ゴール 私の目標は、100%正確な衝突回避を実現する何らかのAIを実装することです(つまり、車両が衝突することはありません)。 設計 が、私はより多くのAIを持つことのアイデアを好む「オンボード」(すなわち、最終的に照会および/または他の車両へメッセージを送信する、それ自身の「AI回避衝突」を有する各車両)私はでCA AIを実装することも可能です中央レベル(車両へのコマンドのディスパッチ)。 ほとんどの場合、車両はあら​​ゆる方向に互いを避けなければなりませんが、特定の状況では、衝突を避けて同じターゲットに向かう必要があります これまでに見つけたものと行き詰まった場所 このサイトの他の質問で見つけた多くのリンクの中で、特にこれらのリンクを使用していることがわかりました。 プールボール同士の衝突 不当な衝突回避 待ち行列 これらの3つのリンクは多くの点で「目を開きました」が、私の場合、その情報をどのように使用するかがすぐにはわかりません。特に記事#2では、衝突を防ぐために「試行」するだけです(ただし、衝突は時々発生します)。記事3では、衝突を防ぐために車両を時々停止する必要があります。 私が気づいたのは、上記のリンクされた衝突回避アルゴリズムが線形速度の「瞬時投影」を使用して、何かが車両の途中にあるかどうかをチェックすることです。私の場合、これで十分なのか、もっと現実的な方法で自分の位置を投影する必要があるのか​​疑問に思っていました(例:右に90°のステアリングに60°いる場合、残りの位置について自分の位置を計算する必要があります曲線の30°、および直線運動を想定)。 最後に、私は特にデッドロックを恐れています。つまり、世界の車両の密度はかなり低くなりますが、特定の数の車両が同じポイントに向かって収束すると、衝突コースにいることに気づいたら、回避操作は不可能になるのではないかと心配しています車両が他の車両と衝突する経路にあるためです。 質問 「目標」に到達するにはどうすればよいですか?もちろん、詳細な説明は大歓迎ですが、外部リソースへのリンクも大いに役立ちます(この問題に最初に取り組んでいるとは思いませんが、おそらくWebの検索に間違ったキーワードを使用しましたか? ) よろしくお願いします!

3
チェッカー/ドラフトにAIを実装する方法は?
このチェッカーゲームを見て、AIがどのように実装されているのか疑問に思いました。 チェッカー(ドラフト、ダマ、ダメ)にAIを実装するにはどうすればよいですか?既知のアルゴリズムはありますか? すべてに完全にひそかに。このTic Tac Toeゲームチュートリアルのブログ投稿を見るのは非常に不思議です。 だから、私はダマゲームアルゴリズムのオープンソースコードとブログの投稿が欲しいです。役に立つリンクやドキュメントファイルはありますか?私にお知らせください..
21 algorithm  ai 

4
コンポーネントベースのゲームアーキテクチャに動作を実装する方法
プレイヤーと敵のAIをゲームに実装し始めていますが、これをコンポーネントベースのゲームアーキテクチャに最適に実装する方法について混乱しています。 次のプレイヤーキャラクターがいて、静止したり、走ったり、剣を振ったりできるとします。プレイヤーは、静止状態とランニング状態の両方からスイングソード状態に移行できますが、プレイヤーが立ち上がったり走り回ったりする前にスイングを完了する必要があります。スイング中、プレーヤーは歩き回ることができません。 ご覧のとおり、2つの実装アプローチがあります。 すべてのプレーヤーロジックを含む単一のAIコンポーネントを作成します(実際のコンポーネントから切り離されるか、PlayerAIComponentとして埋め込まれます)。プレーヤーエンティティを構成する個々のコンポーネント間の結合を作成せずに、状態制限を強制する方法を簡単に実行できます。ただし、AIコンポーネントは分割できません。たとえば、立ち上がって歩き回るだけの敵や、歩き回って剣を振り回すだけの敵がいる場合、新しいAIコンポーネントを作成する必要があります。 動作をコンポーネントに分割し、それぞれが特定の状態を識別します。次に、SandComponent、WalkComponent、SwingComponentを取得します。移行ルールを実施するには、各コンポーネントを結合する必要があります。SwingComponentは、スイングの間、StandComponentとWalkComponentを無効にする必要があります。たまに剣を振り回すだけの敵がいる場合、SwingComponentが存在する場合にのみWalkComponentを無効にする必要があります。これにより、より良いコンポーネントの組み合わせが可能になりますが、依存関係が追加されるたびに保守性の悪夢につながる可能性があります。既存のコンポーネントは、依存関係がキャラクターに課す新しい要件でうまく動作するように更新する必要があります。 理想的な状況は、エンジンやスクリプトコードの1行に触れることなく、コンポーネントをコンテナにドラッグすることで、デザイナーが新しい敵/プレイヤーを構築できることです。スクリプトのコーディングを回避できるかどうかはわかりませんが、できるだけシンプルに保ちたいと思います。 すべてをまとめる:すべてのAIロジックを1つのコンポーネントに分割するか、各ロジック状態を個別のコンポーネントに分割して、エンティティバリアントをより簡単に作成する必要がありますか? 編集:私は私が最初と2番目の状況で何を意味したかについていくつかの混乱があると思う。以下の図で説明しようとしました。 個々の状態とエンティティ間の関係に注意してください。最初の状況では、AIコンポーネントはエンティティに配置される前に事前に構築されます。デザイナーが選択できるのは、プログラマーが利用できるAIComponentsの異なるセットからのみです。2番目の状況には、他のコンポーネントと同じレベルの異なる状態があります。設計者は、プログラマーの干渉なしに、独自のAIでエンティティを作成できるようになりました。 問題は、これらがコンポーネントベースのエンティティでAIを構築するための2つのオプションであり、もしそうなら、最大の柔軟性を与えるものは何ですか?

6
「トラフィックAI」を構築する方法は?
私が現在取り組んでいるプロジェクトは、車が道路に沿って移動する、飛行機がエプロンの周りを移動するという意味で、多くの「トラフィック」を特徴としています 現在、使用可能なパスは事前に計算されているため、ノードは、それ自体がエッジで相互接続されている交差点に対して自動的に生成されます。キャラクター/エージェントがワールドにスポーンすると、ノードから開始し、単純なA *アルゴリズムによってターゲットノードへのパスを見つけます。エージェントはパスをたどり、最終的に宛先に到達します。今のところ問題ありません。 ここで、エージェントが衝突を回避し、複雑な交通状況を処理できるようにする必要があります。私はAIの分野に慣れていないので、ステアリング動作に関するいくつかの論文/記事を調べましたが、レベルが低すぎることがわかりました。私の問題は、実際の衝突回避(エージェントは厳密に定義されたパスに従うため、この場合はかなり単純です)ではなく、あるエージェントが行き止まりを去り、別のエージェントがまったく同じものを入力したいような状況です。または、2人のエージェントがボトルネックで会議を行い、一度に1人のエージェントしか通過できないが、両方がそれを通過する必要があり(前に見つかった最適なルートに従って)、もう一方を最初に通過させる方法を見つける必要があります。したがって、基本的に問題の主な側面は、デッドロックを回避するためにトラフィックの動きを予測することです。 説明するのは難しいが、私はあなたが私が意味するものを得ると思います。どこから探し始めるかについて、何かアドバイスはありますか?私を始めることができる論文、サンプルプロジェクト、または同様のものはありますか? 私はあなたの助けに感謝します!
21 ai  movement 

3
障害物の周りの多くの群がっている敵を効率的に経路探索する
私はゲームの敵の経路探索を改善しようとしています。現在、彼らは基本的に、プレイヤーとプレイヤー間の角度を計算し、その方向に移動することにより、プレイヤーの正確な位置に向かって絶えず移動しています。また、敵が互いの上に積み重なるのを防ぐ群れアルゴリズムを持っているので、敵が互いを挟むのではなくグループになります。 ただし、タイルベースのマップを追加したので、たとえば障害物や壁の周りを敵が通過できるようにする必要があります。私は最初、群れアルゴリズムが壁や障害物を遠ざけるオブジェクトと見なすように、「歩行不可能な」タイルに分離値を追加しようとしました。私の最初のテストでは、敵が歩くことのできないタイルのない目に見えない「壁」にぶつかったことが示されたので、これが実現可能かどうかはまだ解明していません。 A *を使用してプレーヤーへのパスを計算し、群れを防ぐために群れアルゴリズムを使用するには、パフォーマンスが重すぎるのではないかと考えていました。もともと私のゲームは波ベースのシューティングゲームになる予定でしたが、代わりにホットラインマイアミの静脈内でレベルベースにすることを決めたので、たまに大群とともに敵を減らし、それらが強くなります。 これは実行可能なソリューションですか?ゲームエンジンとしてSlick2DでJavaを使用しています。または、これら両方の問題に取り組むより良い解決策/アルゴリズムがありますか?

1
ビヘイビアツリー:: 1ティック以上かかるアクション
私がビヘイビアツリーで理解していることから、各ビヘイビアは、数回の反復で実行できる短い目標指向のアクションである必要があります。 したがって、たとえば、以下はビヘイビアツリーの画像です。 ここで、Drive To Enemyの動作には、ツリー内で数回以上の反復が必要であると想定しましょう。そのため、各パスでDrive To Enemyが呼び出されるのは、現在実行状態になっているためです。 問題は、敵が近くにいる場合、Evade Enemyに電話したいことです。Drive To Enemyが常に呼び出されることを考慮すると、Evade Enemyを呼び出す機会はありません(おそらく、Enemyを避ける必要があります)。 万一私はツリーを横断し、各アクションが現在実行されているものに関係なく渡しますか? 私はこれについて正しい方法で行っていますか? そのような動作を処理する適切な方法は何ですか? もともとStackoverflowで尋ねられました。ここで考えたほうが、この質問をするのに適した場所です。
19 ai  game-loop  behavior 

6
「非完璧な」AI戦闘員を作るには、どのような行動が必要ですか?
NPC 戦闘員を作成する場合、戦闘の戦術、タイミング、および攻撃の種類を最適化することでロボットデスマシンを取得するために何をすべきかが簡単に わかりますが、特異で予測不可能な敵を取得するのは難しく(そして戦闘ではより興味深い)。より有機的で型破りな敵を作成するのに役立つ行動(アルゴリズム?) 編集:私の特定のユースケースは、MMOのような敵、たとえばWorld of Warcraftの場合ですが、グラフィックスは少なくなります。それは人間と非人間の両方の敵(動物、モンスターなど)を意味することに注意してください
19 ai  npc  combat 

6
物理モデルを備えた船のAIコントロール
2D空間でフォローを実装する方法のアイデアを探しています。残念ながら、AI /パスの検索/自律制御についてはまだあまり知りません。 この船は自由に移動できるが、質量と勢いがあるとしましょう。また、外力がそれに影響を及ぼす可能性があります(爆発など)。プレイヤーはいつでも船の目標を設定でき、その場所に到達して停止するはずです。 物理学がなければ、これは簡単で、ただ方向を指して進むだけです。しかし、既存の勢いに対処し、その場で停止する方法は?船の配置を直接変更したくありません。 編集:明確にするために、船自体の物理学関連の数学は問題ではありません。

7
A *エージェントに他のエージェントを回避させるにはどうすればよいですか?
タイルマップにマルチエージェントA *アルゴリズムを実装しています。エージェントはX軸とY軸でのみ移動します。パスを計算するときに他の場所がどこにあるかをチェックすることで、それらの間の衝突を回避します。 エージェントが異なる方向から同じタイルを渡す必要がある場合を除いて、問題なく機能します。このような状況では、最適な解決策は、一方のエージェントが他方のエージェントの通過を待つことです。 また、北の回廊がない場合、経路探索は失敗します。 そのようなアルゴリズムをどのように実装できますか?

8
不完全なポンAI
だから、私はLWJGLを使用しながらJavaとOpenGLを学び始めています。簡単に始めるために、私はAtari Pongのクローンを書いています。ゲーム画面、衝突検出を正しくセットアップし、すべてのゲームが実際に動作しています。実際に2プレーヤーのゲームであれば、これまでにやるつもりですが、これをシングルプレーヤーのゲームにすることを計画しているので、2番目のプレーヤーを制御するシンプルなAIを考え出す必要があります。 ボールがどこにヒットするかを知ることは非常に簡単なようであり、常にボールにヒットするAIを作成するのは簡単なように思えますが、ゲームに勝つことができるようにしたいので、IAを常にヒットさせることはできません玉。 そこで、人間のような欠陥をAIに追加するために、これをどのようにコーディングすればよいかという質問があります。AIが特定のポイントで失敗するかどうかをランダムに決定する必要がありますか?または、私がここで見逃しているよりスマートな(またはおそらく明白な)ものがありますか? どうもありがとうございました。
19 java  ai 

3
ユニットが追加または削除されたときに長方形の形成を維持するにはどうすればよいですか?
行と列のある長方形のボットがあります。ボットがフォーメーションに追加または削除されると、問題が発生します。これが発生すると、ボットは、長方形の構成がほぼ同じアスペクト比で、可能な限り長方形になるように、自分自身を再配置する必要があります。これを行う方法? いくつかのアイデア: ボットを追加または削除する場合、ボットの新しい合計数と目的の一定のアスペクト比を使用して、そのアスペクト比に最も近いフォーメーションの新しい幅と高さを計算します。次に、何らかの方法でボットをシャッフルし、新しい次元に合わせます。 ボットが削除されたら、その背後にあったボットをその場所に移動し、フォーメーションの最後に到達するまで続行します。次に、バックランクのボットを何らかの方法でシャッフルすることにより、バックランクを可能な限り均等にします。 まったく異なる別のアイデアは、分子構造が一緒に留まる方法を模倣することです。4つの最も近いボットを引き付け、残りのボットを撃退することで、すべてのボットを4つの他のボットに囲ませます。逆二乗則を使用して分離を確保するには近すぎるボット(4つを含む)をすべて撃退します。また、構造全体の形状に追加の力が必要になります。しかし、これは非常に計算コストがかかります。 更新:だからサラームの答えを見て、良い次元を与える良い一般的な関数を思いついた。 最初に、以下の幅と高さの連立方程式を解いてから、答えを丸めました。 width/height=aspect ratio of your choice width*height=number of bots これにより、ボット数に対してそのアスペクト比に最も近い整数の長方形が得られます。最も近い長方形は、半分の時間が大きすぎ、半分の時間が小さすぎます(もちろん、ちょうどいいかもしれませんが、それらを気にする人もいます)。長方形が少し大きすぎる場合は、何もする必要はありません。バックランクはほぼ満杯になり、理想的です。長方形が少し小さすぎる場合は、問題が発生します。小さなオーバーフローは独自のランクに移動する必要があるため、少数のボットのみのランクが作成されますが、見た目は美しくありません。違いが大きい場合もあります(幅の半分よりも大きい)。この場合、1つのランクを加算または減算して、差を小さくします。次に、長方形が小さすぎる場合は、列を1つ追加して少し大きくします。それを行った後、バックランクは常に他のランクの少なくとも半分のボットを持っているように見えます。 更新 寸法を取得したら、それらを現在の寸法と比較します。新しい次元の間口が大きい場合、ランクごとに、下のランクからボットをポップし、そのランクのボットの数が間口と等しくなるまで、現在のランクにプッシュします。バックランクに達するまで、そのアルゴリズムを続けます。このアルゴリズムを使用すると、ボットは新しい次元に効率的に収まるように移動します。その後、単に新しい古いものをバックランクにプッシュします。アルゴリズムは、新しい間口が小さい場合と若干異なりますが、あなたはそれを把握できます! 次に、さらに2つの問題があります。削除、および新しいボットが必ずしもバックランクに割り当てられるわけではなく、追加された時点で最も近い位置にあるボットの柔軟な追加方法。

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