⊗jsPrTTTVCh 45 of 62 menu

Ristinollan voiton tarkistus JavaScriptillä

Nyt on aika kirjoittaa koodi, joka tunnistaa voiton ja näyttää voittajan nimen.

Kun pohtii tehtävää, voi päätellä, että voiton tarkistus tulisi suorittaa jokaisella siirrolla:

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); // tässä meidän tulisi tarkistaa voitto tai tasapeli i++; }); } }

Tehdään funktio isVictory, joka parametrina vastaanottaa solujen taulukon ja palauttaa true, jos kentällä on voitto, ja false, jos ei ole. Me käytämme tätä funktiota seuraavalla tavalla:

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

Kuinka saamme selville voittajan nimen? Ilmeisesti, hänen nimensä tallentuu jokaiseen voittoon johtaneeseen soluun. Selitän: jos meillä on voitto, niin tämä tarkoittaa, että tietyt 3 solua vaaka-, pysty- tai diagonaalisuunnassa sisältävät saman arvon: joko ristin tai nollan.

Ilmeisesti minkä tahansa näistä soluista arvo on voittajan nimi. Mutta voidaan mennä toisella, vähemmän ilmeisellä tavalla: koska määritämme voiton olemassaolon jokaisella siirrolla, on loogista, että voittaja on pelaaja, joka teki viimeisen siirron. Tämän pelaajan nimi sisältyy klikatun solun tekstiin:

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); // näytetään voittajan nimi } i++; }); } }

isVictory-funktion toteutus

Kuinka teknisesti määritämme voiton olemassaolon kentällä? Jos pohtii kaiken huolellisesti, voidaan päätellä, että kentällä on rajoitettu määrä solukolmikoita.

Eli voiton tarkistamiseksi voidaan yksinkertaisesti tarkistaa kaikki nämä kolmikot. On tarkistettava, että kolmikoilla on samat ei-tyhjät arvot (eli siellä on joko risti tai nolla).

Tehdään kaksiulotteinen taulukko, jossa jokainen alitaulukko sisältää yhden kolmikon solujen numerot:

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

Kirjoitetaan tämän taulukon avulla voiton määrittely:

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

Toteuta itsenäisesti, katsomatta koodiini, kuvailtu. Tarkista, kuinka peliprosessi toimii.

Yritä toteuttaa tasapelin tarkistus. Seuraavassa oppitunnissa käsitellään tätä kohtaa.

Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää