マインスイーパーで、中心(クリックされたマス)をx、yとして周りの爆弾の数が0だったら周り8方向のマスをx±1,y±1で考えて、for分で開いた状態にする関数を書いているのですが、もし、その8マスのどれかも周りの爆弾が0だったら、またそこを中心として同じことをするという処理をしたいのですが、うまくいかず、無限ループしてしまいます。
ループを防ぐために、@openCheckBoardという配列をつくりました。番地はもとの周りの爆弾の数が入れてある配列(@board)と対応するようにして、開けていないマスは0、開いているマスは1、開いていて、さらに周りの爆弾の数が0のマスには2を入れて、無限ループを防ごうとしたのですが、うまくいかず、ループしてしまいます。
for分の中で同じ関数を入れてしまっていることが原因なのでしょうか?
短期間に何度も質問申し訳ございません。。。
coffeescript
1surroundOpen: (x, y) -> 2 for i in [x-1..x+1] 3 for j in [y-1..y+1] 4 if i is x and j is y 5 alert "真ん中" 6 else 7 console.log i + "の" + j 8 place = "#{i}-#{j}" 9 cell = $("#"+place).get(0) 10 $(cell).css 11 'border-style':'inset' 12 'color':'black' 13 @openCheckBoard[i][j] = 1 14 if @board[i][j] is 0 and @openCheckBoard[i][j] is 1 15 @openCheckBoard[i][j] = 2 16 console.log @openCheckBoard[i][j] 17 app.surroundOpen(i, j)
申し訳ございません。自己解決できました。
このコードだと、openCheckBoard配列で値に2が入ったところにも、ループされたときに再び @openCheckBoard[i][j] = 1 が実行されてしまい、永遠に繰り返してしまっていました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。