我正在尝试使用JavaScript制作扫雷游戏,但是我遇到了一个问题,这个问题已经困扰我好几天了。我知道已经有关于这个主题的帖子,但是我已经阅读并尝试了它们,但是仍然没有运气。
我遇到的问题是,当用户按下空白方块时,我希望它发现每个与其相邻的空白方块(空白方块指网格上没有地雷且相隔1个或对角线的方块)。
程序现在几乎清除了每个相距一个方块的空白方块,但仍然缺少一些随机的方块,我无法弄清楚为什么会这样。
我尝试添加其他组合来调用runOffset(),例如runOffset(25, 25)和runOffset(-25, -25),但是这并没有改变任何东西。这是一个简单的修复,还是我做错了?
这是一些可能需要回答的问题:
• 我是否编写错误?(我编写的函数是否能实现我的要求?)
• 函数checkBlanks()是否因为错误的原因被返回?
• 我错过了什么,导致它错过了上图中标记的方块?
完整代码请点此链接(第297行)。
我遇到的问题是,当用户按下空白方块时,我希望它发现每个与其相邻的空白方块(空白方块指网格上没有地雷且相隔1个或对角线的方块)。
程序现在几乎清除了每个相距一个方块的空白方块,但仍然缺少一些随机的方块,我无法弄清楚为什么会这样。
我尝试添加其他组合来调用runOffset(),例如runOffset(25, 25)和runOffset(-25, -25),但是这并没有改变任何东西。这是一个简单的修复,还是我做错了?
这是一些可能需要回答的问题:
• 我是否编写错误?(我编写的函数是否能实现我的要求?)
• 函数checkBlanks()是否因为错误的原因被返回?
• 我错过了什么,导致它错过了上图中标记的方块?
完整代码请点此链接(第297行)。
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);
}
}
}