Kierros 6, tehtävä 3

Hirsipuu (250 p)

Tässä tehtävässä harjoitellaan erityisesti seuraavia asoita:

Tee Eclipseen uusi projekti, jonka nimi on tehtava6_3, ja luo tähän projektiin moduuli hirsipuu. Kirjoita siihen ohjelma, jonka avulla käyttäjä voi pelata hirsipuupeliä.

Pelin idea on seuraava: ohjelma arvuuttelee käyttäjältä jotain sanaa ja käyttäjä arvaa sanaan kuuluvat kirjaimet yhden kirjaimen kerrallaan. Jos esimerkiksi käyttäjä arvaa kirjaimen a, ohjelma näyttää seuraavaksi sanan niin, että kaikki a-kirjaimen esiintymät ovat näkyvissä. Joka vaiheessa sana näytetään aina niin, että jo arvatut kirjaimet ovat näkyvissä, mutta muut arvattavan sanan kirjaimet on korvattu alaviivoilla (katso esimerkkiajoja).

Jos käyttäjä arvaa kirjainta, joka ei kuulu sanaan tai jonka hän on arvannut jo aikaisemmin, lasketaan se virheeksi. Jos käyttäjä tekee seitsemän virhettä ennen kuin hän on arvannut koko sanan, käyttäjä häviää. Jos taas käyttäjä arvaa sanan kokonaan ennen kuin hän on tehnyt seitsemän virhettä, käyttäjä voittaa pelin.

Ohjelman voi toteuttaa siten, että itse arvattavan sanan lisäksi pidetään yllä samankokoista listaa, jonka alkiot ovat bool-tyyppisiä (eli listan alkioiden arvo on joko True tai False). Aluksi listan kaikkien alkioiden arvo on False. Aina, kun käyttäjä arvaa jonkun kirjaimen oikein, vaihdetaan listassa True:ksi kaikki ne alkiot, joita vastaavalla paikalla esiintyy arvattu kirjain. Jos esimerkiksi arvattava sana on "maksalaatikko" ja käyttäjä arvaa kirjaimen "a", vaihdetaan listassa indekseillä 1, 4, 6 ja 7 olevien alkioiden arvoksi True. Tämän listan avulla on helppo tarkistaa, onko joku kirjain arvattu jo aikaisemmin ja onko koko sana jo arvattu.

Kirjoita ohjelmaasi seuraavat funktiot:

Kirjoita lisäksi pääohjelma, joka ensin pyytää arvattavan sanan. (Myöhemmin ohjelmaa voi muuttaa niin, että arvattava sana luetaan tiedostosta, mutta sitä ei vaadita tässä tehtävässä.) Tämän jälkeen ohjelma arvuuttelee käyttäjältä arvattavaa sanaa, kunnes joko käyttäjä on tehnyt 7 virhettä tai käyttäjä on arvannut sanan kokonaan ennen virhetilin täyttymistä. Käytä hyväksesi edellä kuvattuja funktioita ja katso esimerkkiajoista tarkemmin, miten ohjelman pitää toimia. Lopuksi ohjelman pitää tulostaa, voittiko vai hävisikö käyttäjä.

Voit olettaa, että käyttäjän antama syöte on järkevä. Testaa jälleen ohjelmaasi ajamalla sitä itse ennen kuin palautat ohjelman Gobliniin. Palauta Gobliniin tiedosto hirsipuu.py.

Esimerkkejä ohjelman suorituksesta:

[ohjelman suoritus alkaa]
Anna arvattava sana.
kissanhiekkalaatikko
Tervetuloa pelaamaan hirsipuuta!
Sana on nyt ____________________
Arvaa seuraava kirjain.
s
Hyva, se kuuluu sanaan.
Sana on nyt __ss________________
Arvaa seuraava kirjain.
r
Kirjain ei esiinny sanassa tai se on arvattu aikaisemmin.
Sana on nyt __ss________________
Arvaa seuraava kirjain.
a
Hyva, se kuuluu sanaan.
Sana on nyt __ssa______a_aa_____
Arvaa seuraava kirjain.
y
Kirjain ei esiinny sanassa tai se on arvattu aikaisemmin.
Sana on nyt __ssa______a_aa_____
Arvaa seuraava kirjain.
n
Hyva, se kuuluu sanaan.
Sana on nyt __ssan_____a_aa_____
Arvaa seuraava kirjain.
k
Hyva, se kuuluu sanaan.
Sana on nyt k_ssan___kka_aa__kk_
Arvaa seuraava kirjain.
h
Hyva, se kuuluu sanaan.
Sana on nyt k_ssanh__kka_aa__kk_
Arvaa seuraava kirjain.
a
Kirjain ei esiinny sanassa tai se on arvattu aikaisemmin.
Sana on nyt k_ssanh__kka_aa__kk_
Arvaa seuraava kirjain.
l
Hyva, se kuuluu sanaan.
Sana on nyt k_ssanh__kkalaa__kk_
Arvaa seuraava kirjain.
t
Hyva, se kuuluu sanaan.
Sana on nyt k_ssanh__kkalaat_kk_
Arvaa seuraava kirjain.
i
Hyva, se kuuluu sanaan.
Sana on nyt kissanhi_kkalaatikk_
Arvaa seuraava kirjain.
o
Hyva, se kuuluu sanaan.
Sana on nyt kissanhi_kkalaatikko
Arvaa seuraava kirjain.
e
Hyva, se kuuluu sanaan.
Voitit! Sana todellakin on kissanhiekkalaatikko
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Anna arvattava sana.
arvaus
Tervetuloa pelaamaan hirsipuuta!
Sana on nyt ______
Arvaa seuraava kirjain.
y
Kirjain ei esiinny sanassa tai se on arvattu aikaisemmin.
Sana on nyt ______
Arvaa seuraava kirjain.
l
Kirjain ei esiinny sanassa tai se on arvattu aikaisemmin.
Sana on nyt ______
Arvaa seuraava kirjain.
a
Hyva, se kuuluu sanaan.
Sana on nyt a__a__
Arvaa seuraava kirjain.
t
Kirjain ei esiinny sanassa tai se on arvattu aikaisemmin.
Sana on nyt a__a__
Arvaa seuraava kirjain.
f
Kirjain ei esiinny sanassa tai se on arvattu aikaisemmin.
Sana on nyt a__a__
Arvaa seuraava kirjain.
t
Kirjain ei esiinny sanassa tai se on arvattu aikaisemmin.
Sana on nyt a__a__
Arvaa seuraava kirjain.
u
Hyva, se kuuluu sanaan.
Sana on nyt a__au_
Arvaa seuraava kirjain.
p
Kirjain ei esiinny sanassa tai se on arvattu aikaisemmin.
Sana on nyt a__au_
Arvaa seuraava kirjain.
t
Kirjain ei esiinny sanassa tai se on arvattu aikaisemmin.
Havisit! Oikea sana on arvaus
[ohjelman suoritus päättyy]

Värikoodit:
Sininen: Syöte käyttäjältä
Vihreä: Ohjelman tuloste
Punainen: Erityishuomatus: ei tulosteta