Есть ли способ определить, совпадает ли массив с каждым набором в массиве 2d после циклического прохождения через массив 2d для каждого элемента в массиве? - PullRequest
0 голосов
/ 20 декабря 2018

Я создаю tictactoe игру и пытаюсь сравнить каждый установленный массив в массиве winPattern 2d с массивом placePieces.

Я создал циклы для перебора массива winPattern 2d для каждого массива placePieces, но, поскольку он не распознает каждый массив как набор и просто перебирает отдельные значения, он не работает должным образом.

const winPattern = [
        //horizontal
        [0, 1, 2],
        [3, 4, 5],
        [6, 7, 8],

        //vertical
        [0, 3, 6],
        [1, 4, 7],
        [2, 5, 8],

        //diagonal
        [0, 4, 8],
        [2, 4, 6]
  ];
//positions that o or x would be in tictactoe
const placePieces = [0, 1, 2, 4, 8];
let count = 0;

nextPiece:
for (let i = 0; i < placePieces.length; i++) {
    for (let j = 0; j < winPattern.length; j++) {
        for (let n = 0; n < winPattern[0].length; n++) {
            if (placePieces[i] === winPattern[j][n]) {
                //Prints out the matches and mismatches
                console.log(`It matches: Piece: ${placePieces[i]} //\\ Pattern: ${winPattern[j][n]}`);

                continue nextPiece;
            } else {
                console.log(`It doesn't match: Piece: ${placePieces[i]} //\\Pattern: ${winPattern[j][n]}`);
            }
        }
    }
}

Я ожидаю, что массив placePieces будет сравнивать значения с каждым набором массивов в массиве winPattern 2d.

1 Ответ

0 голосов
/ 20 декабря 2018

Этот код должен работать, чтобы видеть, совпадает ли текущий массив пользователей с чем-либо в массиве ответов -

    var winPattern = [
        //horizontal
        [0, 1, 2],
        [3, 4, 5],
        [6, 7, 8],

        //vertical
        [0, 3, 6],
        [1, 4, 7],
        [2, 5, 8],

        //diagonal
        [0, 4, 8],
        [2, 4, 6]
  ];
//positions that o or x would be in tictactoe
var placePieces = [0, 1, 2, 4, 8, ];
var count = 0;

function arraysEqual(a, b) {
  if (a === b) return true;
  if (a == null || b == null) return false;
  if (a.length != b.length) return false;


  for (var i = 0; i < a.length; ++i) {
    if (a[i] !== b[i]) return false;
  }
  return true;
}


function checkMatch(arr){
  for(var i = 0; i < winPattern.length; i++){
    for(var j = 0; j < arr.length - 2; j++){
      for(var k = j + 1; k < arr.length - 1; k++){
        for(var l = k + 1; l < arr.length; l++){
          var possibleAnswer = [arr[j], arr[k], arr[l]];
          if(arraysEqual(possibleAnswer, winPattern[i])) return true;
        }
      }
    }
  }
  return false;
}

Это предполагает, что placePieces отсортирован, потому что казалось, что это было в вашем примере.Надеюсь, это поможет!

...