html css 和 js 中的扫雷游戏不能正确计算相邻的炸弹单元
P粉145543872
P粉145543872 2024-01-17 08:35:00
0
1
485

我正在尝试用 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粉145543872
P粉145543872

全部回复(1)
P粉124070451

我认为问题在于混合 collrows

                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>

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板