Javascript泛洪功能仅部分工作[Minesweeper]

时间:2015-12-05 02:54:46

标签: javascript jquery flood-fill minesweeper

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

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

Current full code

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。

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

1 个答案:

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

希望这有帮助!