html css 和 js 中的掃雷遊戲不能正確計算相鄰的炸彈單元
P粉145543872
P粉145543872 2024-01-17 08:35:00
0
1
461

我正在嘗試用 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>

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板