我正在尝试用 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,但仍然不正确
P粉1240704512024-01-18 00:23:38
我认为问题在于混合 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
列组成),因此请尝试将代码更改为:
if(cells[x+i + (y+j)*colls].isBomb == true) // ^^^^^ changed here
并考虑将这段逻辑提取到它自己的函数中,这样你就不会再犯这个错误了。
(== true
部分也是多余的,就像在另一个if
内部有一个if
一样,但两者都不会引起问题) p>