1

だから私はJSでマインスイーパゲームを作っています。

私はこの機能を持っています:

function doSquare(x, y) { //takes x,y coordinates of a square. checks and acts accordingly to what's around it
                var revealed = [];
                var size = board.length;
                var mines = countAround(x,y);
                table.rows[x].cells[y].innerHTML = mines;



                if (mines === 0) {
                    for (var i=Math.max(0,x-1), l = Math.min(x+1, size-1); i<=l; i++) {
                        for (var j=Math.max(0, y-1), k = Math.min(y+1, size-1); j<=k; j++) {
                            if (x == i && y==j) {continue;}
                            if (revealed.indexOf(i+"."+j) === -1) {
                                doSquare(i, j);
                                revealed.push(i+"."+j);
                            }
                        }
                    }
                }


            }

ボードの行と列は同じです。countAround(x,y)(x,y) 周辺の地雷の量を返します。revealedは、どの正方形が既に処理されたかを格納する配列であり、それらが再度処理されるのを防ぎます。
この関数は、正方形をクリックすると、その近くの地雷の数を明らかにし、それをセルに書き込むことになっています。次に、その周囲のすべての正方形をチェックし、その正方形がまだ処理されていない場合 (revealed配列内にない場合)、関数doSquare()が再度実行されます。正方形の隣に地雷がある場合、関数は正方形から「広がり」ません。

エラーが表示されます: 最大呼び出しスタック サイズを超えました。しかし、この機能は、地雷のある広場に到達するとその「拡散」を停止し、また、すでに処理された広場では実行されません。ですから、なぜこれが起こるのかについての説明が欲しいです。

4

1 に答える 1