2016-12-01 61 views
0

我一直在使用javascript/jquery編寫掃雷遊戲。我似乎無法得到顯示的空單元格。我的算法是顯示被點擊的空單元的8個鄰接點。當我點擊div時,我在控制檯中點擊了8次,並且弄亂了adjElements值。任何幫助如何使其工作?如何在掃雷遊戲中揭示空單元格?

這裏我到目前爲止所做的。

//my divs are generated with a function from id '#s-1' to '#s-81' 
var adj=[-10,-9,-8,-1,1,8,9,10]; 

$('.grid').find('div').click(function(event) { 

     var div=this.id; 
     var numDiv=div.replace(/[^\d.]/g, ''); 
     revealSquare(numDiv); 
    }); 


var revealSquare=function(square) { 

    if(!($(square).hasClass('isMine'))) { 

      if($(square).find('span').text()=='') { 

       revealEmptyCells(square); 

        } 
      } 


}; 


var revealEmptyCells=function(clickDiv) { 

    $.each(adj, function(index, val) { 

     if(val+clickDiv>0 && val+clickDiv<=81) { 

        var adjElements=val+clickDiv; 
        console.log('adj: '+adjElements); //it reveals odd numbers like for div #s-1 it reveals 19 
        $('#s-'+adjElements).css({ 
          border: '4px solid #d4d4d3', 
         }); 
} 

    }); 
} 

假設點擊DIV是空的,並且我除去VAL + clickDiv> 0和val + clickDiv < = 81;如果我點擊div s-1,adj元素是-101,-91,-81,-11,11,81,91,101。爲什麼我會得到這些值?

回答

1

當您執行+操作,和一個操作數是字符串,那麼結果會不會是數學相加,而是兩個串聯:

在你的情況下是不是一個數字但一個字符串:

div.replace(/[^\d.]/g, '') 

爲了解決這個問題,就在它添加單一+

+div.replace(/[^\d.]/g, '') 

現在numDiv將是一個數字,並將在添加中具有所需的效果。

+0

它的工作!謝謝!你能解釋它爲什麼有效嗎?出了什麼問題?我是新來的JavaScript。 – Ndx

+0

我想我解釋了我的答案?你的代碼將1 + 9渲染爲19,而它應該渲染它10.操作數必須是數字才能使其工作。 – trincot

+0

是的,謝謝!現在我明白了。 – Ndx

相關問題