首頁  >  問答  >  主體

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粉145543872276 天前429

全部回覆(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
  • 取消回覆