Rumah  >  Soal Jawab  >  teks badan

Permainan penyapu ranjau dalam html css dan js tidak mengira unit bom bersebelahan dengan betul

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

P粉145543872P粉145543872276 hari yang lalu431

membalas semua(1)saya akan balas

  • P粉124070451

    P粉1240704512024-01-18 00:23:38

    Saya rasa masalahnya ialah pencampuran collrows:

                    if(cells[x+i + (y+j)*rows].isBomb == true)
                    //                   ^^^^
    
    ...
    
        cells[x + y*coll].number = count
        //          ^^^^
    

    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:

    if(cells[x+i + (y+j)*colls].isBomb == true)
    //                   ^^^^^ changed here
    

    Dan pertimbangkan untuk mengekstrak logik ini ke dalam fungsinya sendiri supaya anda tidak membuat kesilapan ini lagi.

    (== true部分也是多余的,就像在另一个if内部有一个ifSama, tetapi tidak akan menimbulkan masalah)

    balas
    0
  • Batalbalas