bandeira Boolean em nested loops, matrizes 2D verificar (JavaScript)

votos
0

Eu sou novo desenvolvedor e eu tenho esta pergunta, obrigado antecipadamente. a construção de um jogo tic tac toe. eu quero um cheque horizontal, eu tenho que trabalhar com contador como este:

var currentPlayer = 'X';

var ArrOfBoardRealTime = [['X','X','X'],
                          ['O','X','X'],
                          ['O','X','X']]; 

    function checkWinners() {
        var counter = 0;
        var winner;

        for(let i = 0; i < ArrOfBoardRealTime.length && counter < 3; i++){
            for(let j = 0; j < ArrOfBoardRealTime[i].length; j++){
                if(ArrOfBoardRealTime[i][j] == currentPlayer){
                    counter++;
                }  
            }
            if(counter == 3){
                winner = currentPlayer + ' WON ,HORI-WAY';

            }else{
                counter = 0;
                winner = 'NO WIN';
            }
        }
        return winner;
    }

mas eu quero tentar fazê-lo funcionar com sinalizador booleano para torná-lo um pouco mais curto e melhor. NOTA Eu sei de trabalho im em uma maneira loooong para resolver o tic tac toe, mas im aprendendo isso para aprender mais

Agora eu tentei resolvê-lo com boolean, mas não vai funcionar, quando eu depurado, ele pára a verificação porque é falsa e nunca entra no circuito novamente. isto é o que eu tentei:

var currentPlayer = 'X';

var ArrOfBoardRealTime = [['X','X','X'],
                          ['O','X','X'],
                          ['O','X','X']];     


function checkWinners() {
    var isWin = true; 
    for (var i = 0; i < ArrOfBoardRealTime.length; i++ ){
        for(var j = 0; j < ArrOfBoardRealTime[i].length && isWin; j++){
            if (ArrOfBoardRealTime[i][j] != currentPlayer){
                isWin = false;
            }
        }

    }
    return isWin;
}

Im ainda está aprendendo e eu aprecio sua ajuda e dicas caras. Obrigado novamente.

Publicado 14/02/2020 em 00:01
fonte usuário
Em outras línguas...                            


2 respostas

votos
2

O problema é que o loop externo não pára quando isWiné verdadeiro. Então você vai processar a segunda linha e configurá-lo para false.

Você precisa inicializá-lo para trueno início de cada linha, em seguida, verificá-lo novamente no final da linha, e parar quando uma vitória é encontrado.

var currentPlayer = 'X';

var ArrOfBoardRealTime = [
  ['X', 'X', 'X'],
  ['O', 'X', 'X'],
  ['O', 'X', 'X']
];

function checkWinners() {
  var isWin;
  for (var i = 0; i < ArrOfBoardRealTime.length; i++) {
    isWin = true;
    for (var j = 0; j < ArrOfBoardRealTime[i].length && isWin; j++) {
      if (ArrOfBoardRealTime[i][j] != currentPlayer) {
        isWin = false;
      }
    }
    if (isWin) {
      break;
    }
  }
  return isWin;
}
console.log(checkWinners());

Respondeu 14/02/2020 em 00:15
fonte usuário

votos
1

Você pode usar Array.prototype.everypara verificar se todas as células em uma linha é igual currentPlayer.

Você pode usar Array.prototype.somepara verificar se 1 ou mais linhas em um jogo passar nesse teste.

var currentPlayer = 'X';

var ArrOfBoardRealTime = [
  ['X', 'O', 'X'],
  ['O', 'X', 'O'],
  ['X', 'O', 'X']
];

function checkWinners() {
  var isWin;
  isWin = ArrOfBoardRealTime.some(row => row.every(cell => cell === currentPlayer)); 
  return isWin;
}
console.log(checkWinners());

Respondeu 14/02/2020 em 00:51
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more