⊗jsPrTTTVCh 45 of 62 menu

Preverjanje zmage v igri križci-krožci v JavaScript

Zdaj je čas, da napišemo kodo, ki bo določala zmago in izpisala ime zmagovalca.

Po premisleku lahko ugotovimo, da preverjanje za prisotnost zmage moramo izvajati ob vsakem potezi:

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); // tukaj moramo preveriti zmago ali neodločen rezultat i++; }); } }

Naredimo funkcijo isVictory, ki bo kot parameter sprejela polje celic in vrnila true, če je na igrišču prišlo do zmage, in false, če ni. To funkcijo bomo uporabljali na naslednji način:

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('ime zmagovalca'); } i++; }); } }

Kako lahko ugotovimo ime zmagovalca? Očitno je, da je njegovo ime shranjeno v vsaki od zmagovalnih celic. Naj pojasnim: če imamo zmago, to pomeni, da nekatere 3 celice vodoravno, navpično ali diagonalno vsebujejo isto vrednost: bodisi križec bodisi krog.

Očitno je, da je vrednost katere koli od teh celic ime zmagovalca. Lahko pa gremo tudi po drugi, manj očitni poti: ker določamo prisotnost zmage ob vsaki potezi, je logično, da bo zmagovalec igralec, ki je opravil zadnjo potezo. Ime tega igralca je vsebovano v besedilu kliknjene celice:

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); // izpišemo ime zmagovalca } i++; }); } }

Implementacija isVictory

Kako lahko tehnično določimo prisotnost zmage na igrišču? Če dobro premislimo, lahko pridemo do zaključka, da je na igrišču omejeno število trojic celic.

To pomeni, da za preverjanje zmage lahko preprosto preverimo vse te trojice. Preveriti moramo, da imajo trojice enake neprazne vrednosti (to je bodisi križec bodisi krog).

Naredimo dvodimenzionalno polje, v vsakem podpolju katerega bodo številke celic ene od trojic:

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

Z uporabo tega polja napišimo določitev zmage:

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

Samostojno, brez zaganjanja v mojo kodo, implementirajte opisano. Preverite, kako deluje igralni proces.

Poskusite implementirati preverjanje neodločenega rezultata. V naslednji lekciji bo razčlenitev tega mesta.

Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni