2011-10-11 18 views
1

私はjqueryの掃海艇を作っています。隣接する鉱山0でブロックをクリックすると、現在、暴露関数に取り組んでいます。意図した結果が「0」彼らはまたしている場合、これらのブロックを明らかにし、すべての8つの隣接ブロックをループしているブロックは、そのブロックのために再発:Javascript再帰が機能しません

function reveal(block) { 
    block.removeClass('hide'); 
    var thex = getXY(block)[0]; 
    var they = getXY(block)[1]; 
    if (blockNumber(block) == '0') { 
     alert('test'); 
     --they; 
     --thex; 
     var nearmines = 0; 
     for (mody=0;mody<3;mody++){ 
      for (modx=0;modx<3;modx++){ 
       var newx = thex + modx; 
       var newy = they + mody; 
       reveal(bl(newx,newy)); 
      } 
     } 
    } 
} 

現在、この機能がためにチェック最初のブロックの後に停止しています関数が反復するたびに電話がfor loopsを破っているように見えます。

+1

は、多分あなたは明らかに関数内MODYとMODxの変数を宣言する必要があります。このように使用すると何が起こっているのか分かりません。グローバル変数ですか? – duedl0r

+0

bl(x、y)とblockNumber(no)の機能を知っていれば確かに役に立ちます。私はgetXYが[x、y]配列を返すと仮定することができます(block.xとblock.y ...の代わりに?) –

答えて

1

私はあなたが無限再帰を持っているかなり確信している - の両方の直接および間接的に。 reveal(bl(2,2))を呼び出すと、ループ内でreveal(bl(2,2))が呼び出されます。 bl(1,2)0ある場合は、各隣人を検索する際に加えて、それはまた、reveal(bl(2,2))を呼び出します。あなたが最初の行に「基本ケース」をチェックする必要があり

if(!block.hasClass('hide')) 
    return; 
+0

これはそれでした!どうもありがとうございました! –

+0

@Korvin - 問題ありません!それは教育的な推測ではありませんでしたが、 ':)' – Kobi

関連する問題