2015-12-05 110 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

非常感謝您!有用! –