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

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

3
次の最適な方向に向けたパックマンキャラクターAIの提案
まず、これはPacManのAIであり、ゴーストではありません。 アイコンの周りでPacManを再生するAndroidライブ壁紙を書いています。画面タッチによるユーザーの提案をサポートしていますが、ゲームの大部分はAIによって行われます。私はゲームのすべてのプログラミングを99%完了していますが、PacMan自身のAIはまだ非常に弱いです。PacManの次の移動方向を決定するための優れたAIの開発に協力を求めています。 私の最初の計画はこれでした: 各方向のスコアカウンターをゼロの値で初期化します。 現在の位置から開始し、BFSを使用して、キューに追加することにより、可能な4つの初期方向に外側に移動します。 キューから要素をポップし、それがまだ「見られていない」ことを確認し、それが有効なボード位置であることを確認し、対応する初期方向スコアに、以下に基づいて現在のセルの値を追加します。 ドットあり:プラス10 パワーアップ:プラス50 果物を持っている:プラスの果物の価値(レベルによって異なります) おびえた幽霊がいる:プラス200 幽霊がパックマンに向かっている:200を引く パックマンから逃げる幽霊がいる:何もしない ゴーストが垂直に移動している:50を引く セルへのステップ数に基づいて、セルの値にパーセンテージを掛けます。最初の方向からのステップが多いほど、セルの値はゼロに近づきます。 現在のセルから3つの可能な方向をエンキューします。 キューが空になったら、4つの可能な初期方向のそれぞれについて最高のスコアを見つけ、それを選択します。 紙の上ではそれは良さそうに聞こえましたが、幽霊はパックマンを非常に急速に取り囲み、1つが彼に到達するまで、彼は同じ2つまたは3つの細胞で前後にぴくぴく動いています。ゴーストプレゼンスの値を調整しても、効果はありません。私の最も近いドットBFSは、ゲームが終了する前に少なくともレベル2または3に到達できます。 適切なAIを開発するためのコード、考え、リソースへのリンクを探しています。できれば前の2つです。これを今週末に市場でリリースしたいので、ちょっと急いでいます。どんな助けでも大歓迎です。 参考までに、これは当初StackOverflowに投稿されました
9 java  ai  path-finding 


1
City-simはどのようにして数百のキャラクターをシミュレートできますか?
私のゲームは通常、可能なキャラクターを表す数百のボックスがあると、非常に簡単に遅れを始めます。SimCityやAnnoのようなゲームにも数百のキャラクターがあります。 それらのゲームはすべてのチックですべてを更新するわけではなく、ニーズは間隔で処理され、それはレンダリングの問題ではないことに気付きましたが、これらの小さな生き物はすべて個別のパスファインディングなど を持っています。古いマシンでも、何千もの文字をオフにします。彼らはこれをどのように行うのですか? この質問は、個人が実際には数えず、没頭と美学のために単にシミュレートされる巨大な数を参照するように更新されました。 (個別のキャラクターを参照している場合に関連:Dwarf Fortressは、パフォーマンスを失うことなく、非常に多くのエンティティを追跡する方法を教えてください。) (別の質問ですが、おそらく関連していますか?:Unity3Dで何百ものアニメ化されたキャラクターをレンダリングする)

