JQuery рекурсивная функция - PullRequest
0 голосов
/ 11 мая 2011

Я пытаюсь сделать игру тральщика в jquery.

Когда пользователь нажимает на ячейку таблицы, выполняется проверка, чтобы увидеть, есть ли число или x в квадрате.Если нет, вызывается эта функция и ей передается ячейка таблицы.

Функция возвращает все соседние квадраты в квадрат, по которому щелкнули, и они затем раскрываются.

Вопросесть, из выбора соседних квадратов, первоначально возвращенных, как я могу проверить, являются ли какие-либо из них пустыми, и если они есть, получить квадраты, смежные с ними, и раскрыть их и проверить, являются ли какие-либо из них пустыми .... довсе пустые квадраты, которые были смежны с любыми смежными квадратами по отношению к кликаемому, открыты?

if (isEmptySquare(this)) {
    emp = adjacentSquares(this);
    $(emp).each(function() {
        $(this).removeClass('covered').addClass('uncovered');
    });
}

function adjacentSquares(square) {
    //Find the row and column of the current td(square)
    var thisRow = $(square).parent().parent().children().index($(square).parent());
    var thisCol = $(square).parent().children().index($(square));
    var prevRow = (thisRow - 1);
    var nextRow = (thisRow + 1);

    if (thisCol == 0) {
        sliceFrom = 0;
    } else {
        sliceFrom = (thisCol - 1);
    }

    //Select all the adjacent td's to the current td, then merge the adjacent cells into a variable
    var above = $('tr:eq(' + prevRow + ')').children('td').slice((sliceFrom), (thisCol + 2));
    var below = $('tr:eq(' + nextRow + ')').children('td').slice((sliceFrom), (thisCol + 2));
    var aboveBelow = $.merge(above, below);
    var prevNext = $.merge(($(square).next('td')), ($(square).prev('td')));
    var adjacents = $.merge(aboveBelow, prevNext);

    return adjacents;
}

function isEmptySquare(square) {
    if ($(square).filter(function() {
        return !/[0-9]/.test($(square).text());
    }).not(":contains('x')").length > 0) {
        return true;
    }
    else {
        return false;
    }
}

1 Ответ

1 голос
/ 11 мая 2011

Это более знакомая проблема, чем вы думаете.Вы можете достичь того, что вам нужно, реализовав алгоритм Flood Fill .

...