जावास्क्रिप्ट में टिक-टैक-टो गेम की जीत की जांच

अब वह समय आ गया है कोड लिखने का, जो जीत तय करेगा और विजेता का नाम प्रदर्शित करेगा।

कार्य पर विचार करने के बाद, यह समझा जा सकता है कि जीत की जांच प्रत्येक चाल में की जानी चाहिए:

javascriptfunction init(selector) {
  let cells = document.querySelectorAll('#field td');
  let i = 0;
  
  for (let cell of cells) {
    cell.addEventListener('click', function step() {
      this.textContent = ['X', 'O'][i % 2];
      this.removeEventListener('click', step);
      
      // यहां हमें जीत या ड्रा की जांच करनी चाहिए
      
      i++;
    });
  }
}

आइए एक फ़ंक्शन isVictory बनाएं, जो पैरामीटर के रूप में सेल का एक सरणी लेगा और true लौटाएगा, यदि बोर्ड पर कोई जीत है, और false, यदि नहीं है। हम इस फ़ंक्शन का उपयोग निम्नलिखित तरीके से करेंगे:

javascriptfunction start(cells) {
  let i = 0;
  
  for (let cell of cells) {
    cell.addEventListener('click', function step() {
      this.textContent = ['X', 'O'][i % 2];
      this.removeEventListener('click', step);
      
      if (isVictory(cells)) {
        alert('विजेता का नाम');
      }
      
      i++;
    });
  }
}

हम विजेता का नाम कैसे जानें? जाहिर है, कि उसका नाम जीतने वाले प्रत्येक सेल में संग्रहीत है। मैं समझाता हूं: यदि हमारी जीत होती है, तो इसका मतलब है कि क्षैतिज, ऊर्ध्वाधर या विकर्ण में कुछ 3 सेल में समान मान है: या तो क्रॉस, या शून्य।

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

javascriptfunction start(cells) {
  let i = 0;
  
  for (let cell of cells) {
    cell.addEventListener('click', function step() {
      this.textContent = ['X', 'O'][i % 2];
      this.removeEventListener('click', step);
      
      if (isVictory(cells)) {
        alert(this.textContent); // विजेता का नाम प्रदर्शित करें
      }
      
      i++;
    });
  }
}

isVictory का कार्यान्वयन

हम तकनीकी रूप से बोर्ड पर जीत की उपस्थिति कैसे तय करें? यदि अच्छी तरह से सब कुछ सोचा जाए, तो यह निष्कर्ष निकाला जा सकता है कि बोर्ड पर सेल के तिकड़ी की सीमित संख्या है।

यानी जीत की जांच के लिए बस इन सभी तिकड़ी की जांच की जा सकती है। यह जांचना आवश्यक है कि तिकड़ी के समान गैर-खाली मान हैं (यानी वहां या तो क्रॉस है, या शून्य है)।

आइए एक द्वि-आयामी सरणी बनाएं, जिसके प्रत्येक उपसरणी में तिकड़ी में से एक के सेल के नंबर होंगे:

javascriptlet combs = [
  [0, 1, 2],
  [3, 4, 5],
  [6, 7, 8],
  [0, 3, 6],
  [1, 4, 7],
  [2, 5, 8],
  [0, 4, 8],
  [2, 4, 6],
];

आइए इस सरणी का उपयोग करके जीत की परिभाषा लिखें:

javascriptfunction isVictory(cells) {
  let combs = [
    [0, 1, 2],
    [3, 4, 5],
    [6, 7, 8],
    [0, 3, 6],
    [1, 4, 7],
    [2, 5, 8],
    [0, 4, 8],
    [2, 4, 6],
  ];

  for (let comb of combs) {
    if (
      cells[comb[0]].textContent == cells[comb[1]].textContent &&
      cells[comb[1]].textContent == cells[comb[2]].textContent &&
      cells[comb[0]].textContent != ''
    ) {
      return true;
    }
  }
  
  return false;
}
Задание 1

स्वयं, मेरे कोड में देखे बिना, वर्णित को लागू करें। जांचें कि यह खेल प्रक्रिया कैसे काम करती है।

Задание 2

ड्रा की जांच लागू करने का प्रयास करें। अगले पाठ में इस स्थान का विश्लेषण किया जाएगा।