3

シンプルなカラー マッチング ゲームを作成しようとしていて、同じ色のブロックのグループを選択する方法を見つけたいと思っています。

これは私が取り組んでいるフィドルです。これを実行すると、ゲーム領域の端にある要素にマウスを合わせようとすると問題が発生し、未定義の変数を使用しようとしていることがわかります。

以下を確認すると、parse_quad_tree()関数で未定義の変数のケースを処理していることがわかりますが、ブレーキがかかっているため、どこかで間違っていることを意味します...

お時間をいただきありがとうございます

4

4 に答える 4

5

あなたの2次元配列は実際にはネストされた配列です。範囲外になる可能性のある配列のレベルのみを確認する必要があります。

var n = !!grid[x][y-1]?grid[x][y-1]:false;
var s = !!grid[x][y+1]?grid[x][y+1]:false;
var e = !!grid[x-1]?grid[x-1][y]:false;   // Instead of !!grid[x-1][y]
var w = !!grid[x+1]?grid[x+1][y]:false;   // Instead of !!grid[x+1][y]

つまり、 を実行するとarray[x][y]、javascript は最初に を取得し、次にその取得した配列array[x]でインデックスを探します。[y]あなたの場合、最初のルックアップは未定義(grid[x-1])であるため、ルックアップできませんgrid[x-1][y]。最初のステップが未定義の場合、最後のステップで未定義をチェックしています。

デモ: http://jsfiddle.net/jtbowden/qWktv/

また、$(c).addClass('active')の開始時にparse_quad_tree単一のブロックを強調表示することができ、再帰の開始時に発生するため、隣接するブロックごとに `.addClass('active') を呼び出す必要はありません。

デモ: http://jsfiddle.net/jtbowden/qWktv/1/

于 2012-05-03T17:32:28.033 に答える
2

サブ配列を呼び出す前に、最初の配列 var が存在するかどうかを確認していません。

var e = grid[x-1]&&!!grid[x-1][y]?grid[x-1][y]:false;
var w = grid[x+1]&&!!grid[x+1][y]?grid[x+1][y]:false;
于 2012-05-03T17:33:03.730 に答える
2

境界を確認する必要があります

var n = !! (y > 0 && grid[x][y - 1]) ? grid[x][y - 1] : false;
var s = !! (y < grid[x].length-1 && grid[x][y + 1]) ? grid[x][y + 1] : false;
var e = !! (x > 0 && grid[x - 1][y]) ? grid[x - 1][y] : false;
var w = !! (x < grid.length-1 && grid[x + 1][y]) ? grid[x + 1][y] : false;

http://jsfiddle.net/gaby/yHKkg/64/のデモ

于 2012-05-03T17:38:33.633 に答える
0

色に使用する代わりにvar colors = ['red', 'green', 'blue'];、色セットを持つ 3 つの異なる css クラスを使用します。このように、それらすべてを選択する必要がある場合は、 と同じくらい簡単$(".blue")です。

于 2012-05-03T17:30:31.517 に答える