⊗jsPrTTTVCh 45 of 62 menu

Kontroll av vinst i Tre-i-rad spel på JavaScript

Nu är det dags att skriva kod som kommer att avgöra vinsten och visa vinnarens namn.

Efter att ha tänkt på uppgiften kan man inse att kontrollen för att se om någon vunnit bör utföras i varje drag:

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); // här bör vi kontrollera vinst eller oavgjort i++; }); } }

Låt oss skapa en funktion isVictory, som tar en array med celler som parameter och returnerar true om det finns en vinst på planen, och false om det inte gör det. Vi kommer att använda denna funktion på följande sätt:

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('vinnarens namn'); } i++; }); } }

Hur ska vi veta vinnarens namn? Uppenbarligen finns dess namn i varje av de vinnande cellerna. För att förtydliga: om vi har en vinst, så betyder det att vissa 3 celler horisontellt, vertikalt eller diagonalt innehåller samma värde: antingen ett kryss eller en ring.

Uppenbarligen är värdet i vilken som helst av dessa celler vinnarens namn. Men man kan också gå en annan, mindre uppenbar väg: eftersom vi avgör förekomsten av en vinst varje drag, så är det logiskt att vinnaren är spelaren som gjorde det sista draget. Denna spelares namn finns i texten i den klickade cellen:

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); // visar vinnarens namn } i++; }); } }

Implementering av isVictory

Hur ska vi tekniskt sett avgöra förekomsten av en vinst på planen? Om man tänker igenom allt noga, kan man komma till slutsatsen att det finns ett begränsat antal trippel av celler på planen.

Det vill säga, för att kontrollera vinst kan man helt enkelt kontrollera alla dessa trippel. Det måste kontrolleras att tripplarna har samma icke-tomma värden (det vill säga antingen kryss eller ring).

Låt oss skapa en tvådimensionell array, där varje underarray innehåller numren på cellerna i en av tripplarna:

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

Låt oss skriva vinstkontrollen med hjälp av denna array:

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

Implementera det beskrivna på egen hand, utan att kolla på min kod. Testa hur spelprocessen fungerar.

Försök att implementera kontroll av oavgjort. I nästa lektion kommer denna del att gås igenom.

Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa