我正在嘗試用 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,但仍然不正確
我認為問題在於混合
coll
和rows
:有時您可以透過
cells[x y*coll]
存取位於x, y
處的儲存格,有時會透過cells[x y*rows] 存取
。我認為coll
是正確的(每個y
都會跳過一整行,該行由coll
列組成),因此請嘗試將程式碼變更為:並考慮將這段邏輯提取到它自己的函數中,這樣你就不會再犯這個錯誤了。
(
== true
部分也是多餘的,就像在另一個if
內部有一個if
一樣,但兩者都不會引起問題) p>