(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
.
(Metodilla get_name
paluuarvon tyyppinä on string
, ja metodilla
get_points
se on int
.)
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:
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:
- 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 tarvittavienreturn
-käskyjen kera. Tämän jälkeen suoritat tietenkin commitin versionhallintaan (luokkarajapinnan stub valmis).
A+ esittää tässä kohdassa tehtävän palautuslomakkeen.