2017-09-06 17 views
0

私は2次元グリッドを持ち、すべてのタイルは2つの座標xとyで定義されています。私はこのような配列にタイルを格納していますvar tiles = [];2次元グリッド内の隣接するタイルを見つける

Tile = { 
    x: ..., 
    y: ... 
} 

目的(キャンバス)私が隣接するタイルを知りたいの描画の場合:各タイルはxyプロパティを持つオブジェクトです。私は各要素をループし、それが隣接しているかどうかをチェックすることでそれを行うことができます。それはn^n回のアクセスを必要とするので、これを行う正しい方法ではないと私は考えています。私はもっ​​と効率的なアルゴリズムがあるだろうと思う。

私はまた、データを別の方法で保存しておけば助けになると思っていましたが、やはり私にはわからないでしょう。

+0

まあ間で定義されているので、大きなO表記を学習し、それがコンピュータサイエンスのデータストレージタイプにどのように関係しているかを知ることによって、それは、あなたが思っているようにこれをやらなければならないように見えます。 –

答えて

2

あなたは、グリッドを作成するには2つの方法があります:

  • 2次元アレイを用いたグリッドのためのより容易なものでなければならない
  • そのような何かを持つことでタイルの

    ストア隣接するタイル:

    var tile0 = { 
        x:0, y:1 
    } 
    
    var tile1 = { 
        x:1,y:1, tileLeft : tile0 
    } 
    

あなたが...五角形や六角形のグリッドを作成したい場合に役立つことができ、ofcourseのAFを自動的にグリッドを作成またはループ。

EDIT

二次元アレイは、今は、例えば、グリッドのような値を設定することができ、単にアレイ

var arr = new Array() 
for(var i = 0 ; i < 10 ; i++){ 
    arr[i] = new Array() 
} 

の配列である:ことを

arr[0][2] = {x:2,y:2} //It's a bit useless since indexes can be use for x and y 

を場合、私は10アレイを1つの配列に格納されている:

キャッチされない例外TypeError:

は、次のエラーが返されますプロパティを設定することはできません「2」未定義の、ARRのインデックスがこれだけはあなたが調べることができ、問題のように見える一般的な観点から、0から9

+0

2次元配列がどのように機能してここで使用されるのか説明できますか? – BBotMerlin

+0

私は私の答えを編集しました: – Nolyurn

+0

私の問題は、グリッドは無限であり、いくつかのタイルだけが定義されています。だから、最初の方法は私にはもっと合っているようです。しかし、データを保存して読み込む必要があるため、実現するのは少し難しいようです。 – BBotMerlin

0

あなたのデータ構造では、各タイルにアクセスすることなくすべての隣接するタイルをチェックする方法がありません。

"試して真の" 2次元グリッドデータ構造は、単純な2次元配列です。次に、座標で直接タイルにアクセスできます。

+0

2次元配列がどのように機能してここで使用されるのか説明できますか? – BBotMerlin

関連する問題