Harjoitustehtävä 12


Tehtävänäsi on luoda verkkotietokantaa käyttävä kivi-paperi-sakset sovellus. Huom! Sovellus voidaan luoda monella eri tavalla ja seuraavassa on esitelty yksi (ei varmastikkaan paras/helpoin) tapa sovelluksen luomiseksi (opettajan luoma betaversio). Tässä harjoitustehtävässä luodaan koko sovellus. Harjoitustehtävä on huomattavasti aiempia laajempi!

Sovelluksen käyttöliittymä on kolmeosainen (nimimerkin syöttö, elementin valinta, tuloksen julkistus, yhteensä siis 3kpl Screeneja)

Screen1

Ensimmäisen Screenin (Screen1) ohjelmoinnissa tärkeää on että sovellus siirtyy synkronoidusti seuraavaan ruutuun, jossa pelaajat on erotettu toisistaan (pelaaja1 ja pelaaja2). Pelaajanumero (1 tai 2) siirretään seuraavalle Screenille (startValue). Ensimmäisen Sceenin globaaleiksi muuttjiksi voidaan luoda esimerkiksi seuraavat:

PelinAvausHashKey muuttujaa voidaan käyttää toisen käyttäjän tunnistuksessa (avain ei ole uniikki, eikä toimi todennäköisyydellä 1/1000000). Mieti miten tietokannan käsittelyn voisi toteuttaa järkevämmin. pelaajaNumero -muuttuja on ensimmäisenä nimensä syöttävällä pelaajalla 1, toisella pelaajalla 2.

Tietokannassa pyörivät pelaajat (nimet listassa, jonka pituus on 2), ja kaveriAvannutPelin-arvoksi talletettavan satunnaisluvun avulla pyritään selvittämään, milloin toinen pelaaja on avannut sovelluksen ja syöttänyt nimimerkkinsä.

Tietokannan toiminta esimerkkisovelluksessa esitelty yllä. Huom! toisen pelaajan nimimerkin tallentaminen ei tässä ratkaisussa toimi. Mieti jatkossa miksi se ei toimi, ja miten ongelman voisi korjata.

Screen2

Käyttöliittymän toisessa vaiheessa molemmat pelaajat valitsevat elementtinsä (kome Buttonia). Pelaajilla on rajallinen aika (esim. 10 sek) suorittaa valinta (tarvitset kaksi kappaletta Clock-komponentteja). Molemmat pelaajat siirtyvät Screen2:een synkronoidusti (hoidettiin Screen1:ssä). Pelaajanumero otetaan talteen edellisen ruudun paluuarvona.

Kun käyttäjä tekee valinnan (painaa jotain painiketta), täytyy valinta tallentaa tietokantaan. Esimerkkisovelluksessa tallennuksessa käytetään kahden alkion listaa [pelaaja1:n valinta, pelaaja 2:n valinta], jossa kivi=1, paperi=2 ja sakset=3. Lista alustetaan arvoilla [-1,-1]. Negatiivisesta arvosta voidaan siis myöhemmin päätellä että valintaa ei ehditty suorittaa.

Screen 3

Kolmannessa vaiheessa julkistetaan lopullinen tulos ja nollataan tietokantamuuttujat. Pelaajanumero kuljetetaan paluuarvona edellisestä screenista.

Yllä oleva tietokantakutsu käsitellään esimerkkisovelluksessa seuraavasti.

Voittajan tarkistamiselle on tehty oma proseduuri (metodi)

Lopuksi hoidetaan vielä teksikenttien päivtys (eli tulostaminen) omalla metodilla