Javascript洪水填充功能只能部分工作[扫雷]

Javascript flood-fill function working only partially [Minesweeper]

本文关键字:工作 扫雷 能部 填充 功能 Javascript      更新时间:2023-09-26

几个月来,我一直在尝试创建自己的扫雷游戏(为了好玩)。我唯一真正被阻止的是如何制作递归函数(洪水填充)来填充游戏中的空白区域。

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

当前完整代码

溢流填充-部分:

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

"此处"表示单击的节点。网格的大小为16,因此底部节点为当前节点+16。

这个小游戏项目对我来说意义重大,所以我们非常感谢您的帮助。

运算符-=+=表示将某个值减去/添加到变量中。

a += 10;

相当于

a = a + 10;

因此,在您的代码中

floodFill(node -= 1);                           
floodFill(node += 1);
floodFill(node -= 16);
floodFill(node += 16);

CCD_ 3在每个函数调用中都被更改。

例如,如果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);

希望这能有所帮助!