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

アルゴリズムは、計算、データ処理、および自動推論に使用されます。より正確には、アルゴリズムは、関数を計算するための明確に定義された命令の有限リストとして表現される効果的な方法です。

4
お互いを見ることができるユニットをグループ化する最速の方法は?
私が使用している2Dゲームでは、ゲームエンジンは、ユニットごとに、そのビュー範囲にある他のユニットのリストを提供できます。 グループ内のユニットをソートするための確立されたアルゴリズムがあるかどうかを知りたいのですが、各グループは互いに「接続」されているすべてのユニットによって定義されます(他のユニットを介しても)。 例は、質問をよりよく理解するのに役立つかもしれません(E =敵、O =自分のユニット)。まず、ゲームエンジンから取得するデータ: E1 can see E2, E3, O5 E2 can see E1 E3 can see E1 E4 can see O5 E5 can see O2 E6 can see E7, O9, O1 E7 can see E6 O1 can see E6 O2 can see O5, E5 O5 can see E1, …
12 algorithm 

3
地形ジェネレーターの進化
私は最近この質問をしましたが、結論は、手続き型ゲームコンテンツの作成に遺伝的プログラミング(GP)を使用することは実際には行われていないということです。それを変えたいです。 新しい地形ジェネレーターを見つけるのに役立つGPを展開できると確信しています。私が得ようとしている質問は、これをどのように達成できるかということです。 すべてのGPには、すべてのGPに一般化できるいくつかの基本的な部分があります(親選択、組換え、突然変異、生存)。私はそれらを自分で理解することができます。問題は、問題固有の部分で発生します。これらは、コードで問題を表現する方法(これは通常ツリーを使用します)、およびジェネレーターがどれほど優れているかを評価する方法です(これは1つ以上の値です)。 簡単に言うと質問: ツリーに解析できる方法で地形ジェネレータをどのように表現しますか? これはどのような地形を生成する必要がありますか?(高さマップ、頂点グラフ、...) これは、hightmapに基づいているものが少ないほど良いです。 ソリューションの適合性を評価するために何が使用されますか? 例:興味深い地形が必要なため、値の1つを、地形上の各頂点の法線の平均変化とすることができます。

1
グリッド内のノードのシーケンスを検出する
下の画像から、ボード上で最も最適なシーケンス(緑色の線)を検出する必要があります。青/赤の線は可能性を表していますが、最高の動きではありません。 ルールは次のとおりです。 同じタイルで、隣のタイルに移動できます(斜めが有効です) 一度タイルにアクセスすると、再度アクセスすることはできません。 各ノードをループし、その隣接ノードを調べ、再帰的に通過することを考えました。可能な動きを見つけたら、それを構造に入れることができます。すべての可能な動きが見つかったら、ノードの数が最も多い動きを選択します。ノードに一致する複数のネイバーがある場合、より困難になります。 だから、私が使用できるアルゴリズムはありますか?ある種の洪水を考えていましたが、それはルール#2を満たしていません。 要求に応じて、ここに同様のゲームプレイのビデオがあります。http://youtube.com/watch?v=eumnCTG0AE8
12 algorithm 

