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
Je pense que le problème vient du mixage
coll
和rows
: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 :Et pensez à extraire cette logique dans sa propre fonction afin de ne plus commettre cette erreur.
(
== true
部分也是多余的,就像在另一个if
内部有一个if
Idem, mais ni l'un ni l'autre ne posera de problèmes) p>