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
我认为问题在于混合
coll
和rows
:有时您可以通过
cells[x + y*coll]
访问位于x, y
处的单元格,有时通过cells[x + y*rows] 访问
。我认为coll
是正确的(每个y
都会跳过一整行,该行由coll
列组成),因此请尝试将代码更改为:并考虑将这段逻辑提取到它自己的函数中,这样你就不会再犯这个错误了。
(
== true
部分也是多余的,就像在另一个if
内部有一个if
一样,但两者都不会引起问题) p>