4
宝石をちりばめたようなゲームの背後にあるロジック
私がやっているプロトタイプには、宝石をちりばめたようなミニゲームがあります。2D配列のグリッド(int[,])を使用すると、ユーザーがいつマッチを形成したかを知ることができますか?私は水平方向と垂直方向のみを気にします。 私は頭のてっぺんから、それぞれの方向を見るだけだと思っていました。何かのようなもの: int item = grid[x,y]; if(grid[x-1,y]==item) { int step=x; int matches =2; while(grid[step-1,y]==item) { step++; matches++ } if(matches>2) //remove all matching items } else if(grid[x+1,y]==item //.... else if(grid[x,y-1==item) //... else if(grid[x,y+1]==item) //... もっと良い方法があるはずです。ある?

3
粒子を滑らかなブロブとして描く
ゲーム/グラフィックスの開発は初めてで、パーティクル(2D)で遊んでいます。液体/水のように、粒子を互いにブロブとして近づけたい。ブロブが滑らかではない(そして大きすぎる)ため、大きな円を重ねて描画したくありません。物理学はあまり知りませんが、表面張力に似たものが欲しいと思います。 stackexchangeやGoogleで何も見つかりませんでした(正しいキーワードがわからないかもしれません)。これまでに2つの可能な解決策を見つけましたが、アルゴリズムに関する具体的な情報を見つけることができません。 それらの1つは、粒子の凹包を計算することです。等価クラスを作成することにより、ブロブを計算できます(「互いに近い」関係に)。不思議なことに私は見つけることができませんでした任意の凹面船体を計算する方法を説明するアルゴリズムを。多くの投稿(およびstackexchange間)は、これを行うライブラリまたは商用製品にリンクしています(C#で動作するにはライブラリが必要です)が、アルゴリズムはありません。また、このソリューションには、粒子の円に問題があり、中央の空きスペースが検出されない場合があります。 凹型船体の研究中に、アルファシェイプと呼ばれるものを見つけました。これはまさに私がやりたいことのように思えますが、凹型船体と同じように、実際にどのように機能するかを説明する情報源は見つかりませんでした。プレゼンテーション資料をいくつか見つけましたが、先に進むのに十分ではありません。私以外の誰もが知っている大きな秘密のようなものです:-/ 凹型の船体またはアルファ形状を計算した後、ベジエ曲線にして滑らかで素敵なものにします。 私のアプローチは少し複雑すぎると感じていますが、おそらくこれを間違った方法で解決しようとしていますか?あなたが私の問題に対する他の解決策を提案するか、私が行方不明になっている部分を説明できるなら、私はとても幸せで感謝します:-) ありがとう。

5
強化学習がパスファインディングでめったに使用されないのはなぜですか?
由緒ある最短経路グラフ理論アルゴリズムA *およびその後の改善(たとえば、階層注釈付きA *)は、明らかに、ゲーム開発における経路探索に最適な手法です。 代わりに、RLはゲーム空間内でキャラクターを動かすためのより自然なパラダイムであるように思えます。 それでも、強化学習ベースの経路探索エンジンを実装しているゲーム開発者は1人もいません。(これから、パスファインディングにおけるRLの適用が0であるとは推測しません。A*や友人に比べて非常に小さいというだけです。) 理由が何であれ、これらの開発者がRLを認識していないからではありません。RLはゲームエンジンの他の場所で頻繁に使用されるという事実からも明らかです。 この質問は、経路探索においてRLについて意見を述べる口実ではありません。実際、私はA * et al。の暗黙の選好を仮定しています。RLよりも正しいですが、その好みは私には明らかではなく、その理由、特にパスファインディングにRLを使用しようとした人には非常に興味があります。

4
ジェスチャー認識戦略
Wiiでの作業では、単純なジェスチャを認識する必要があることがよくありますが、これまでのところ、ゲームデザインドキュメントで要求されているジェスチャを認識するために、主に加速度の大きさを確認することができましたが、サンプルジェスチャの「記録」と複雑なジェスチャの認識を可能にする、より堅牢なシステム。 過去にどの戦略を使用しましたか?なぜ彼らは働いたのですか?なぜ機能しなかったのですか?どうしますか?

2
ゲームでの構造解析はどのように行われますか(例:橋梁建設、掘削または死滅、3D)?
すべてのコンポーネントがシステム全体に影響を与えるため、典型的なインタラクティブトラスシステムはかなりの計算が必要になると私は理解しています。シミュレーションの精度を犠牲にして、任意の反復回数で任意に停止できると思いますが、それがこれらのゲームで使用されているアプローチかどうかはわかりません(ブリッジビルディングゲームはトラスシステムの例です)。一方、DigやDieのようなゲームは、非常に複雑な構造システムを備えています。これは、トルク(私は信じています)と圧縮も考慮に入れており、非常に高速で、非常に広範なシステムで動作します。基本的な計算は似ていると思いますが、そうでない場合は両方のアプローチに興味があります。 これらがどのように作られるか知っていますか?それらには任意の制限がありますか、それとも完全に異なるアルゴリズムを使用していますか?また、皆さんが思いついたものはすべて3Dシステムに適用できると思いますが、そうでない場合、または明らかでない場合は、少なくとも2Dと3Dの両方に興味があるので、3Dにどのように使用できるかについて手がかりを教えてください。ゲーム。 ここでは感謝するつもりはありませんが、少なくとも前もってお礼を言うのは不公平だと思います。この段落が削除されないことを願っています。 編集:私が推測した場合、私はDigまたはDieが各ブロックのベクトルを格納し、シミュレーションの追加の精度がシステムの限界に対して意味がない点まで反復アルゴリズムを実行すると言います(たとえば、システムは大きすぎて、とにかく崩壊しない)ので、(アプリケーションに基づいているため)反復の半任意数によって制限されます。しかし、私は間違っている可能性があります。

2
SDLでデルタ時間を計算する方法は?
SDL_GetPerformanceCounterとSDL_GetPerformanceFrequencyと呼ばれる2つの関数でデルタ時間を計算できると聞きました。完全にどのように機能するかはわかりませんが、SDL_GetTicks()を使用するのと少し似ていると聞きました Uint64 NOW, LAST; double deltaTime = 0; while (somebool) { LAST = SDL_GetPerformanceCounter(); NOW = SDL_GetPerformanceCounter(); LAST = NOW; deltaTime = (NOW - LAST) / (double)SDL_GetPerformanceFrequency(); /**Rendering**/ } 私はこのコードを持っていますが、deltaTimeを出力するか、それを使用しようとすると、常にいくつかの本当にランダムで非常識な数値に等しくなります。これは正しいです?
11 c++  algorithm  sdl 

2
Axis Aligned Spatial Division:スペースをランダムな長方形に分割しますか?
3Dスペースをランダムな軸で整列したボックスの形状に分割する方法が必要です。とりあえず、テストのために2Dスペースを分割しています。私が思いついた最も直接的なアプローチは、サイズ(1、1)の長方形を定義し、既存のすべての長方形をX軸とY軸が交互に並ぶ2つの不均一な長方形に再帰的に分割することでした。 ここでの問題は明白です。このアプローチでは、長いストレッチ線(赤でマーク)が発生します。 私が望むのは、もっと有機的な見た目です(私は例を含めました) 見てください、上から下へ、または左から右への長い直線はありません。 唯一の制約は、サイズの粒度に影響を与えずに、長方形の最小サイズを制限したい場合があることです。つまり、最小の四角形が秒より1平方センチメートル小さい場合、最小の部屋は2平方単位であってはなりません。 したがって、理想的には、アルゴリズムは次の3つの制約すべてを満たす必要があります。 長方形は無限に小さくはありません。 四角形のサイズは、最小の四角形のサイズの離散的な乗算ではありません。つまり、最小の長方形が3平方単位である場合、大きい長方形は6、9、12などの正方形単位に制限されず、代わりに3.2または4.7になります。 アルゴリズムは多項式時間で実行されます(高速で計算する必要があります)。

2
自動編成/スマート在庫システム?
過去1週間、Unity3Dを使用して在庫システムに取り組んできました。最初はDesign3の人たちから助けを得ましたが、パスを分割するまでそれほど長くありませんでした。彼らのコードのやり方が本当に好きでなかったので、OOPの匂いはまったくありませんでした。 私はさらに一歩進んだ-アイテムは複数のスロット、高度な配置システム(アイテムはベストフィットを見つけるために最善を尽くす)、ローカルマウスシステム(マウスはアクティブなバッグ領域に閉じ込められる)などをとります これが私の作品のデモです。 私たちがゲームに入れたいのは、自動整理機能ではなく、自動整理機能です。この機能が必要なのは、インベントリが「リアルタイム」になるためです。バイオハザード1、2、3などでは、ゲームを一時停止してインベントリで何かを行うのとは異なります。ゾンビに囲まれた粘着性のある状況で自分を想像してみてください。弾丸はなく、周りを見回すと、地面に近くに弾丸があることがわかります。そのため、弾丸を手に取り、拾ってみますが、弾丸はありません合わない!あなたはあなたの持ち物を見て、あなたがアイテムのいくつかを再編成するならば、それが合うことを見つけます!-現在、プレーヤー-ゾンビに囲まれているため、再編成する時間がないため、スペースを確保するために停止して在庫を整理すると、死亡します(在庫をリアルタイムで記憶し、一時停止しないでください)- それが自動的に行われるのはいいことですか?- はい! (これはDungeon siegeなどの一部のゲームに実装されていると思うので、実行可能であることを確認してください) たとえば、この写真を見てください。 はい、そのため、問題を自動並べ替えると、スペースが表示されますが、次の理由で不良です。左下に移動すると、自動ソートと同じスペースが得られます。2-「それはFが私のものを再注文するように誰に言ったのですか?」 私はこれのために「コードを書く方法」を求めているのではなく、いくつかのガイダンスを求めています。これはグラフや最短経路に関するものですか?大学での勉強を続けることができなかったのではないかと思います:/でも、もしそうなら、教えてください。関連することを学びます。 解決策は1つだけではないことに注意してください。だから私が最初にしなければならないことは、状況が「解決可能」かどうかを判断することだと思います。状況が解決可能かどうかを判断する方法を知っていれば、「解決」できます。私はそれを「解決可能」にする条件を知る必要があるだけです。そして、これにはいくつかのアルゴリズム/データ構造が必要だと思います。 これは、1x3のアイテムをフィットさせようとする複数のソリューションの写真です。 矢印は解決策の1つを示していますが、見れば、複数の解決策が見つかるはずです。これは私が最終的に自動分類しないものですが、解決策を見つけてそれを適用します。 私がそれに時間を費やした場合、私はそれを解決する方法を思い付くでしょうが、それは最善の方法ではないでしょう、それは、あなたの手ではなく足で車の車輪を握るようなものです!XDまたは、配列が必要な問題を解決しようとするのと同じですが、それらの存在をまだ認識していません。これに対する正しいアプローチは何ですか? 解説からの更新 @Stephen私は本当にAlogsの第一人者ではありません。あなたは「ナップサック」と@BlueRajaについて言及しました-Danny Pflughoeftは2Dビンのパッキングアルゴについて言及しました。それらはどういうわけか関連/同じですか?-私はこれにどのように取り組むべきかについてまだ混乱しています。 そして、はい、私はすでに「ヒューリスティック」を使用していますが、自分がそうであるとは本当に知りませんでした。Dは、最初の使用可能なスロットを見つけ、アイテムがそこに収まるかどうかを確認します。 たとえば、2x2と1x4のアイテムがあるため、それらの「かさ高さ」(nSlotsRequired = nRowsReq * nColsRecと呼びます)に基づいてアイテムを注文しても機能するかどうかはわかりません。次の項目の残りの部分に異なる影響を与えます。そう... :/ 私はこのビデオを見て、完全な梱包のアイデアが本当に好きでしたが、在庫が2Dであるため、どうすればよいか疑問に思います。私が複数のバッグを持つことができるのは確かですが、ビンの梱包がここでの鍵であるかどうかさえわかりませんが、ゲームでは1つのバッグになるだけです。つまり、「1つの」バッグにアイテムを収めることだけが問題です。したがって、そのvidの例(パイプとバス)は実際には私の問題と一致しません。また、このナップザックの事柄についても注意深く見ましたが、「値」がアイテム/在庫にどのように関連しているかはわかりませんでしたが、「重量」はかさ高さと同じだと思います。

3
2つのボクセルが相互接続されているかどうかを確認するアルゴリズム
私は次の問題に適したアルゴリズムを探しています:ボクセルの3Dグリッド(空または塗りつぶされている可能性があります)を前提として、隣接していない2つのボクセルを選択した場合、それらが互いに接続されているかどうかを知りたい他のボクセル。 たとえば(2Dで状況を示すため)、#は塗りつぶされた正方形です。 1 2 3 a # # # b # # c # # # 私がa3とc3を選択した場合、それらが接続されているかどうかをできるだけ早く判別したいと思います。塗りつぶされたピクセルを通るa3とc3の間にパスがある場合。(実際の状況は、もちろん3Dボクセルグリッド内にあります。) フラッドフィルアルゴリズムとパスファインディングアルゴリズムを見てきましたが、どちらを選択するかわかりません。どちらも不必要な作業を行います。フラッドフィルはすべてのボクセルを埋めようとしますが、これは必要ありません。パス検索アルゴリズムは通常、最短パスの検索に関係していますが、これも必要ではありません。道があるかどうかを知るだけです。 どのアルゴリズムを使用する必要がありますか? 編集:コメントに基づいて、以下を追加する必要があると思います:ボクセルの内容は事前に不明であり、ボクセルの削除(空にする)によってボクセルのグループが壊れるかどうかを検出するアルゴリズムも必要です2つ以上の小さなグループに分けます。

2
2D配列で形状を検索し、最適化する
画像が許可されました。下のゲームの画像は、「T」字型の一部として認識されている、いくつかの暗いブロックを示しています。ご覧のように、コードは赤い点でブロックを暗くしており、緑色の輪郭を持つ "T"形状は見ていません。 私のコードは、x / yをループし、ブロックを使用済みとしてマークし、形状を回転させ、繰り返し、色を変更し、繰り返します。 私はこのチェックを大きな不安で修正しようと試み始めました。現在のアイデアは: グリッドをループしてすべてのパターンオカレンス(使用済みとしてブロックをマークしない)をメモし、これらを配列に書き込みます もう一度グリッドをループします。今度は、どのブロックがどのパターンで占められているか、したがって、どのブロックが複数のパターンで占められているかに注目します。 もう一度グリッドをループします。今回は、どのパターンがどのパターンを妨げているかに注目します それだけでいいと思います。 私はしなければならないと思う 最初に他のほとんどのパターンを妨害するものから始めて、矛盾する形状のさまざまな組み合わせを試してください。これにどのようにアプローチしますか? 8つのブロックを占有する3つの競合する形状があり、形状はそれぞれ4ブロックであるため、最大2つの形状しか持てないという有理数を使用します。 (私は他の形状も組み込むつもりであり、競合する形状を通過するときに考慮する必要があるスコアの重み付けがおそらくありますが、それは別の日になる可能性があります) 箱詰めの問題ではないと思いますが、何を調べればよいかわかりません。あなたの助けに感謝して、それが理にかなっていると思います 編集質問の明快さにもかかわらず、誰もが理解しているようです、はい、 各色の中で最大の「T」字を見つけたい (もし私があなたに2つのポイントを与えて、あなたが3つを作ったなら、あなたは少しイライラするでしょう)

2
ダイヤモンドスクエア地形生成問題
この記事に従って、ダイヤモンドスクエアアルゴリズムを実装しました:http : //www.lighthouse3d.com/opengl/terrain/index.php?mpd2 問題は、これらの急な断崖がマップ全体に表示されることです。テレインが再帰的に細分割されると、エッジで発生します。 ここにソースがあります: void DiamondSquare(unsigned x1,unsigned y1,unsigned x2,unsigned y2,float range) { int c1 = (int)x2 - (int)x1; int c2 = (int)y2 - (int)y1; unsigned hx = (x2 - x1)/2; unsigned hy = (y2 - y1)/2; if((c1 <= 1) || (c2 <= 1)) return; // Diamond stage float a …

5
パスの長さをどのように決定しますか?
各プレイヤーに1つの指定されたパスに沿って移動する必要があるゲームがあります。ベジエ曲線を使用してパスを描画します。パスの実際の(直線的ではない)全長と、各プレイヤーが行った距離をどのように決定できますか?(始点とパス上の指定した点の間の距離。) 更新: パスはデカルト平面(2D)で表されます。

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