0

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;
    }
}
4

1 に答える 1

1

これはあなたが思っているよりもよく知られた問題です。Flood Fillアルゴリズムを実装することで、必要なことを実現できます。

于 2011-05-11T13:29:33.827 に答える