⊗jsPrTTTVCh 45 of 62 menu

การตรวจสอบการชนะในเกม Tic-Tac-Toe ด้วย JavaScript

ตอนนี้ถึงเวลาที่ต้องเขียนโค้ดซึ่งจะตรวจสอบการชนะและแสดงชื่อของผู้ชนะ

หลังจากคิดถึงปัญหาแล้ว สามารถเข้าใจได้ว่าควรทำการตรวจสอบการชนะในทุกครั้งที่มีการเดิน:

function 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 หากไม่มี เราจะใช้ฟังก์ชันนี้ดังนี้:

function 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 เซลล์บางเซลล์ในแนวนอน แนวตั้ง หรือแนวทแยงมีค่าเหมือนกัน: เป็นเครื่องหมาย X หรือ O

เห็นได้ชัดว่าค่าในเซลล์ใดๆ เหล่านี้คือชื่อของผู้ชนะ แต่เราสามารถใช้วิธีอื่นที่เห็นได้ชัดน้อยกว่าได้: เนื่องจากเราตรวจสอบการชนะในทุกครั้งที่มีการเดิน ดังนั้นผู้ชนะอย่างมีเหตุผลก็คือผู้เล่นที่เดินครั้งสุดท้าย ชื่อของผู้เล่นนี้อยู่ในข้อความของเซลล์ที่คลิก:

function 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 ไปปฏิบัติ

เราจะตรวจสอบการชนะบนกระดานในทางเทคนิคได้อย่างไร? หากคิดให้ดีแล้ว สามารถสรุปได้ว่า บนกระดานมีชุดเซลล์สามช่องที่เป็นไปได้จำนวนจำกัด

นั่นคือสำหรับการตรวจสอบการชนะ เราสามารถตรวจสอบชุดสามช่องทั้งหมดนี้ได้ เราต้องตรวจสอบว่าชุดสามช่องมีค่าที่ไม่ว่างและเหมือนกัน (นั่นคือมีเครื่องหมาย X หรือ O)

มาสร้างอาร์เรย์สองมิติ โดยในแต่ละอาร์เรย์ย่อยจะมีหมายเลขเซลล์ของชุดสามช่องหนึ่งชุด:

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], ];

มาเขียนการตรวจสอบการชนะโดยใช้อาร์เรย์นี้:

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

ทำด้วยตนเองโดยไม่แอบดูโค้ดของฉัน นำสิ่งที่อธิบายไปปฏิบัติ ลองตรวจสอบว่ากระบวนการของเกมทำงานอย่างไร

ลองทำการตรวจสอบการเสมอ ในบทเรียนถัดไปจะเป็นการอธิบายส่วนนี้

ไทย
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣTürkmenTürkçeЎзбекOʻzbekTiếng Việt
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