扫雷 FloodFill JavaScript
Minesweeper FloodFill JavaScript
floodfill 有一些问题,我不明白它有什么问题,因为我试图从其他人的代码中复制一些代码,它对他有用,对我却不行。
我有一个 9x9 双维数组作为边框。首先,我只想水平显示字段,但代码会无限大。使用一个 FloodFill 效果很好。
function floodFill(x, y) {
if (y < 0) {
console.log("left border exceeded");
return;
}
if (y > 8) {
console.log("right border exceeded");
return;
}
if (numberOfBombsAdjacentToField[x][y] > 0) {
console.log("there are bombs nearly");
return;
}
if (document.getElementById(((x).toString() + (y).toString())).style.backgroundColor == "darkGray") {
console.log("already clicked");
return;
}
document.getElementById(((x).toString() + (y).toString())).style.backgroundColor = "darkGray";
floodFill(x, y + 1);
floodFill(x, y - 1);
}
好的,问题出在浏览器上。 Google Chrome 将 DarkGray 的颜色读作 darkgray。我改名后一切都很好。除此之外,我改进了我的代码,这是最终形式:
function floodFill(x, y) {
if (y < 0) {
console.log("left border exceeded");
return;
}
if (y > 8) {
console.log("right border exceeded");
return;
}
if (x < 0) {
console.log("top border exceeded");
return;
}
if (x > 8) {
console.log("bottom border exceeded");
return;
}
if (board[x][y]) {
console.log("bomb!");
return;
}
if (document.getElementById(((x).toString() + (y).toString())).style.backgroundColor == "darkgray") {
console.log("already clicked");
return;
}
if (numberOfBombsAdjacentToField[x][y] > 0) {
var divToChange = document.getElementById((x.toString() + y.toString()));
divToChange.innerHTML = numberOfBombsAdjacentToField[x][y].toString();
divToChange.style.backgroundColor = "darkGray";
return;
}
else {
document.getElementById(((x).toString() + (y).toString())).style.backgroundColor = "darkGray";
document.getElementById(((x).toString() + (y).toString())).innerHTML = "";
}
floodFill(x, y - 1);
floodFill(x, y + 1);
floodFill(x + 1, y);
floodFill(x - 1, y);
floodFill(x - 1, y - 1);
floodFill(x - 1, y + 1);
floodFill(x + 1, y - 1);
floodFill(x + 1, y + 1);
}
floodfill 有一些问题,我不明白它有什么问题,因为我试图从其他人的代码中复制一些代码,它对他有用,对我却不行。 我有一个 9x9 双维数组作为边框。首先,我只想水平显示字段,但代码会无限大。使用一个 FloodFill 效果很好。
function floodFill(x, y) {
if (y < 0) {
console.log("left border exceeded");
return;
}
if (y > 8) {
console.log("right border exceeded");
return;
}
if (numberOfBombsAdjacentToField[x][y] > 0) {
console.log("there are bombs nearly");
return;
}
if (document.getElementById(((x).toString() + (y).toString())).style.backgroundColor == "darkGray") {
console.log("already clicked");
return;
}
document.getElementById(((x).toString() + (y).toString())).style.backgroundColor = "darkGray";
floodFill(x, y + 1);
floodFill(x, y - 1);
}
好的,问题出在浏览器上。 Google Chrome 将 DarkGray 的颜色读作 darkgray。我改名后一切都很好。除此之外,我改进了我的代码,这是最终形式:
function floodFill(x, y) {
if (y < 0) {
console.log("left border exceeded");
return;
}
if (y > 8) {
console.log("right border exceeded");
return;
}
if (x < 0) {
console.log("top border exceeded");
return;
}
if (x > 8) {
console.log("bottom border exceeded");
return;
}
if (board[x][y]) {
console.log("bomb!");
return;
}
if (document.getElementById(((x).toString() + (y).toString())).style.backgroundColor == "darkgray") {
console.log("already clicked");
return;
}
if (numberOfBombsAdjacentToField[x][y] > 0) {
var divToChange = document.getElementById((x.toString() + y.toString()));
divToChange.innerHTML = numberOfBombsAdjacentToField[x][y].toString();
divToChange.style.backgroundColor = "darkGray";
return;
}
else {
document.getElementById(((x).toString() + (y).toString())).style.backgroundColor = "darkGray";
document.getElementById(((x).toString() + (y).toString())).innerHTML = "";
}
floodFill(x, y - 1);
floodFill(x, y + 1);
floodFill(x + 1, y);
floodFill(x - 1, y);
floodFill(x - 1, y - 1);
floodFill(x - 1, y + 1);
floodFill(x + 1, y - 1);
floodFill(x + 1, y + 1);
}