我是一名从事井字游戏的网络开发学生。
假设棋盘上的方块编号为 1-9,我有一个代表获胜组合的三元素数组。我需要一种方法来检查每个玩家拥有的这些组合的方格。我想我将需要嵌套的 for
循环,但我无法让它工作。我试过在 owned
中搜索 winners
并在 winners
中搜索 owned
。
有什么想法吗?我正在使用 jQuery,但也会对 vanilla JavaScript 解决方案感到满意。
编辑:明确地说,在井字游戏中,winners
的顺序和玩家移动的顺序是没有意义的。在典型的游戏结束时,xOwned
可能是 [9, 4, 7, 3, 8] 并且这应该导致“X 赢!”因为里面有 [7, 8, 9] 。
var xOwned = [];
var oOwned = [];
var winners = [
["1", "2", "3"],
["4", "5", "6"],
["7", "8", "9"],
["1", "4", "7"],
["2", "5", "8"],
["3", "6", "9"],
["1", "5", "9"],
["7", "8", "9"]
];
//when a player clicks on a square the value/number
//of that square (i.e., 1-9) is pushed into their array.
var game = {
score: function(){
for (var i = 0; i <= xOwned.length; i++) {
for (var j = 0; j < 3; j++) {
if($.inArray(xOwned[i], winners[j]) !== -1) {
victory.html("X wins!");
}
}
}
for (var k = 0; k <= oOwned.length; k++) {
for (var l = 0; l < 3; l++) {
if($.inArray(oOwned[k], winners[l]) !== -1) {
victory.html("O wins!");
}
}
}
}
};
最佳答案
好的,您需要确保 xOwned 或 oOwned 包含获胜者数组中的序列之一,并且获胜序列始终为 3 个元素。这可以像这样完成:
for(var i=0; i<winners.length; i++) {
// It's only 3 elements do you really need to loop?
if (xOwned.indexOf(winners[i][0]) > -1
&& xOwned.indexOf(winners[i][1]) > -1
&& xOwned.indexOf(winners[i][2]) > -1) {
// x won!
break;
} else if (oOwned.indexOf(winners[i][0]) > -1
&& oOwned.indexOf(winners[i][1]) > -1
&& oOwned.indexOf(winners[i][2]) > -1) {
// o won!
break;
}
}
或者更少的代码但不太清楚:
for(var i=0; i<winners.length; i++) {
if (!winners[i].some(function(n) { return xOwned.indexOf(n) < 0; })) {
// x won!
break;
} else if (!winners[i].some(function(n) { return oOwned.indexOf(n) < 0; })) {
// o won!
break;
}
}
引用 MDN
好的,我将尝试在第二段代码中解释条件:如果获胜序列的元素不在玩家的“移动”序列中,则意味着获胜序列中的所有元素都在玩家的“移动”序列中,因此该玩家获胜。
关于javascript - 使用 JavaScript/jQuery 检查嵌套数组以获得获胜组合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35816164/