我试图用
JavaScript进行扫雷,我遇到了一个让我困住了好几天的问题.我知道已有关于这个主题的帖子,但是我已经阅读了它们并试了一下,我没有运气.
我遇到的问题是当用户按下一个空白方块时,我希望它能够发现每个触摸它的空白方块(空白方块意味着网格上有一个正方形1个方块的正方形或对角线的正方形).
该程序现在几乎清除了每个相距一个方格的空白方块,但它仍然缺少一些随机的方块,我无法弄清楚原因.
我在调用runOffset()时尝试添加其他组合,例如runOffset(25,25)和runOffset(-25,-25)但是这并没有改变任何东西.这是一个简单的修复,还是我错了?
带圆圈的正方形是应该已经清除但不是正方形的正方形,X是用户点击的位置.
•我写错了吗? (我写出函数的方式会按照我想要的方式执行吗?)
•函数checkBlanks()是否因错误原因而退回?
•我错过了错过上图中圈出的方块的错误?
function borderingBombs(safeSquareCoords) {
var minesNext = 0;
for (var i = 0; i < mines.length; i++) {
var mineCoords = mines[i].split(",");
if (mineCoords[0] - 25 == safeSquareCoords[0]) {
if (mineCoords[1] == safeSquareCoords[1]) {
// Left
minesNext++;
} else if (mineCoords[1] - 25 == safeSquareCoords[1]) {
// Top Left
minesNext++;
} else if (mineCoords[1] == safeSquareCoords[1] - 25) {
// Bottom Left
minesNext++;
}
} else if (safeSquareCoords[0] - 25 == mineCoords[0]) {
if (mineCoords[1] == safeSquareCoords[1]) {
// Right
minesNext++;
} else if (mineCoords[1] - 25 == safeSquareCoords[1]) {
// Right Top
minesNext++;
} else if (mineCoords[1] == safeSquareCoords[1] - 25) {
// Bottom Right
minesNext++;
}
} else if (mineCoords[1] - 25 == safeSquareCoords[1] && mineCoords[0] == safeSquareCoords[0]) {
// Bottom
minesNext++;
} else if (safeSquareCoords[1] - 25 == mineCoords[1] && mineCoords[0] == safeSquareCoords[0]) {
// Top
minesNext++;
}
}
return minesNext;
}
// Discover all blanks touching blanks
function checkBlanks(blnkSquare) {
if (!discovered(blnkSquare)) {
var blnkSquareCoords = blnkSquare.split(",");
safe.push(blnkSquare);
ctx.drawImage(blankImg, blnkSquareCoords[0], blnkSquareCoords[1]);
if (borderingBombs(blnkSquare) == 0) {
runOffset(blnkSquareCoords, 0, -25); // Top
runOffset(blnkSquareCoords, 0, 25); // Bottom
runOffset(blnkSquareCoords, 25, 0); // Right
runOffset(blnkSquareCoords, -25, 0); // Left
runOffset(blnkSquareCoords, -25, 25);
runOffset(blnkSquareCoords, 25, -25);
}
}
}
function runOffset(origin, xOffset, yOffset) {
var newBlnkSquare = origin;
newBlnkSquare[0] = parseInt(newBlnkSquare[0])+xOffset;
newBlnkSquare[1] = parseInt(newBlnkSquare[1])+yOffset;
outBlnkSquare = newBlnkSquare[0] + "," + newBlnkSquare[1];
if (newBlnkSquare[0] >= 0 && newBlnkSquare[1] >= 0 && newBlnkSquare[0] < 250 && newBlnkSquare[1] < 250) {
if (!isMine(outBlnkSquare)) {
drawSafe(outBlnkSquare);
}
}
}