我正在尝试用 html、css 和 javascript 重新创建扫雷,我需要检查相邻单元格以查看它是否是炸弹并计数,但它似乎没有检查正确的部分细胞。我正在使用一个带有 x、y、isBomb、isChecked 的单元类,以及一个表示其邻居有多少是炸弹的数字,我还使用一个一维数组来存储单元格网格 所以我的问题是这个函数是否有问题,或者我应该使用插入的 2D 数组重写代码
function checkN(x, y){
let count = 0
if(cells[x+y*coll].isBomb == true){
return
}
cells[x+y*coll].isChecked = true
for(let i = -1; i<=1; i++)
for(let j = -1; j<=1; j++){
if(
(x+i >= 0 && x+i < coll) &&
(y+j >= 0 && y+j < rows) &&
(i != 0 || j != 0)
){
if(cells[x+i + (y+j)*rows].isBomb == true)
count++
}
}
if(count != 0)
cells[x + y*coll].number = count
}
对每个单元格使用 checkN 函数的结果
我尝试稍微更改一下值,例如在其中添加 -1 并在其中添加 +1,但仍然不正确
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
我认为问题在于混合
coll和rows:if(cells[x+i + (y+j)*rows].isBomb == true) // ^^^^ ... cells[x + y*coll].number = count // ^^^^有时您可以通过
cells[x + y*coll]访问位于x, y处的单元格,有时通过cells[x + y*rows] 访问。我认为coll是正确的(每个y都会跳过一整行,该行由coll列组成),因此请尝试将代码更改为:并考虑将这段逻辑提取到它自己的函数中,这样你就不会再犯这个错误了。
(
== true部分也是多余的,就像在另一个if内部有一个if一样,但两者都不会引起问题) p>