- COMP.CS.140
- 12. Graafiset käyttöliittymät
- 12.4 ⌛⌛⌛ JavaFX Wordle
⌛⌛⌛ JavaFX Wordle¶
Aseta koodisi pääluokka Maven-projektin hakemistorakenteen mukaisesti tiedostoon
Round12/wordle/src/main/java/fi/tuni/prog3/wordle/Wordle.java
. Kuten hakemistorakenne ilmentää,
toteutuksesi tulee olla määritetty pakkaukseen fi.tuni.prog3.wordle
.
Tässä tehtävässä toteutetaan viime aikoina mediassa huomiota saanut Wordle-sanapeli käyttäen JavaFX-käyttöliittymäkirjastoa.
Peli muistuttaa aiempien harjoitusten sanapeliä. Pelin kulku on seuraava:
Pelinjohtaja valitsee sanan (jota ei näytetä pelaajalle).
Wordle-sivuston versiossa sanan pituus on aina 5. Tässä tehtävässä sanan pituus voi olla muukin.
Pelaajan tavoitteena on arvata pelinjohtajan sana tekemällä korkeintaan 6 arvausta.
Kukin arvauskerta koostuu kokonaisen sanan arvauksesta. Pelinjohtaja näyttää pelaajalle aina kunkin arvauksen jälkeen tietoa siitä, mitkä pelaajan arvaaman sanan kirjaimet esiintyvät arvattavassa sanassa (tästä tarkemmin alempana).
Tässä tehtävässä pelin graafinen esitys ja muut toteutuksen yksityiskohdat tulee tehdä alla kuvatulla tavalla. Kuvauksen yhteydessä on esitetty esimerkkikuvia käyttöliittymästä. Huomaa, että kuvat on tarkoitettu esimerkeiksi eli sinun toteuttamasi käyttöliittymä saa näyttää erilaiselta, kunhan siinä on oleellisesti sama toiminnallisuus. Ruutujen väritystä koskevia sääntöjä on kuitenkin noudatettava tarkasti, koska automaattinen tarkistus pyrkii tutkimaan ruutujen värejä.
Pelin alussa luodaan tyhjä ruudukko, jossa on 6 riviä ja arvattavan sanan pituuden verran sarakkeita.
Kukin rivi vastaa yhtä arvauskertaa. Ylin rivi vastaa ensimmäistä arvausta, toinen toista, jne.
Ruudut ovat alussa tyhjiä (sisältävät merkkijonon “”) ja niiden taustavärin tulee olla valkoinen (
Color.WHITE
).
Pelaaja muodostaa arvauksen syöttämällä kirjaimia näppäimistöltä.
Kirjaimia käsitellään isoina; jos käyttäjä antaa pienen kirjaimen, peli muuntaa sen isoksi.
Myös pelinjohtajan sanaa käsitellään arvauksen oikeellisuuden tarkistamisessa aivan kuin sen kirjaimet olisivat isoja (jolloin peli on efektiivisesti kirjainkoosta riippumaton).
Kukin syötetty kirjain asetetaan nykyistä arvausvuoroa vastaavan rivin ensimmäiseen tyhjään ruutuun.
Jos rivi on jo täynnä, ei uuden kirjaimen syöttäminen aiheuta muutoksia ruutuihin.
Pelaaja voi poistaa jo syöttämiään kirjaimia käyttäen backspace-näppäintä. Kukin backspace-näppäimen painallus poistaa nykyistä arvausvuoroa vastaavan rivin viimeisen kirjaimen (jos sellainen on olemassa).
Kirjaimen poisto tarkoittaa, että sen ruudun sisällöksi asetetaan tyhjä merkkijono “”. Älä yritä asettaa esimerkiksi
null
-viitettä.
Pelaaja antaa arvauksensa tarkistettavaksi painamalla Enter-näppäintä.
Jos pelaaja painaa Enter-näppäintä ennen kuin nykyistä arvausvuoroa vastaava rivi on täynnä, näyttää peli pelaajalle viestin “
Give a complete word before pressing Enter!
”.
Peli ilmaisee pelaajan arvauksen oikeellisuuden värittämällä arvatun sanan kirjainten ruudut seuraavasti:
Jos pelaajan arvauksen kirjain täsmää samassa kohdassa olevan pelinjohtajan sanan kirjaimen kanssa, väritetään kirjaimen ruutu vihreäksi (
Color.GREEN
).Muuten jos pelaajan arvauksen kirjain täsmää jossain muussa kohdassa olevan pelinjohtajan sanan kirjaimen kanssa, väritetään kirjaimen ruutu oranssiksi (
Color.ORANGE
).Muuten pelaajan arvauksen kirjain ei täsmää pelinjohtajan sanan minkään kirjaimen kanssa, ja kirjaimen ruutu väritetään harmaaksi (
Color.GREY
).
Jos pelaaja arvasi sanan oikein, näytetään pelaajalle viesti “
Congratulations, you won!
” ja nykyinen peli päättyy. Jos pelaaja arvasi sanan väärin ja kyseessä oli jo kuudes arvaus, näytetään pelaajalle viesti “Game over, you lost!
” ja nykyinen peli päättyy.Pelaaja ei voi pelin päättymisen jälkeen enää syöttää uusia kirjaimia (eikä Enter tee mitään).
Pelaaja voi aloittaa uuden pelin klikkaamalla nappia “
Start new game
”.
Ellei pelaajan arvaus johtanut pelin päättymiseen, siirtyy peli ruudukon seuraavalle riville: käyttäjän syöttämät kirjaimet alkavat täydentää seuraavalla rivillä olevaa uutta sanaa.
Edellä kuvattu toimintalogiikka vastaa melko suoraan alkuperäistä Wordle-peliä.
Toteutuksesi pääluokan pitää olla fi.tuni.prog3.wordle.Wordle
(eli pakkaukseen
fi.tuni.prog3.wordle
määritetty luokka Wordle
). Toteutukseesi saa kuulua muitakin
kooditiedostoja, kunhan nekin sijaitsevat alihakemistossa src/main/java/fi/tuni/prog3/wordle
.
Muutama lisäyksityiskohta koskien pelinjohtajan sanoja sekä käyttöliittymäelementtejä:
Ohjelman tulee alussa lukea pelinjohtajan sanat tiedostosta
words.txt
ja alustaa peli, jossa arvataan tiedoston ensimmäistä sanaa. Tiedoston oletetaan sisältävän yhden sanan per rivi.Voit käyttää testeissäsi aiemman sanapeli-tehtävän yhteydessä annettua tiedostoa. Tällöin ohjelmasi alustaisi aluksi pelin, jossa arvataan sen ensimmäistä sanaa “
account
”.
Jos pelaaja klikkaa nappia “
Start new game
”, valitaan järjestyksessä seuraava pelinjohtajan sana ja pelinäkymä luodaan uudelleen vastaamaan tätä uutta sanaa. Esimerkiksi yllämainitun tiedoston tapauksessa seuraava sana olisi “act
”.Ruudukko alustetaan taas tyhjillä ruuduilla. Huomaa, että ruudukon koko voi muuttua, koska arvattavan sanan pituus voi muuttua.
Jotta käyttöliittymän automaattinen testaus onnistuisi, tulee käyttöliittymän elementeille määrittää seuraavanlaiset id-arvot (JavaFX:n elementtien jäsenfunktiolla
setId
).Rivin
i
sarakkeenj
ruudun elementille, joka suoraan sisältää kirjainta esittävän tekstin, tulee antaa muotoa “i_j” oleva id. Indeksointi alkaa nollasta.Esimerkiksi ensimmäisen rivin ruutujen id:t vasemmalta oikealle ovat muotoa “0_0”, “0_1”, jne. Jos arvattavan sanan pituus olisi 7, olisi oikean alakulman eli rivin 5 sarakkeen 6 ruudun id muotoa “5_6”.
Käyttäjälle näytettävän viestin (esim. pelin loppuminen, Enterin paino väärään aikaan) sisältävälle elementille tulee antaa id “infoBox”.
Uuden pelin aloittavalle “
Start new game
”-napille tulee antaa id “newGameBtn”.
Kirjainten sekä viestien esittämiseen tulee käyttää joitain seuraavista JavaFX:n elementeistä:
Text
,TextField
,TextArea
,Label
,Cell
taiButton
.
Testauksesta¶
Tässä tehtävässä ei ole GUI-pohjaisen luonteensa vuoksi tekstimuotoisia esimerkkisyötteitä tai
-tulosteita. Yritä testata toteutustasi esim. vertailemalla ruudukon väritystä jne. yllä
annettuihin esimerkkikuviin. Kaikissa 7-kirjaimista sanaa vastaavissa kuvissa pelinjohtajan sana
on “account
”.
Tehtävän palautus avautuu pienellä viiveellä. Tarkistus tulee perustumaan yksikkötesteihin, jotka antavat toteutuksellesi pisteitä kumulatiivisesti sen mukaan, moniko testi menee virheittä läpi. Tehtävästä on siten mahdollista saada osittaispisteitä.
A+ esittää tässä kohdassa tehtävän palautuslomakkeen.