Javascript flood-fill 功能仅部分工作 [Minesweeper]

Javascript flood-fill function working only partially [Minesweeper]

几个月来我一直在尝试创建自己的扫雷游戏(为了好玩)。唯一真正让我停下来的是如何制作递归函数(flood-fill)来填充游戏中的空白区域。

填充仅部分起作用。它不会从任何单击的节点延伸到右侧或底部节点。

Current full code

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);

希望对您有所帮助!