Boolean-Flag in for-Schleifen verschachtelt, 2D-Arrays überprüfen (Javascript)

stimmen
0

Ich bin neu Entwickler, und ich habe diese Frage, Dank im Voraus. Aufbau einer Tic Tac Toe-Spiel. Ich möchte einen horizontalen Scheck, ich habe es an der Arbeit mit Zählern wie folgen aus:

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;
    }

aber ich möchte versuchen, es mit boolean - Flag funktioniert es etwas kürzer und besser zu machen. HINWEIS „“ Ich weiß im Arbeits auf einem loooong Weg , um die Tic Tac Toe zu lösen, aber im Lernen dies mehr zu lernen „“

Jetzt habe ich versucht, es mit boolean zu lösen, aber es wird nicht funktionieren, wenn ich es ausgetestet, stoppt er die Prüfung, weil es falsch ist und es geht nie um die Schleife wieder. das ist, was ich versucht habe:

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 noch lernen, und ich würde Ihre Hilfe und Tipps Jungs zu schätzen wissen. Danke noch einmal.

Veröffentlicht am 13/02/2020 um 22:01
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
2

Das Problem ist , dass Ihre äußere Schleife stoppt nicht , wenn isWinwahr ist. So werden Sie die zweite Zeile verarbeiten und setzen Sie ihn auf false.

Sie müssen es initialisieren , um trueam Anfang jeder Zeile, dann klicken Sie hier am Ende der Reihe, und stoppt , wenn ein Gewinn gefunden wird.

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());

Beantwortet am 13/02/2020 um 22:15
quelle vom benutzer

stimmen
1

Sie können verwendet werden, Array.prototype.everywenn jeder überprüfen Zelle in einer Zeile gleich currentPlayer.

Sie können verwenden Array.prototype.someüberprüfen , ob eine oder mehr Zeilen in einem Spiel , dass die Prüfung bestehen.

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());

Beantwortet am 13/02/2020 um 22:51
quelle vom benutzer

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