Boolean σημαία στα ένθετα για βρόχους, συστοιχίες 2D ελέγξετε (Javascript)

ψήφοι
0

Είμαι νέος προγραμματιστής και έχω αυτή την ερώτηση, ευχαριστώ εκ των προτέρων. οικοδόμηση μιας tic tac παιχνίδι toe. Θέλω να σε οριζόντιο έλεγχο, το πήρα στην εργασία με μετρητή όπως αυτό:

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

αλλά θέλω να προσπαθήσω να την κάνουμε να λειτουργήσει με δυαδική σημαία για να γίνει λίγο μικρότερο και καλύτερα. ΣΗΜΕΙΩΣΗ «» Ξέρω im εργασίας σε loooong τρόπος να λυθεί το τρίλιζα, αλλά 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;
}

Im ακόμα μαθαίνω και εγώ θα εκτιμούσα τη βοήθειά σας και τις συμβουλές παιδιά. Ευχαριστώ και πάλι.

Δημοσιεύθηκε 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