2015-12-05 72 views
1

我一直在努力创造自己的扫雷游戏(为了好玩)几个月了。只有我真正被阻止的事情是如何使递归函数(洪水填充)填补游戏中的空白区域。Javascript flood-fill功能只能部分工作[扫雷]

洪水填充只能部分工作。它不会扩展到任何点击节点的右侧或底部节点。

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

的 “这里” 是指点击节点。网格的大小是16,所以底部节点是当前节点+ 16.

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

+0

我有同样的问题。我仍然无法解决它。 Thx询问。 –

回答

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

希望这有助于!

+0

非常感谢您!有用! –