質問編集履歴

1 自己解決したため、その方法

退会済みユーザー

退会済みユーザー

2016/09/28 19:03  投稿

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

    37941 questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • CoffeeScript

    166 questions

    CoffeeScriptはプログラミング言語です。シンタックスシュガーの導入により、JavaScriptのコードに変換された後動作します。JavaScriptに比べ、可読性と簡潔性が向上しています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る