recherche

Maison  >  Questions et réponses  >  le corps du texte

Le jeu de dragueur de mines en HTML, CSS et JS ne compte pas correctement les unités de bombes adjacentes

J'essaie de recréer le dragueur de mines avec html, css et javascript, je dois vérifier les cellules adjacentes pour voir si c'est une bombe et compter, mais il ne semble pas vérifier la bonne partie de la cellule. J'utilise une classe de cellules avec x, y, isBomb, isChecked et un nombre qui représente le nombre de ses voisins qui sont des bombes. J'utilise également un tableau 1D pour stocker la grille de cellules. Ma question est donc de savoir s'il y a quelque chose qui ne va pas avec cette fonction ou dois-je réécrire le code en utilisant un tableau 2D inséré

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
}

Le résultat de l'utilisation de la fonction checkN sur chaque cellule

J'ai essayé de changer un peu les valeurs, comme en y ajoutant -1 et +1 mais ce n'est toujours pas correct

P粉145543872P粉145543872435 Il y a quelques jours549

répondre à tous(1)je répondrai

  • P粉124070451

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

    Je pense que le problème vient du mixage collrows :

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

    Parfois, vous pouvez le composer par cells[x + y*coll] 访问位于 x, y 处的单元格,有时通过 cells[x + y*rows] 访问。我认为 coll 是正确的(每个 y 都会跳过一整行,该行由 coll colonnes), alors essayez de changer votre code comme suit :

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

    Et pensez à extraire cette logique dans sa propre fonction afin de ne plus commettre cette erreur.

    (== true部分也是多余的,就像在另一个if内部有一个ifIdem, mais ni l'un ni l'autre ne posera de problèmes)

    répondre
    0
  • Annulerrépondre