(H) Lukusarjapeli¶
Tavoite: Harjoittelen ohjausrakenteiden toteuttamista C++:ssa (eli valintarakennetta ja toistorakennetta) sekä lisää versionhallinnan käyttämistä.
Ohjeita:
Tässä tehtävässä haet ensin ohjelmakoodipohjan käyttöösi
hakemistosta templates/02/number_series_game
(kopioi hakemistoon
student/02/number_series_game
) ja avaat projektin
Qt Creatorissa (tehtävän 1.3.4 vaiheet 1-2).
Attention
Toteutat ratkaisussa tarvittavan ohjelmakoodin kolmessa vaiheessa tehtävänannon ohjeiden mukaisesti. Jokaisessa vaiheessa sinun pitää ensin viedä tekemäsi muutokset työkopiosta paikalliseen tietovarastoosi (commit) ja tämän jälkeen paikallisesta tietovarastosta keskustietovarastoosi (push). Toistat siis kolme kertaa edellisessä tehtävässä suorittamasi vaiheen 4. Lopuksi vielä palautat tuotoksesi Plussaan, eli suoritat edellisen tehtävän ohjeista vaiheen 5.
Seuraa tehtävänannon ohjeita tarkasti. Tehtävässä testataan muitakin versionhallinnan ominaisuuksia, eli ei vain toisteta kolme kertaa aiemmin opittua.
Tehtävänanto¶
Eräässä pelissä pelaajat istuvat ringissä ja luettelevat jokainen vuorollaan lukuja siten, että pelin aloittaja sanoo luvun 1, hänen vieressään istuva luvun 2, ja seuraavaksi tulee tietenkin hänen vieressään istuva henkilö. Jotta peli ei olisi liian yksinkertainen, sanotaan kolmella jaollisten lukujen kohdalla “zip”, seitsemällä jaollisten lukujen kohdalla “boing” ja sekä kolmella että seitsemällä jaollisten lukujen kohdalla “zip boing”.
Toteuta valmiiseen ohjelmakoodipohjaan ohjelma, joka tulostaa lunttilapun peliä pelaavalle jakolaskutaidottomalle henkilölle. Aluksi ohjelma kysyy, kuinka pitkälle lukuja tulostetaan.
Esimerkki ohjelman toiminnasta:
How many numbers would you like to have? 10
1
2
zip
4
5
zip
boing
8
zip
10
Ohjelmakoodin kirjoittaminen vaiheittain¶
Toteuta ohjelma vaiheittain seuraavasti:
Lähde muokkaamaan ohjelmakoodipohjaa. Toteuta ensin vain ohjelma, joka kysyy käyttäjältä, kuinka monta numeroa lunttilapulle tulostetaan, ja tulostaa luvut omille riveilleen, eli ohjelma toimii seuraavasti:
How many numbers would you like to have? 6 1 2 3 4 5 6
Kun saat tämän vaiheen valmiiksi, tallenna työsi tulos ensin paikalliseen tietovarastoosi ja sieltä vielä keskustietovarastoon (edellisen tehtävänannon vaihe 4 eli commit ja push). Kirjoita commit-viestiksi esimerkiksi “Syötteen lukeminen ja numeroiden tulostus”.
Lisää seuraavaksi ohjelmaan merkkijonon “zip” tulostus. Eli kolmella jaollisia numeroita ei tulosteta, vaan niiden tilalla tulostetaan merkkijono “zip”.
Kun saat tämän vaiheen valmiiksi, tallenna työsi tulos uudelleen paikallisen tietovaraston kautta keskustietovarastoon (commit ja push). Kirjoita tällä kertaa commit messageksi esimerkiksi “Lisätty 3:lla jaollisten lukujen käsittely”.
Viimeistele ohjelma, eli lisää vielä merkkijonon “boing” tulostukset. Nyt ohjelmasi pitää toimia kuten tehtävänannon alussa olleessa esimerkkiajossa. Huomaathan, että sekä 3:lla että 7:llä jaollisten numeroiden kohdalla tulee tulostua “zip boing”.
Älä kuitenkaan vielä tallenna työtäsi keskustietovarastoon (commit ja push)! Kokeillaan ensin versionhallinnan toimintaa hiukan monipuolisemmin.
Git:n toiminto
diff
osaa näyttää, mitä muutoksia ohjelmakoodiin on tehty viimeisen commitin jälkeen. Tallenna tiedosto Qt Creatorissa ja katso sen jälkeen, mitä toimintoTools > Git > Current File > Diff of main.cpp
näyttää. Vaihtoehtoisesti voit käyttää komentoriviä.Vie nyt tekemäsi muutokset paikalliseen tietovarastoon (tee commit), mutta älä vielä keskustietovarastoon (älä siis tee push). Kirjoita tällä kertaa commit messageksi esimerkiksi “Lisätty myös 7:llä jaollisten lukujen käsittely”.
Katso tässä vaiheessa uudelleen, mitä toiminto
diff
näyttää Qt Creatorissa.Kokeillaan nyt yhtä tyypillistä tapaa tehdä virhe ohjelman palauttamisessa. Palauta tehtävä klikkaamalla tämän sivun alareunassa olevaa Lähetä-nappulaa. Voit huoletta tehdä tämän virheellisen palautuksen. Tässä tehtävässä on poikkeuksellisesti huomattavasti enemmän palautuskertoja kuin muissa tehtävissä.
Jos olet noudattanut yllä olevia ohjeita, palautus siis epäonnistui. Tutkitaan nyt miksi näin kävi.
Avaa selaimessa Git-keskustietovarastosi, eli syötä selaimen osoiteriville tietovarastosi URL (kahdesta osoitteesta se, jonka lopussa ei lue .git). Tämän web-käyttöliittymän kautta pääset tutkimaan keskustietovarastoasi. Keskustietovaraston sisältöä pitää tutkia selaimella, koska se ei sijaitse käyttämälläsi tietokoneella (suurimmalla osalla siis linux-desktopilla) vaan palvelinkoneella.
Files-välilehdellä näkyy aina koko projektin uusin tila ja jokaisen kansion ja tiedoston kohdalla viimeisimmän kyseistä kansiota tai tiedostoa koskevan commitin commit-viesti.
Siirry välilehdelle Commits. Täältä näet, mitkä commiteista on tallennettuna keskustietovarastoosi. Täällä näkyvät siis kaikki ne commitit, jotka on myös viety keskustietovarastoon pushilla. Kurssin automaattinen arviointi suorittaa tarkastukset sille ohjelmakoodiversiolle, joka täällä näkyy viimeisenä.
Muutoksia edelliseen committiin verrattuna voi tutkia myös keskustietovaraston web-käyttöliittymän kautta klikkaamalla commitin rivillä olevaa nk. tagia. Rivin viimeisenä oikealla on “Browse files” -nappula, sen vasemmalla puolella kopiointinappula, jonka vasemmalta puolelta löydät tagin (näyttää sekavalta kirjain ja numerosarjalta, palaamme tähän myöhemmin). Klikkaa tagia, niin näet, miten web-käyttöliittymä näyttää muutokset.
Palaa nyt takaisin Qt Creatoriin tai komentoriville. Tee “unohtunut” push-operaatio ja suorita nyt työn palautus alla olevalla lomakkeella. Käy vielä myös katsomassa selaimesta, näetkö nyt viimeisenkin commitin.
Edellisissä kohdissa havaitsit, että versionhallinnan käyttäminen ja työn palauttaminen ovat kaksi erillistä asiaa. Koska toteutit ohjelman useammassa vaiheessa näet tietovarastostasi, miten työn tekeminen on edistynyt ja voit tarkastella eri välivaiheita.
Versionhallintaa ei siis käytetä vain palauttamiseen, vaan sillä on oma tehtävänsä ohjelman eri versioiden säilyttämisessä. Kun ohjelmien koko kasvaa, on talletetuista välivaiheista enemmän hyötyä esimerkiksi ongelmatilanteissa. Jatkossa tällä opintojaksolla on sekä tehtäviä, joiden tehtävänannossa sanotaan, minkälaisissa osissa tehtävä pitää toteuttaa, että tehtäviä, jotka saat jakaa välivaiheisiin haluamallasi tavalla. Olennaisinta on harjoitella versionhallinnan käyttämistä, eli vain kaikkein pienimmät tehtävät voi kirjoittaa ilman välivaiheita.
A+ esittää tässä kohdassa tehtävän palautuslomakkeen.