monopolin oliosuunnittelu - mluukkai/OTM2012 GitHub Wiki

Monopoli-luokka toimii ohjausoliona ja tietää myös kulloinkin vuorossa olevan pelaajan. Vuorossa oleva pelaaja merkitty kuvassa p:llä.

Kaaviossa käyttöliittymä on merkattu tikku-ukolla. Alussa käyttöliittymä pyytää monopolia heittämään noppia. Monopoli heittää noppia ja palauttaa tuloksen (T1 ja T2) käyttöliittymälle joka näyttää ne käyttäjälle. Tämän jälkeen käyttöliittymä kutsuu monopolin etene()-metodia joka vie vuorossa olevan pelaajan uuteen ruutun ja suorittaa ruutua vastaavan toiminnon.

Monopoli pyytää pelaajaa etenemään. Pelaaja taas pyytää omaa pelinappulaansa suorittamaan etenemisen. Pelinappulahan tietää missä ruudussa pelaaja on. Pelaajan nykyistä ruutua merkitään kuvassa r1:llä ja ruutua johon pelaaja siirtyy r2:lla. Ruudut tuntevat seuraajansa. Eli nappula kysyy r1:ltä minne noppien silmälukusummalla T1+T2 edetään. Ruutu r1 selvittää seuraajiensa kanssa, että siirrytään ruutuun r2. Tämä tieto palautetaan pelinappulalle. Näin se ruutu johon siirrytään on saatu selvitettyä.

Seuraavana toimenpiteenä monopoli kutsuu pelaajalle suoritaToiminto, eli pyytää että suoritetaan toiminto joka vastaa pelaajan uutta olinpaikkaa pelilaudalla. Pelaaja ei osaa toimenpidettä suorittaa vaan pyyttää pelinappulaa suorittamaan toimenpiteen. Pelinappula taas kutsuu ruudun metodia toiminto. Parametrina annetaan se pelaaja jolle toimenpide suoritetaan.

Tässä on oletettu, että toiminto määritellään rajapintana, jonka jokainen ruutu ja kortti toteuttavat. Eli kaikilla ruuduilla ja korteilla on metodi toiminto(), jolla toiminto suoritetaan. Ratkaisu poikkeaa hieman viikon 5 mallivastauksen luokkakaaviossa toiminnot oli piirretty erillisiksi luokikseen.

Toiminnon suoritus on erilainen riippuen ruudusta mihin tullaan ja pelitilanteesta. Kuvaan on piirretty 3 tilannetta. Ensimmäisessä oletetaan että ruutu johon tullaan on omistettava ruutu (eli katu, asema tai laitos) jonka joku pelaaja (kuvassa p2) omistaa. Ensin lasketaan ruudun vuokra (merkitän v) ja vähennetään rahasumma vuorossa olevalta pelaajalta ja lisätään se ruudun omistajalle (p2).

Toisena esimerkkinä tilanne jossa tullaan omistettavaan ruutuun, jota kukaan ei vielä omista. Kysytään käyttöliittymädialogin avulla haluaako pelaaja ostaa ruudun. Oletus on että haluaa, eli vähennetään pelaajaoliolta p1 ruudun hinta sekä lisätään ruutu pelaajan omistuksiin.

Kolmantena esimerkkinä tilanne jossa saavutaan ruutuun (sattuma tai yhteismaa) jossa on toimintokortti. Ruutu selvittää ensin mikä on seuraava kortti (merkitty k). Sitten kutsutaan kortille metodia toiminto. Kuvassa oletetaan että toimintona on ”saat rahaa 1000 euroa”.

Suunnittelua voisi jatkaa muiden toimintojen osalta. Nyt alkaa kuitenkin olla aika selvää, mitkä ovat olioiden vastuut ja miten toiminta etenee. Itse aloittaisin tässä vaiheessa ohjelmoinnin. Koodi paljastaisi onko oliosuunnittelu onnistunut. Ohjelmoinnin rinnalla kaavioita voisi tarpeen mukaan täydentää ja muokata.

⚠️ **GitHub.com Fallback** ⚠️