Raportti

Hanna Salopaasi
0358645
hanna.salopaasi@lut.fi

WWW-sovellukset
Harjoitustyö 1
Tictactoe/ristinolla

Harjoitustyön aiheeksi on valittu yksinkertainen ristinolla. Ristinollassa kahden pelaajan, "X" ja "O", tarkoitus on saada 3x3-ruudukolla kolme omaa merkkiään peräkkäin. Tässä toteutuksessa pelaaja on X ja O:ta hallinnoi tekoäly. Ruudukon ruudut ovat nimetty nollasta kahdeksaan alkaen ylävasemmasta ja edeten vasemmalta oikealle ja ylhäältä alas eli ylävasen on 0, keskikeski 4 ja alaoikea 8.

Pelin toiminnallisuus on toteutettu JavaScriptillä ja HTML:llä. Muotoilu on toteutettu CSS:llä. Peli koostuu erillisistä HTML-, JavaScript- ja CSS-tiedostoista.

Pelissä on yhdeksän vuoroa, joista jokaisen siirron jälkeen vähenee yksi. Jos pelissä ei saavuteta voittotilannetta ja vuorot menevät nollaan, on kyseessä tasapeli. Pelin tulos tarkastetaan jokaisen siirron jälkeen. Tarkistus katsoo if-lauseella onko voittotilannetta saavutettu ja palauttaa tilanteesta riippuen joko "win", "lose", "draw" tai "notend". Voitto (win) on, jos X on saanut tarvittavat kolme omaa merkkiään peräkkäin, häviö(lose) puolestaan, jos O saavuttaa voittotilanteen. Tasapeli(draw) palautetaan, jos vuoroja ei ole jäljellä. Kaikissa muissa tapauksissa palautetaan notend eli peli ei ole vielä päätöksessä.

Tekoäly tarkistaa ensin onko sillä mahdollisuus saavuttaa kolme peräkkäistä merkkiä, jos näin ei ole, se tarkistaa onko X saamassa kolme peräkkäistä merkkiä. Muussa tapauksessa tekoäly katsoo ensimmäisen vapaan ruudun ja laittaa merkkinsä siihen. Käytännössä tekoälyllä on siis kaksi mahdollista aloituspaikkaa, ylävasen tai yläkeski, riippuen pelaajan aloituksesta.

Pelissä on top-10-lista. Lista alkaa pelin alussa tyhjänä ja ensimmäiset kymmenen tulosta pääsevät joka tapauksessa listalle. Pisteitä pelissä saa voitosta kaksi, tasapelistä yhden ja häviöstä vähennetään kaksi pistettä. Jos top-lista on tyhjä, pelaajalta kysytään nimi. Jos lista ei ole tyhjä, tarkastetaan saiko pelaaja enemmän pisteitä kuin listalla aikaisemmin olleet pelaajat, jos näin on, kysytään pelaajalta nimi. Jos pelaaja ei saanut enemmän pisteitä kuin listalla aiemmin olleet, mutta listalla on vähemmän kuin kymmenen nimeä, pelaajalta kysytään nimi. Muissa tapauksissa pelaaja ei pääse top-listalle.

Jos pelaaja pääsee top-10-listalle, promptataan pelaajalta nimi. Nimi on pakko laittaa ja se ei saa sisältää erikoismerkkejä eikä numeroita. Jos nimeä ei laiteta tai se sisältää kiellettyjä merkkejä, muuttuu top-listan väri punaiseksi ja käyttäjältä promptataan nimeä uudestaan. Nimeä kysytään niin kauan, kunnes käyttäjä syöttää hyväksyttävän nimen, jolloin top-lista palautuu mustaksi.

Restart Game-nappi katsoo pääseekö pelaaja top-10-listalle, palauttaa pisteet nollaan ja alustaa pelilaudan uudestaan. End Game-nappi johtaa pois pelistä raporttisivulle. Koska top-10-lista on toteutettu JavaScript-muuttujana, se on voimassa vain niin kauan kuin sivua ei ladata uudestaan.