我一直在使用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。为什么我会得到这些值?
答案 0 :(得分:1)
执行+
操作,其中一个操作数是字符串时,结果将不是数学总和,而是两者的串联:
在您的情况下,以下不是数字,而是字符串:
div.replace( /[^\d.]/g, '' )
要解决此问题,只需在其前添加单一+
:
+div.replace( /[^\d.]/g, '' )
现在 numDiv 将是一个数字,并且会在添加中产生所需的效果。