我一直在尝试创建自己的扫雷游戏(为了好玩)几个月了。我唯一真正被阻止的是如何制作递归函数(泛洪填充)来填充游戏中的空白区域。
洪水填充仅部分起作用。它不会从任何单击的节点扩展到右侧节点或底层节点。
FloodFill -part:
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。
这个小游戏项目对我来说意义重大,所以非常感谢任何帮助。
答案 0 :(得分:1)
运算符-=
和+=
表示向变量减去/添加某个值。
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);
希望这有帮助!