में बूलियन ध्वज छोरों के लिए नेस्ट, 2 डी सरणियों जाँच (जावास्क्रिप्ट)

वोट
0

मैं नया डेवलपर हूँ और मैं अग्रिम धन्यवाद इस सवाल है,। एक टिक टैक पैर की अंगुली खेल के निर्माण। मैं एक क्षैतिज जाँच करना चाहते हैं, मैं इसे इस तरह से काउंटर के साथ काम करने के लिए मिल गया है:

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

लेकिन मैं यह बूलियन ध्वज के साथ काम यह थोड़ा छोटा और बेहतर बनाने के लिए बनाने की कोशिश करना चाहते हैं। नोट मैं टिक टैक पैर की अंगुली हल करने के लिए एक loooong रास्ते पर im काम कर रहे है, लेकिन im इस जानने के लिए सीखने के अधिक

अब मैं बूलियन के साथ इसे हल करने की कोशिश की है, लेकिन यह काम नहीं है, जब मैं इसे डिबग, यह जांच बंद हो जाता है जाएगा, क्योंकि यह गलत है और यह कभी नहीं पाश फिर से प्रवेश करती है। इस मैं क्या कोशिश की है है:

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

इम अभी भी सीख रहा और मैं तुम्हारी मदद की और सुझावों लोग इसकी सराहना करेंगे। एक बार फिर धन्यवाद।

14/02/2020 को 00:01
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
2

समस्या यह है कि अपने बाहरी पाश जब बंद नहीं होता है isWinसच है। तो तुम दूसरी पंक्ति की प्रक्रिया और इसे करने के लिए सेट कर देंगे false

आप करने के लिए इसे प्रारंभ करने की आवश्यकता trueप्रत्येक पंक्ति की शुरुआत में, तो पंक्ति के अंत में इसे फिर से जाँच, और जब एक जीत पाया जाता है बंद करो।

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

14/02/2020 को 00:15
का स्रोत उपयोगकर्ता

वोट
1

आप उपयोग कर सकते हैं Array.prototype.every, तो हर जांच करने के लिए सेल एक में पंक्ति के बराबर है currentPlayer

आप उपयोग कर सकते हैं Array.prototype.some, तो 1 या अधिक की जाँच करने के पंक्तियों एक में खेल है कि परीक्षा उत्तीर्ण।

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

14/02/2020 को 00:51
का स्रोत उपयोगकर्ता

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