2016-12-01 39 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