搜索

首页  >  问答  >  正文

html css 和 js 中的扫雷游戏不能正确计算相邻的炸弹单元

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

全部回复(1)我来回复

  • P粉124070451

    P粉1240704512024-01-18 00:23:38

    我认为问题在于混合 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一样,但两者都不会引起问题)

    回复
    0
  • 取消回复