Heim  >  Fragen und Antworten  >  Hauptteil

Das Minesweeper-Spiel in HTML-CSS und JS zählt benachbarte Bombeneinheiten nicht korrekt

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粉145543872P粉145543872276 Tage vor428

Antworte allen(1)Ich werde antworten

  • P粉124070451

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

    我认为问题在于混合 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一样,但两者都不会引起问题)

    Antwort
    0
  • StornierenAntwort