4
複数のエージェントによる目標指向の行動計画
私は少し行き詰まっています: シミュレーションゲームにGOAP(目標指向のアクションプランニング、http: //alumni.media.mit.edu/~jorkin/gdc2006_orkin_jeff_fear.pdf)を使用してAIを実装しました。それはうまくいきます。 今、私はエージェントが協力できることを望みます(例えば、一緒に行動を起こす)。この場合、GoapActionsが緩いカプレットを保持する最高のAIデザインは何ですか? 彼らは一緒に計画すべきですか?(この場合、「世界国家」とは何ですか?)または、彼らは計画を共有する必要がありますか?ある種のメッセージシステム? 例 Agent1:Worldstate Agent 1:isLonely = true 目標Agent1:isLonely = false エージェント1の計画:AskAgent2ToTalk-> TalkToAgent2 Agent2 Worldstate Agent 2:hasWood = false 目標hasWood = true エージェント2の計画:GetAxe-> ChopWood-> BringWoodToSupply この星座を取得するにはどうすればよいですか? Agent1プラン:TalkToAgent2 Agent2プラン:TalkToAgent1-> GetAxe-> ChopWood-> BringWoodToSupply または、彼らが話していて、エージェントの1つが(たとえば、攻撃する敵によって)中断された場合、他のエージェントは、彼のTalktoAgent2アクションが終了したことを知っている必要があります。

2
チェスのZobrist転置テーブルを備えたNegaScout
転置表をアルファベータスカウトに配置しようとしています。ゲームの途中または後半に向けて、速度が徐々に向上するのはわかりますが、テーブルサイズが1〜2 GBの場合でも、トランスポーズテーブルからまったく読み取らないよりも遅くなる場合と遅くならない場合があります。また、テーブルなしでまったく同じゲームをプレイする場合、効率的な移動よりも少ないことに気づきます。 私はZobristのキーハッシュをテストしましたが、移動を行って元に戻した後でも正しくハッシュされます。私はそれらが問題であるとは思わない。これらの記事のアドバイスに従って、アルファ/ベータ剪定を設計しようとしました。 http://web.archive.org/web/20070809015843/http://www.seanet.com/~brucemo/topics/hashing.htm http://mediocrechess.blogspot.com/2007/01/guide-transposition- tables.html 誰かが間違いを特定するのを手伝ってくれる?多分私はハッシュからアルファ対ベータをチェックする評価を理解していません。または、1〜2 GBは小さすぎて違いがありませんか。必要に応じて、転置表のコードをさらに投稿できます。 public int alphaBetaScout(Board board, int depth, int alpha, int beta, bool color, bool quiscence) { // !!!! With or without this specific section, and any other Transpose.Insert, doesn't make the game play or evaluate any faster. HashType type = HashType.AlphaPrune; HashEntry h …

3
2D RTSのグループでのAI移動の終了位置の決定
私は、RTSゲーム(実際にはある種のゲームエンジンのデモ)を作成しました。このゲームでは、ユーザーがゲームで行う基本的な操作は、兵士の束を選択し、マップを右クリックして、指定された場所に移動します。これはJavaScriptであり、ここ(コード)で遊ぶことができます。 兵士が現在の場所から目的地にどのように移動するかという問題を無視して、私の質問は彼らの実際の目的地が何であるかを決定することについてです。これが私がこれまでに試したことです: 試行1:選択したすべての兵士に、マウスをクリックした座標に移動するように伝えます。これは奇妙な振る舞いで、すべての兵士が不自然にターゲットの周りに集まります。 試行2:選択されたすべての兵士の平均座標を見つけ、各兵士のその中心点からのオフセットを見つけ、最後にそのオフセットをマウス座標の周りに変換します。これは、選択した兵士が離れている場合、ターゲットに近づかないことを除いて、正常に機能します。 試行3:マウス座標の周りにグリッドを作成し、選択した各兵士をグリッドのセルに配置します。各兵士が割り当てられたセルに到達すると、これはうまく機能します。ただし、グリッドセルには兵士が生成された順序で割り当てられるため、衝突する場合があります(つまり、右側のすべての兵士が左側に移動しようとします)。これは不自然に見えます。 試行4:以前と同じようにグリッドを使用しますが、最初に兵士を場所別に並べ替えて、それらが適切に並ぶようにします。つまり、グループの下をクリックした場合、グループの最下部の兵士は、グリッドの最下部に配置されます。彼らの目的地に到達します。これはかなりうまく機能しますが、不具合が時々あり、その理由はわかりません。 次に、宛先座標を決定する関数を示します。 function moveSelectedSoldiersToMouse() { var w = 0, h = 0, selected = []; // Get information about the selected soldiers. myTeam.soldiers.forEach(function(soldier) { if (soldier.selected) { selected.push(soldier); w += soldier.width; h += soldier.height; } }); var numSelected = selected.length, k = -1; if (!numSelected) …

2
壁回避ステアリング
レイノルズボイドアルゴリズムを使用して小さなステアリングシミュレータを作成しています。次に、壁回避機能を追加します。私の壁は3Dであり、そのような2つの点を使用して定義されています。 ---------. P2 | | P1 .--------- 私のエージェントは速度、位置などを持っています... エージェントを回避する方法を教えてください。 Vector2D ReynoldsSteeringModel::repulsionFromWalls() { Vector2D force; vector<Wall *> wallsList = walls(); Point2D pos = self()->position(); Vector2D velocity = self()->velocity(); for (unsigned i=0; i<wallsList.size(); i++) { //TODO } return force; } 次に、boid関数によって返されるすべての力を使用し、エージェントに適用します。 私は自分の壁でそれを行う方法を知る必要があるだけです。 ご協力いただきありがとうございます。

3
格闘ゲームにAIを実装する方法
2D戦闘機を作りました 昨日。 2番目の「プレーヤー」はほとんど何もしません。実際には、何もありません。正直なところ、このような対戦相手が出る前にゲームを作ったことはありません。 だから私の質問は、対戦相手のAIプログラミングからどのように始めるのですか?チュートリアル、ベストプラクティスはありますか?挑戦してほしい(自分ではなく、プレイヤーにとって)。
8 javascript  ai  html5 

5
ホーミングミサイルの単純な比例航法の実装
私はプロポーショナルナビゲーションの可能な限り単純な形式を実装しようとしています。つまり、ミサイルはターゲットからターゲットへの方向が変化する方向に向きを変え、ターゲットからターゲットへの方向が変化しなくなったら、迎撃コースにいます。 それで、私は2Dミサイルが直面している方向に一定の速度で移動していて、一定の速度で回転することができ、間隔ごとに次のようなものでミサイルを更新します: Position += VectorProduct (Direction * Speed * TimePassed) PreviousTargetBearing = TargetBearing TargetBearing = AngleBetween(TargetPosition, Position) TargetBearingDelta = TargetBearing - PreviousTargetBearing If TargetBearingDelta > 0: MissileDirection += TurnRate * TimePassed If TargetBearingDelta < 0: MissileDirection -= TurnRate * TimePassed 問題は、ミサイルが常に発射方向を中心に振動することです。これは、ミサイルが最初に回転するとすぐに、TargetBearingDeltaの符号が反転し、反対方向に回転するためです。 この問題を解決する最も簡単な方法は何ですか?私は簡単なものを見逃していると確信しています。 関連するStackOverflowの質問:ゲームの「インターセプトミサイル」を作成する方法は? 繰り返しになりますが、私は特に、一般的なホーミングアルゴリズムではなく、比例ナビゲーションアルゴリズムの実装に関心があります。 更新:明確な答えは、方位をチェックして毎ターン方向を調整するのではなく、2つを交互に行うことだと思います。やってみます。
8 ai 

2
妥当な4XゲームAIを行う
私はかなり「単純な」4Xゲームをコーディングしています(4Xゲームが単純な場合)。それはインディーズの範囲内であり、何ヶ月もかけてコーディングをせずに、まずまずのAIを思い付くことができるかどうか疑問に思っています。 ゲームには3つの主要な意思決定部分があります。生産ポイントの消費、移動ポイントの消費、技術ポイントの消費(基本的に3つの異なる「通貨」があり、ターン終了時に未使用の通貨は保存されません) 生産ポイントを使う 惑星をアップグレードする(技術と生産を増やす) 造船(3種類) 惑星から惑星への船の移動(移動ポイントを計算) 攻撃する 要塞に移動 Research Tech(Master of Orionのように、技術を部分的に研究できます) 私の現在の計画は、力ずくのアプローチです。プレーヤーには基本的に4つの幅広いオプションがあります- 惑星をその生産と技術出力にアップグレードする できるだけ多くの惑星を征服する できるだけ多くの惑星を確保する できるだけ早く特定の技術にアクセスする 決定ごとに、可能なオプションを繰り返し、スコアを出します。AIは最も高いスコアの決定を選択します。現在、私はどのように「決定を混合する」か分かりません。つまり、たとえば、AIは惑星のアップグレードと征服を同時に望んでいます。これらの4つの決定の組み合わせでブルートフォース最適化を実行する別のロジックを使用できると思います。 少なくとも、これ以上何も考えられない場合の私の計画です。合格できるAIを作成するより速い方法はありますか?ディープブルーなどに対抗するために、知性の幻想を持っているものだけは必要ありません。 初めてこの規模でAIを実行するので、あまりにも壮大なことはしないでください。これまでのところ、FSM、DFS、BFS、A *の経験があります。
8 ai  4x 

3
このA *検索パスファインディングアルゴリズムを調整して、さまざまな地形の動きの値を処理するにはどうすればよいですか?
Diablo IIと同様のインタラクションデザインを備えた2Dマップベースのアクションゲームを作成しています。つまり、プレーヤーはマップをクリックしてプレーヤーを移動します。プレイヤーの動きを終えて、パスファインディングに移ります。 ゲームでは、敵はプレイヤーのキャラクターを充電する必要があります。異なる移動ボーナスを与える5つの異なる地形タイプもあります。AIがこれらの地形のボーナスを利用して、プレイヤーに到達しようとします。 A *検索アルゴリズム(http://en.wikipedia.org/wiki/A*_search_algorithm)をチェックアウトするように言われました。私は、HTML5とJavaScriptでこのゲームをやって、そしてJavaScriptでバージョンを見つけたんだ:http://www.briangrinstead.com/blog/astar-search-algorithm-in-javascript私はそれを微調整する方法を把握しようとしていますでも。 以下は、私が変更する必要があるものについての私の考えです。他に何を心配する必要がありますか? グラフを作成するときは、渡した2D配列を、さまざまな地形タイプに対応するマップのトラバーサルで初期化する必要があります。 graph.js:「GraphNodeType」の定義を変更して、5つの地形タイプを処理する必要があります。壁はありません。 astar.js:gとhのスコアリングを変更する必要があります。どうすればよいですか? astar.js:isWall()はおそらく削除する必要があります。私のゲームには壁がありません。 astar.js:これが何であるかわかりません。処理が有効でないノードを示していると思います。しかし、これはいつ起こりますか? 高いレベルで、このアルゴリズムを「ああ、そこに壁はありますか?」からどのように変更しますか?「この地形は、周囲の地形よりも速くプレイヤーに到達しますか?」 時間の関係で、私は敵にブレゼンハムのアルゴリズムを再利用することについても議論しています。残念ながら、さまざまな地形の動きのボーナスはAIによって使用されないため、ゲームは夢中になります。:/私はこれをプロトタイプに取り入れたいのですが、私は貿易開発者ではなく、コンピュータ科学者でもありません。:D 私が探していることを実行するコードを知っている場合は、共有してください! このための健全性チェックのヒントも高く評価されています。
8 javascript  ai  html5 

1
AIやプレーヤーと比較して、マルチプレーヤーサーバーにキャッシュする必要があるデータは何ですか?
任意の数のプレイヤーと任意の数の敵がいる完全にネットワーク駆動の仮想の場所で、スムーズなAIシミュレーションを最適化するには、どのデータをサーバーのメモリにキャッシュする必要がありますか? 説明しようとすると、プレーヤーAがプレーヤーBからE、および敵AからGを見たとします。これらの各プレーヤーはプレーヤーAを見ますが、必ずしもお互いではありません。同じことが敵にも当てはまります。この質問をトップダウンの観点から考えてください。 多くの場合、たとえば、プレーヤーが銃を撃ったとき、サーバーは音を放射状の「信号」として処理します。この信号は、他のすべてのエンティティが到達し、「聞いて」反応します。 各AIエージェントの予算が非常に少ない場合、関係のないプレーヤーや敵を多く含む可能性のあるエリア全体でこれらの検索を常に行うことは問題のようです。 すべてのエンティティは、認識範囲から出入りするものをすべてキャッシュする必要がありますか?そのようなキャッシュでメモリをあふれさせることなく、近くのエンティティをトレースする優れた方法はありますか? 前の問題がうまく機能すると仮定した後に発生する可能性のある他のAI関連の問題はどうですか?何百もの敵、群れがある環境について話している。
8 ai  multiplayer 

3
どのオンラインゲームでAI開発を練習できますか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ゲーム開発スタック交換のトピックになるようにします。 5年前休業。 私はオンラインの世界のアバターのための人工知能の設計方法論を実験するプロジェクトに取り組んでいます。ここのオンラインの世界は解釈にかなりオープンです。たとえば、Second LifeはCounter Strikeと同じように適用できます。これらの実験を実行するには、まず問題の世界のインテリジェントエージェントを開発する必要があります。しかし、私は正直なところ、これに使用できるゲームにかなりこだわっています。 私の好みはMMORPGをプレイするためのインテリジェントな「ボット」を開発することでしたが、そのようなゲームの法的制限により私は妨げられました。同様に、ほとんどのFPSゲームでは、人間のプレーヤーの代わりにインテリジェントエージェントを使用することは不正行為と見なされます。 もちろん、代替手段はNPCボットを作成することです。特定のプレーヤーを置き換えるのではなく、プレーヤーと一緒に世界に住むインテリジェントエージェント。しかし、私は自分でもインテリジェントな対戦相手を作成できるゲームを見つけるのに苦労しています。 主な要件は、サードパーティのプログラムが通常プレーヤーが利用する関数呼び出しを使用し、世界の状態に関するフィードバックを読み取ることができるゲームであると思います。 Quake IIIとUnreal Tournamentは以前から提案されていましたが、これらはすでにこの研究プロジェクトの作業の主題になっています。 自分のオンラインゲームを最初から作成するのではなく、ミドルウェアやAPIなどを通じて、人工的にインテリジェントなプレーヤーまたはボットを作成できるゲームはどれですか。
8 ai  online 

2
高速な距離ベースのエンティティ検索のためのデータ構造(またはアルゴリズム)
たとえば、ゲームには100人の敵(さまざまなチーム)が走り回っていて、AIは近くのエンティティを調べて攻撃対象を確認したいと考えています。それらのエンティティを整理して、各敵がそれ自体と他のすべてのエンティティとの間の距離を計算する必要がないようにするための迅速な方法は何ですか? 手短に言えば、AIエンティティが「近くにいるのは誰ですか?」という質問にすばやく答える方法は何ですか。

2
サーバー上のすべてのNPC / AIオブジェクトを管理する方法は?
私は単純なMMOを作成しており、現在、複数のユーザーがお互いを確認し、一緒に移動できるようにサーバークライアントアーキテクチャを配置しています。今度は敵を追加します。 世界で管理する必要のある何百ものNPCオブジェクトを最適に処理する方法を論じている記事へのリンクがあるかどうか疑問に思っていました。私はいくつかの検索を行ったが、これが通常どのように行われるかについての多くの情報を見つけることができなかった。 私が考えることができる実装を構造化する2つの方法: すべてのインスタンス化されたNPCオブジェクトをリストに保持し、NPCスレッドがそれらを順番にループして、それぞれに処理および必要なアクションを実行する必要があるロジックがあるかどうかを確認します。このデザインのパフォーマンスが十分かどうかはわかりませんか? イベントベースのシステム。AI / Logicを処理するメソッドをNPCクラスで作成し、関連するイベントが通知されたときにこのメソッドが呼び出されるようにします(相互作用しないAI機能のタイマーで(ワンダリングなど)、またはパケットから外部にイベントを通知します)。ハンドラー(近くに移動するプレーヤー、または範囲内で攻撃するプレーヤー)。 これらのアプローチのどちらが正しい方法ですか?これを行う他の方法は何ですか?

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