(H) Mölkky-pelin pisteiden laskenta

Tavoite: Opin toteuttamaan pienen luokan C++:lla ja tutkin pääohjelmassa myös osoittimen käyttämistä olioihin osoittamisessa.

Ohjeita: Hae ohjelmakoodipohja: templates/03/molkky/ -> student/03/molkky/.

Mölkky on heittopeli, jossa tavoitteena on saada tasan 50 pistettä. Jos pelaaja saa yli 50 pistettä, hänen pistemääränsä vähennetään 25 pisteeseen.

Tehdään ohjelma, joka helpottaa pisteiden laskentaa ja pelin seurantaa kahden pelaajan pelatessa Mölkkyä.

Ohjelmakoodipohjassa määritellään kaksi Player-tyyppistä oliota ja kutsutaan olioille metodeja get_name, get_points, has_won ja add_points. Tarvittavia lisätietoja metodeista:

  • Metodin get_name paluuarvon tyyppi on string.
  • Metodin get_points paluuarvon tyyppi on int.
  • Metodi has_won palauttaa pelkästään tiedon siitä, onko pelaaja voittanut.
  • Metodi add_points päivittää pelaajan pistemäärää.

Pääohjelmassa muuttujiin player1 ja player2 on tallennettuna Player-oliot. Muuttuja in_turn taas on Player*-tyyppinen, eli osoitin osoittaa vuorotellen jompaankumpaan Player-olioon, riippuen siitä kumpi pelaaja on heittovuorossa. Asiaa on havainnollistettu seuraavassa kuvassa:

Osoitin ``in_turn`` osoittaa olioon ``player1``

Toteuta luokka Player, joka sisältää tiedot yksittäisestä pelaajasta, ja kaikki metodit, joita pääohjelmassa kutsutaan. Älä tee mitään muutoksia tiedostoon main.cpp.

Kun luokka on toteutettu, ohjelma toimii seuraavasti (esimerkin lyhentämiseksi esimerkissä käytetyt pistemäärät ovat todellisuutta suurempia):

Enter the score of player Matti of turn 1: 24

Scoreboard after turn 1:
Matti: 24p
Teppo: 0p

Enter the score of player Teppo of turn 2: 30

Scoreboard after turn 2:
Matti: 24p
Teppo: 30p

Enter the score of player Matti of turn 3: 24

Scoreboard after turn 3:
Matti: 48p
Teppo: 30p

Enter the score of player Teppo of turn 4: 21
Teppo gets penalty points!

Scoreboard after turn 4:
Matti: 48p
Teppo: 25p

Enter the score of player Matti of turn 5: 2
Game over! The winner is Matti!

Vinkkejä tehtävän tekemiseen:

  • Pelaajaluokkaa toteuttaessasi kannattaa katsoa mallia Henkilo-luokasta (kohdasta 3.3).
  • Muista luoda uudet tiedostot Qt Creatorissa valitsemalla “New File or Project” -toiminnolla avautuvasta ikkunasta “C++” ja “C++ Class”. Tällöin Qt Creator huolehtii automaattisesti siitä, että projektia käännettäessä tiedostot tulevat käännökseen mukaan oikealla tavalla.
  • Kun olet kirjoittanut metodin esittelyn tiedostoon player.hh, testaa myös toimintoa “Refactor” -> “Add Definition in player.cpp”. Löydät tämän klikkaamalla metodin esittelyä hiiren oikeanpuoleisella näppäimellä.
  • Ohjelma ei käänny, kun funktiossa main on kutsuja metodeille, joita ei ole vielä määritelty. Jos haluat koodata ohjelmasi fiksusti osissa toteutat ensin luokkarajapinnasta nk. stubin, jossa on vain tyhjät metodien määrittelyt mahdollisesti tarvittavien return-käskyjen kera. Tämän jälkeen suoritat tietenkin commitin versionhallintaan (luokkarajapinnan stub valmis).

A+ esittää tässä kohdassa tehtävän palautuslomakkeen.