Boolean flagg i nestede løkker for, 2D arrays sjekk (Javascript)

stemmer
0

Jeg er ny utvikler og jeg har dette spørsmålet, takk på forhånd. bygge en tic tac toe spillet. Jeg vil til en horisontal sjekk, jeg fikk det til å fungere med telleren som dette:

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

men jeg vil prøve å gjøre det arbeidet med boolsk flagg for å gjøre det litt kortere og bedre. NB Jeg vet im arbeider på en loooong måte å løse tic tac toe, men im lære dette for å lære mer

nå har jeg prøvd å løse det med boolsk men det vil ikke fungere, når jeg feilsøkt det, det stopper sjekk fordi det er falsk, og det kommer aldri løkken igjen. Dette er hva jeg har prøvd:

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 fortsatt lære, og jeg vil sette pris på din hjelp og tips gutta. Takk igjen.

Publisert på 13/02/2020 klokken 22:01
kilden bruker
På andre språk...                            


2 svar

stemmer
2

Problemet er at ytre sløyfe ikke stopper når isWiner sant. Så vil du behandler andre rad og sett den til false.

Du må initialisere det til truei begynnelsen av hver rad, så sjekk det igjen på slutten av raden, og stoppe når en seier er funnet.

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

Svarte 13/02/2020 kl. 22:15
kilden bruker

stemmer
1

Du kan bruke Array.prototype.everyfor å sjekke om hver celle i en rad er lik currentPlayer.

Du kan bruke Array.prototype.somefor å sjekke om 1 eller flere rader i et spill passerer den testen.

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

Svarte 13/02/2020 kl. 22:51
kilden bruker

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