我是一名从事井字游戏的网络开发学生。

假设棋盘上的方块编号为 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/

10-10 06:44