Das Minesweeper-Spiel in HTML-CSS und JS zählt benachbarte Bombeneinheiten nicht korrekt
P粉145543872
P粉145543872 2024-01-17 08:35:00
0
1
491

Ich versuche, Minesweeper mit HTML, CSS und Javascript neu zu erstellen. Ich muss benachbarte Zellen überprüfen, um zu sehen, ob es eine Bombe ist, und zählen, aber es scheint nicht den richtigen Teil der Zelle zu überprüfen. Ich verwende eine Zellklasse mit x, y, isBomb, isChecked und einer Zahl, die angibt, wie viele ihrer Nachbarn Bomben sind. Außerdem verwende ich ein 1D-Array, um das Zellengitter zu speichern Meine Frage ist also, ob mit dieser Funktion etwas nicht stimmt oder ob ich den Code mithilfe des eingefügten 2D-Arrays neu schreiben soll

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
}

Das Ergebnis der Verwendung der checkN-Funktion für jede Zelle

Ich habe versucht, die Werte ein wenig zu ändern, indem ich beispielsweise -1 und +1 hinzufüge, aber es ist immer noch nicht korrekt

P粉145543872
P粉145543872

Antworte allen(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>

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage