⊗jsPrTTTVCh 45 of 62 menu

Provera pobede u igri Iks-Oks na JavaScript

Sada je došlo vreme da napišemo kod koji će određivati pobedu i ispisivati ime pobednika.

Nakon razmišljanja o zadatku, može se smisliti da proveru na prisustvo pobede treba izvršiti u svakom potezu:

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); // ovde treba da proveravamo pobedu ili nerešen rezultat i++; }); } }

Napravimo funkciju isVictory, koja će kao parametar primati niz ćelija i vraćati true, ako na tabli postoji pobeda, i false, ako ne postoji. Mi ćemo koristiti ovu funkciju na sledeći 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 pobednika'); } i++; }); } }

Kako da saznamo ime pobednika? Očigledno je da se njegovo ime nalazi u svakoj od pobedničkih ćelija. Da pojasnim: ako imamo pobedu, to znači da određene 3 ćelije horizontalno, vertikalno ili dijagonalno sadrže istu vrednost: ili iks, ili oks.

Očigledno je da je vrednost bilo koje od tih ćelija zapravo ime pobednika. Ali možemo ići i drugim, manje očiglednim putem: pošto određujemo prisustvo pobede svakim potezom, onda je logično da pobednik bude igrač koji je izvršio poslednji potez. Ime tog igrača se nalazi u tekstu kliknute ćelije:

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); // ispisujemo ime pobednika } i++; }); } }

Implementacija isVictory

Kako tehnički da odredimo prisustvo pobede na tabli? Ako dobro sve razmislimo, možemo doći do zaključka da na tabli postoji ograničen broj trojki ćelija.

To znači da za proveru pobede možemo jednostavno proveriti sve te trojke. Potrebno je proveriti da li trojke imaju iste, ne prazne vrednosti (to jest tamo je ili iks, ili oks).

Napravićemo dvodimenzionalni niz, u svakom podnizu kojeg će biti brojevi ćelija jedne od trojki:

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

Napišimo pomoću ovog niza određivanje pobede:

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

Sami, bez gledanja u moj kod, implementirajte opisano. Proverite kako funkcioniše proces igre.

Pokušajte da implementirate proveru nerešenog rezultata. U sledećoj lekciji će biti razjašnjenje ovog dela.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij