Boolean vlajku ve vnořené do smyček, 2D čipy zkontrolovat (Javascript)

hlasů
0

Jsem nový developer a mám na tuto otázku, díky předem. budování Tic Tac Toe hru. Chci horizontální kontroly, já to mám do práce s protiproudem, jako je tento:

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

ale chci to zkusit, aby to fungovalo s logický příznak, aby byl o něco kratší a lépe. Poznámka „“ Já vím, im pracuje na loooong způsob, jak vyřešit Tic Tac Toe, ale im učit se toto dozvědět se více „“

Teď jsem se snažil řešit s logickou hodnotu, ale to nebude fungovat, když jsem ji ladit, zastaví kontrolu, protože to je nepravdivé a že nikdy znovu vstupuje do smyčky. To je to, co jsem se snažil:

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 stále učí a já bych ocenil vaši pomoc a tipy kluci. Ještě jednou děkuji.

Položena 14/02/2020 v 00:01
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
2

Problém je v tom, že vnější smyčka se nezastaví, pokud isWinje to pravda. Takže budete zpracovávat druhý řádek a nastavit tak, aby false.

Abyste ji inicializovat, aby truena začátku každého řádku, a pak jej znovu zkontrolujte na konci řady, a zastavit, když se zjistí, že výhra.

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

Odpovězeno 14/02/2020 v 00:15
zdroj uživatelem

hlasů
1

Můžete použít Array.prototype.everyke kontrole, zda každá buňka v řadě se rovná currentPlayer.

Můžete použít Array.prototype.someke kontrole, zda 1 nebo více řádků ve hře projít tuto zkoušku.

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

Odpovězeno 14/02/2020 v 00:51
zdroj uživatelem

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