扫雷洪水填充JavaScript

时间:2016-12-11 18:32:03

标签: javascript minesweeper

我遇到了一些垃圾填埋问题,我不知道它有什么问题,因为我试图从别人的代码中复制一些代码,这对他有用,对我而言。 我有一个9x9双维数组作为边框。首先,我想只水平显示字段,但代码无限。使用一个FloodFill就可以了。

    function floodFill(x, y) {

    if (y < 0) {
        console.log("left border exceeded");
        return;
    }
    if (y > 8) {
        console.log("right border exceeded");
        return;
    }
    if (numberOfBombsAdjacentToField[x][y] > 0) {
        console.log("there are bombs nearly");
        return;
    }
    if (document.getElementById(((x).toString() + (y).toString())).style.backgroundColor == "darkGray") {
        console.log("already clicked");
        return;
    }
    document.getElementById(((x).toString() + (y).toString())).style.backgroundColor = "darkGray";
    floodFill(x, y + 1);
    floodFill(x, y - 1);
}

1 个答案:

答案 0 :(得分:0)

好的问题出在浏览器上。 Google Chrome正在将DarkGray的颜色看作黑暗。我重命名后一切都很好。除此之外,我改进了我的代码,这是最终形式:

function floodFill(x, y) {

    if (y < 0) {
        console.log("left border exceeded");
        return;
    }
    if (y > 8) {
        console.log("right border exceeded");
        return;
    }
    if (x < 0) {
        console.log("top border exceeded");
        return;
    }
    if (x > 8) {
        console.log("bottom border exceeded");
        return;
    }
    if (board[x][y]) {
        console.log("bomb!");
        return;
    }
    if (document.getElementById(((x).toString() + (y).toString())).style.backgroundColor == "darkgray") {
        console.log("already clicked");
        return;
    }
    if (numberOfBombsAdjacentToField[x][y] > 0) {
        var divToChange = document.getElementById((x.toString() + y.toString()));
        divToChange.innerHTML = numberOfBombsAdjacentToField[x][y].toString();
        divToChange.style.backgroundColor = "darkGray";
        return;
    }
    else {
        document.getElementById(((x).toString() + (y).toString())).style.backgroundColor = "darkGray";
        document.getElementById(((x).toString() + (y).toString())).innerHTML = "";
    }
    floodFill(x, y - 1);
    floodFill(x, y + 1);
    floodFill(x + 1, y);
    floodFill(x - 1, y);
    floodFill(x - 1, y - 1);
    floodFill(x - 1, y + 1);
    floodFill(x + 1, y - 1);
    floodFill(x + 1, y + 1);
}