Saya cuba mencipta semula penyapu ranjau dengan html, css dan javascript, saya perlu menyemak sel bersebelahan untuk melihat sama ada ia adalah bom dan kiraan, tetapi ia nampaknya tidak menyemak bahagian sel yang betul. Saya menggunakan kelas sel dengan x, y, isBomb, isChecked dan nombor yang mewakili bilangan jirannya adalah bom, saya juga menggunakan tatasusunan 1D untuk menyimpan grid sel Jadi soalan saya ialah jika terdapat sesuatu yang salah dengan fungsi ini atau patutkah saya menulis semula kod menggunakan tatasusunan 2D yang dimasukkan
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 }
Hasil penggunaan fungsi checkN pada setiap sel
Saya cuba menukar nilai sedikit seperti menambah -1 padanya dan +1 padanya tetapi masih tidak betul
Saya rasa masalahnya ialah pencampuran
coll
和rows
:Kadangkala anda boleh mengarang mengikut
cells[x + y*coll]
访问位于x, y
处的单元格,有时通过cells[x + y*rows] 访问
。我认为coll
是正确的(每个y
都会跳过一整行,该行由coll
lajur), jadi cuba tukar kod anda kepada:Dan pertimbangkan untuk mengekstrak logik ini ke dalam fungsinya sendiri supaya anda tidak membuat kesilapan ini lagi.
(
== true
部分也是多余的,就像在另一个if
内部有一个if
Sama, tetapi tidak akan menimbulkan masalah) p>