2011-10-11 50 views
1

我在做一个jquery扫雷,我目前正在研究揭示功能,当你点击与0相邻的地雷块。预期的结果是遍历所有8个相邻块揭示的那些块,如果它们还“0”的块,它反复该块: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

也许你已在申报揭示函数内部的么和镆铘变量。我不知道如果你这样使用它会发生什么事情。这是一个全局变量吗? – 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