如何在扫雷游戏中揭示空单元格?

时间:2016-12-01 21:06:33

标签: javascript jquery html

我一直在使用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&gt; 0和val + clickDiv&lt; = 81;如果我点击div s-1,则adj元素为-101,-91,-81,-11,11,81,91,101。为什么我会得到这些值?

1 个答案:

答案 0 :(得分:1)

执行+操作,其中一个操作数是字符串时,结果将不是数学总和,而是两者的串联:

在您的情况下,以下不是数字,而是字符串:

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

要解决此问题,只需在其前添加单一+

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

现在 numDiv 将是一个数字,并且会在添加中产生所需的效果。