javascript - 测试数组是否包含八个 3 键值中的任何一个 - Tic Tac Toe 游戏

标签 javascript arrays

我正在用 Javascript 开发一个简单的 Tic Tac Toe 游戏。现在,为了检查获胜者,我有一个函数,首先轮到谁了,然后找到棋盘上有 X 或 O 的位置​​。它们所具有的空间被编号(1-8)并添加到一个数组中。到目前为止,一切都很好。

现在我尝试比较另一个数组,该数组包含所有获胜组合:

var winningCombinations = [[1,2,3],[4,5,6],[7,8,9],[1,4,7],[2,5,8],[3,6,9],[1,5,9],[3,5,7]];

使用测试数组,应该会获胜,因为它包含 2、5 和 8。

我的测试来源:

<script>

    var test = [2,4,5,8]
    var winningCombinations = [[1,2,3],[4,5,6],[7,8,9],[1,4,7],[2,5,8],[3,6,9],[1,5,9],[3,5,7]];

    for(var x=0; x<winningCombinations.length; x++) {

        if (winningCombinations[x].indexOf(test) > -1) {
            alert("Win!");
        } else {
            alert ("No win.");
        }

    }

</script>

我认为现在它只是测试 [2,4,5,8] 作为一个完整的值 - 而不是内部单个数字的实例。这就是我被难住的地方。如何检查测试数组是否以任何顺序匹配任何 WinningCombinations 值?

最佳答案

试试这个:

var test = [2,4,5,8]
var winningCombinations = [[1,2,3],[4,5,6],[7,8,9],[1,4,7],[2,5,8],[3,6,9],[1,5,9],[3,5,7]];
var combLength = 0;
for (var i in winningCombinations) {
    combLength = winningCombinations.length;
    for (var j in winningCombinations[i]) {
        if (-1 == test.indexOf(winningCombinations[i][j])) {
            break;
        }
    }

    if (combLength - 1 == j) {
        alert("Win!");
    }
}

在第一个 if 语句中,我们检查当前循环数组中当前循环的项(我知道这看起来很困惑)是否存在于 test 数组中。如果不是,我们就已经知道test数组不是获胜数组。

此外,我建议将所有这些内容包装在这样的函数中:

function isWinner(playerNumbers, winningCombinations) {
    var combLength = 0;
    for (var i in winningCombinations) {
        combLength = winningCombinations.length;
        for (var j in winningCombinations[i]) {
            if (-1 == playerNumbers.indexOf(winningCombinations[i][j]) {
                break;
            }
        }

        if (combLength - 1 == j) {
            return true;
        }
    }

    return false;
}

var test = [2,4,5,8]
var winningCombinations = [[1,2,3],[4,5,6],[7,8,9],[1,4,7],[2,5,8],[3,6,9],[1,5,9],[3,5,7]];

if (isWinner(test, winningCombinations)) {
    alert("Win!");
} else {
    alert ("No win.");
}

关于javascript - 测试数组是否包含八个 3 键值中的任何一个 - Tic Tac Toe 游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19250519/

相关文章:

javascript - 浏览图像并将其传递给弹出窗口

java - 如何使用 PostgreSQL 和 Hibernate 映射 Java 多维数组

python - 如何获取二维数组的唯一行及其出现次数?

javascript - 网页中的中心 Logo (垂直和水平)

javascript - 为什么 Javascript 不能在 digital.Dialog 弹出窗口中工作?

javascript - 排序映射实现

c - 无法在 C 中产生所需的输出、循环和数组

javascript - 你能用 $parse 推送到 Angular 中动态声明的数组吗?

arrays - 在矩阵中按元素复制

javascript - 如何使用 jQuery 选择按钮内的元素