⊗jsPrTTTVCh 45 of 62 menu

Mängu Trips-Traps-Trull võidu kontrollimine JavaScriptis

Nüüd on aeg kirjutada kood, mis määrab võidu ja kuvab võitja nime.

Pärast ülesande läbimõtlemist võib jõuda arusaamisele, et võidu kontrolli tuleks teha iga käigu järel:

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); // siin peaksime kontrollima võitu või viiki i++; }); } }

Loome funktsiooni isVictory, mis võtab parameetrina lahtrite massiivi ja tagastab true, kui mänguväljal on võit, ja false, kui ei ole. Me kasutame seda funktsiooni järgmisel viisil:

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('võitja nimi'); } i++; }); } }

Kuidas me saame teada võitja nime? Ilmselt on see nimi salvestatud igasse võidukombinatsiooni kuuluvasse lahtrisse. Selgitan: kui meil on võit, siis tähendab see, et mõned 3 lahtrit horisontaalselt, vertikaalselt või diagonaalis sisaldavad sama väärtust: kas X või O.

Ilmselt on ükskõik millise nende lahtrite väärtus just võitja nimi. Kuid võib minna ka teist, vähem ilmset teed: kuna me kontrollime võidu olemasolu iga käigu järel, siis on loogiline, et võitja on mängija, kes tegi viimase käigu. Selle mängija nimi sisaldub klikitud lahtri tekstis:

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); // kuvame võitja nime } i++; }); } }

isVictory rakendamine

Kuidas me tehniliselt määrame võidu olemasolu mänguväljal? Kui hästi kõik läbi mõelda, siis võib jõuda järeldusele, et mänguväljal on piiratud arv kolmikuid lahtreid.

See tähendab, et võidu kontrollimiseks saab lihtsalt kontrollida kõiki neid kolmikuid. Tuleb kontrollida, et kolmikutel on samad mitte tühjad väärtused (st seal on kas X või O).

Loome kahemõõtmelise massiivi, kus igas alamassiivis on ühe kolmiku lahtrite numbrid:

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

Kirjutame selle massiivi abil võidu määratluse:

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

Ise, minu koodi peale vahtimata, rakendage kirjeldatut. Kontrollige, kuidas toimib mänguprotsess.

Proovige rakendada viigi kontrolli. Järgmises õppetükis käsitletakse seda kohta.

Eesti
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Me kasutame saidi toimimiseks, analüüsi ja personaliseerimiseks küpsiseid. Andmete töötlemine toimub vastavalt Privaatsuspoliitikale.
nõustu kõigega häälesta keeldu