You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HTML/CSS/JS实现扫雷:邻接炸弹计数错误排查求助

扫雷邻接炸弹计数错误排查与修复

不用改用二维数组,一维数组存储网格完全可行,问题出在checkN函数的索引计算逻辑错误:

  • 错误核心:遍历邻接单元格时,你误用了rows(行数)代替coll(列数)计算一维数组索引,导致坐标偏移,计数完全错误
  • 你的单元格索引规则是x + y*coll(列号 + 行号×列数),所以邻接单元格的索引应该遵循同一规则,用(x+i) + (y+j)*coll,而不是(x+i) + (y+j)*rows

修正后的完整代码:

function checkN(x, y){
    let count = 0

    const currentCell = cells[x + y * coll];
    if(currentCell.isBomb) {
        return;
    }

    currentCell.isChecked = true;

    for(let i = -1; i <= 1; i++) {
        for(let j = -1; j <= 1; j++){
            // 跳过当前单元格
            if(i === 0 && j === 0) continue;
            // 计算邻接单元格坐标
            const adjX = x + i;
            const adjY = y + j;
            // 校验坐标是否在网格范围内
            if(adjX >= 0 && adjX < coll && adjY >= 0 && adjY < rows) {
                const adjCell = cells[adjX + adjY * coll];
                if(adjCell.isBomb) {
                    count++;
                }
            }
        }
    }
    
    currentCell.number = count;
}

额外优化说明:

  • 把重复的索引计算提取为变量,避免重复计算和出错
  • 用continue直接跳过当前单元格,比(i != 0 || j != 0)的条件更直观
  • 去掉了if(count != 0)的判断,因为即使count为0,也应该把number设为0,符合扫雷的显示逻辑

内容的提问来源于stack exchange,提问作者daniXDHd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 19:42:48