我正在用 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/