2011-10-11 49 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