Tässä tehtävässä harjoitellaan erityisesti seuraavia asioita:
Tee Eclipseen uusi projekti, jonka nimi on tehtava7_3, ja tähän projektiin moduuli noppapokeri. Kirjoita tähän moduuliin ohjelma, jonka avulla käyttäjä voi pelata tietokoneen kanssa noppapokeria.
Noppapokeria pelatessa kumpikin pelaaja heittää viittä noppaa. Voittaja on se, jonka nopissa on eniten samoja silmälukuja. Jos molemmilla pelaajilla on yhtä monta samaa silmälukua, ratkaisee voiton se, kummalla tämä sama silmäluku on suurempi. Jos sekin on sama molemmilla pelaajilla, tulos on tasapeli.
Esimerkkejä:
Huomatus: oikeasti noppapokerissa säännöt ovat monimutkaisemmat. Mahdollisia noppayhdistelmiä on muitakin (täyskäsi, kaksi paria, suora jne) ja myös muut kuin parhaat nopat vaikuttavat tulokseeen silloin, kun peli olisi muuten tasapeli. Lisäksi pelaajalla on mahdollisuus heittää valitsemansa nopat uudelleen. Tästä tehtävästä nämä ominaisuudet on kuitenkin jätetty pois, jotta tehtävästä ei tulisi liian työläs. Halutessasi voit kuitenkin laajentaa ohjelmaasi myöhemmin näillä ominaisuuksilla. (Palauta kuitenkin Gobliniin tässä tehtävänannossa kuvattu versio.)
Ohjelman rakennetta ei ole tässä määrätty sen tarkemmin, vaan saat itse miettiä, mitä funktioita tarvitset ohjelmassasi. Älä kuitenkaan kirjoita koko ohjelmaasi yhteen pääohjelmaan, vaan kirjoita funktioita sopivasti. Käytä ohjelmassasi apuna kahta tietorakennetta: 5-alkioista listaa, joka sisältää pelaajan heittämien noppien silmäluvut, sekä kaksialkioista listaa, jonka ensimmäinen alkio sisältää tiedon siitä, montako samaa silmälukua heittojen tuloksissa on, ja toinen alkio tämän silmäluvun (parhaimman niistä, jos niitä on useita). Jälkimmäisen listan avulla on helppo verrata kahdesta pelaajasta, kummalla on parempi tulos. (Asian voisi hoitaa kauniimmin käyttämällä olioita, mutta koska niitä ei ole opetettu, tehdään vertailu tässä listojen avulla.)
Noppien heittämisen simuloinnissa käytetään apuna satunnaislukuja, joista
on kerrottu tarkemmin tehtävässä 3.2. Alla on annettu nopan heittämiseen
tarvittava koodi valmiina. Viiden nopan heittämistä simuloidaan
kutsumalla alla annettua heita_noppaa
-funktiota
viisi kertaa peräkkäin.
import random # Funktio pyytaa kayttajalta siemenluvun nopan heittamista kuvaavaa # satunnaislukugeneraattoria varten. Tama ei olisi muuten valttamatonta, # mutta nain ohjelma saadaan haluttaessa toimimaan eri suorituskerroilla # samalla tavalla tarkistuksia varten. def alusta_noppa(): rivi = raw_input("Anna siemenluku nopan alustamiseksi.\n") siemenluku = int(rivi) random.seed(siemenluku) # Funktio matkii nopan heittamista generoimalla satunnaisluvun valilta 1-6. # Funktio palauttaa arvonaan nopanheiton tuloksen. def heita_noppaa(): SIVULKM = 6 return random.randrange(1, SIVULKM + 1)
Ennen pelin alkua ohjelman pitää pyytää satunnaislukugeneraattorin
alustuksessa
käytettävä siemenluku ja alustaa satunnaislukugeneraattori funktion
alusta_noppa
avulla.
Peli toimii seuraavasti: Aluksi heitetään käyttäjän nopat ja ilmoitetaan
niiden silmäluvut. Sen jälkeen ohjelma heittää tietokoneen nopat ja
ilmoittaa niiden silmäluvut. Tämän jälkeen ohjelma ilmoittaa
kummankin heittojen tulokset eli se tulostaa jonkin teksteistä
"Suuri luku", "Pari", "Kolme samaa", "Nelja samaa", ja "Viisi samaa"
tuloksen mukaan, sitten tekstin ", silmaluku" ja sitten samojen
noppien silmäluvun tai suurimman nopan silmäluvun, jos viidessä nopassa
ei ollut yhtään samaa silmälukua. Tämän jälkeen ohjelma selvittää, kumpi
pelaajista voitti pelin, ja tulostaa joko "Sina voitit!", "Tietokone voitti!"
tai "Tasapeli!" pelin lopputuloksen mukaan. Katso esimerkkiajosta tarkemmin,
millaisia ohjelman tulosten pitää olla.
Vinkki 1:Pythonissa on olemassa listoille valmis metodi
count
, joka palauttaa tiedon siitä, kuinka monta kertaa
parametrina annettu alkio esiintyy listassa. Esimerkiksi koodi
lista = [4, 5, 1, 4, 4] print lista.count(4)tulostaa luvun 3. Tätä metodia voi käyttää hyväksi, kun tutkii, onko noppalistassa esimerkiksi kolme samaa arvoa.
Vinkki 2:Ohjelman testausvaiheessa voi olla vaikeaa löytää tarpeeksi sellaisia testiajoja, joissa pelaaja saa kolme, neljä tai viisi samaa silmälukua. Voit testata näiden tapausten toimimista oikein sillä, että korvaat väliaikaisesti noppien arpomisen antamalla noppien silmäluvut suoraan ohjelmassa. (Jos olet suunnitellut ohjelmasi rakenteen järkevästi, tähän riittää yhden käskyn muutos.)
Testaa taas ohjelmaasi ajamalla sitä itse useita kertoja ennen kuin palautat sen Gobliniin. Palauta Gobliniin tiedosto noppapokeri.py.
[ohjelman suoritus alkaa] Anna siemenluku nopan alustamiseksi. 13 Peli alkaa. Heitetaan sinun noppasi. Heiton tulos: [2, 5, 5, 6, 2] Heitetaan tietokoneen nopat. Heiton tulos: [2, 1, 2, 5, 1] Sinun tuloksesi on Pari, silmaluku 5 Tietokoneen tulos on Pari, silmaluku 2 Sina voitit! [ohjelman suoritus päättyy]
[ohjelman suoritus alkaa] Anna siemenluku nopan alustamiseksi. 18 Peli alkaa. Heitetaan sinun noppasi. Heiton tulos: [2, 4, 3, 2, 3] Heitetaan tietokoneen nopat. Heiton tulos: [3, 3, 3, 2, 2] Sinun tuloksesi on Pari, silmaluku 3 Tietokoneen tulos on Kolme samaa, silmaluku 3 Tietokone voitti! [ohjelman suoritus päättyy]
[ohjelman suoritus alkaa] Anna siemenluku nopan alustamiseksi. 129 Peli alkaa. Heitetaan sinun noppasi. Heiton tulos: [4, 5, 2, 6, 6] Heitetaan tietokoneen nopat. Heiton tulos: [6, 4, 2, 5, 1] Sinun tuloksesi on Pari, silmaluku 6 Tietokoneen tulos on Suuri luku, silmaluku 6 Sina voitit! [ohjelman suoritus päättyy]
Värikoodit:
Sininen: Syöte käyttäjältä
Vihreä: Ohjelman tuloste
Punainen: Erityishuomatus: ei tulosteta