Javascript flood-fill 功能仅部分工作 [Minesweeper]
Javascript flood-fill function working only partially [Minesweeper]
几个月来我一直在尝试创建自己的扫雷游戏(为了好玩)。唯一真正让我停下来的是如何制作递归函数(flood-fill)来填充游戏中的空白区域。
填充仅部分起作用。它不会从任何单击的节点延伸到右侧或底部节点。
FloodFill -部分:
function floodFill(node) {
if (node < 0) {return};
if (document.getElementById("cell" + node).style.backgroundColor == "white") {return};
if (document.getElementById("cell" + node).classList.contains("nearby")) {return};
document.getElementById("cell" + node).style.backgroundColor = "white";
floodFill(node -= 1);
floodFill(node += 1);
floodFill(node -= 16);
floodFill(node += 16);
return
};
floodFill(here);
"here"表示点击的节点。网格的大小是16,所以最下面的节点是当前节点+16。
这个小游戏项目对我来说意义重大,非常感谢任何帮助。
运算符-=
和+=
表示subtract/add变量的某个值。
a += 10;
等同于
a = a + 10;
因此,在您的代码中
floodFill(node -= 1);
floodFill(node += 1);
floodFill(node -= 16);
floodFill(node += 16);
node
每次调用函数时都会发生变化。
例如,如果 node
为 10,则会发生以下情况:
node
会减 1 (node -= 1
),现在是 9
floodFill
会被调用,node == 9
node
将增加 1 (node += 1
),现在是 10
- 等等
不要使用赋值运算符 (-=
/+=
),而是使用普通运算符 (-
/+
)。
解决方案:更改
floodFill(node -= 1);
floodFill(node += 1);
floodFill(node -= 16);
floodFill(node += 16);
到
floodFill(node - 1);
floodFill(node + 1);
floodFill(node - 16);
floodFill(node + 16);
希望对您有所帮助!
几个月来我一直在尝试创建自己的扫雷游戏(为了好玩)。唯一真正让我停下来的是如何制作递归函数(flood-fill)来填充游戏中的空白区域。
填充仅部分起作用。它不会从任何单击的节点延伸到右侧或底部节点。
FloodFill -部分:
function floodFill(node) {
if (node < 0) {return};
if (document.getElementById("cell" + node).style.backgroundColor == "white") {return};
if (document.getElementById("cell" + node).classList.contains("nearby")) {return};
document.getElementById("cell" + node).style.backgroundColor = "white";
floodFill(node -= 1);
floodFill(node += 1);
floodFill(node -= 16);
floodFill(node += 16);
return
};
floodFill(here);
"here"表示点击的节点。网格的大小是16,所以最下面的节点是当前节点+16。
这个小游戏项目对我来说意义重大,非常感谢任何帮助。
运算符-=
和+=
表示subtract/add变量的某个值。
a += 10;
等同于
a = a + 10;
因此,在您的代码中
floodFill(node -= 1);
floodFill(node += 1);
floodFill(node -= 16);
floodFill(node += 16);
node
每次调用函数时都会发生变化。
例如,如果 node
为 10,则会发生以下情况:
node
会减 1 (node -= 1
),现在是 9floodFill
会被调用,node == 9
node
将增加 1 (node += 1
),现在是 10- 等等
不要使用赋值运算符 (-=
/+=
),而是使用普通运算符 (-
/+
)。
解决方案:更改
floodFill(node -= 1);
floodFill(node += 1);
floodFill(node -= 16);
floodFill(node += 16);
到
floodFill(node - 1);
floodFill(node + 1);
floodFill(node - 16);
floodFill(node + 16);
希望对您有所帮助!