Kierros 5, tehtävä 4

Noppapeli (250 p)

Tässä tehtävässä harjoitellaan seuraavia asioita:

Alkuvalmistelut

Tee Eclipseen uusi projekti, jonka nimi on tehtava5_4, ja tähän projektiin moduuli noppapeli.

Tehtävän kuvaus

Kirjoita moduuliin noppapeli ohjelma, jonka avulla käyttäjä voi pelata alla annetun kuvauksen mukaista noppapeliä. Tehtävän yksinkertaistamiseksi tässä pelissä on vain yksi pelaaja, joka heittää noppaa kolme kertaa ja saa niistä pisteet alla annetun kuvauksen mukaan.

Noppapelin kulku

Pelaaja heittää noppaa kolme kertaa. Näiden kolmen heiton tulokset muodostavat yhdessä tulosrivin. Tulosrivistä saa pisteitä seuraavien sääntöjen mukaisesti:

Ohjelman rakenne

Noppien heittäminen tehdään ohjelmassa satunnaislukujen avulla. Voit lukea satunnaisluvuista enemmän tehtävän 3.3 tehtävänannosta. Alla on annettu valmiina koodi, joka tekee satunnaislukujen arpomista varten tarvittavat alustukset (funktio alusta_noppa()) ja heittää noppaa yhden kerran (funktio heita_noppaa()). Voit liittää koodin tällaisenaan oman moduulisi alkuun ja jatkaa ohjelman kirjoittamista sen jälkeen.

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():
    siemenluku = int(input("Anna siemenluku nopan alustamiseksi.\n"))
    random.seed(siemenluku)
 
    
# Funktio matkii nopan heittamista generoimalla satunnaisluvun valilta 1-6.
# Funktio palauttaa arvonaan nopanheiton tuloksen.
    
def heita_noppaa():
    SIVULKM = 6    
    return random.randint(1, SIVULKM)

# Jatka ohjelman kirjoittamista tahan.

Ohjelmassa on siis valmiina seuraavat funktiot

Sinun tehtävänäsi on kirjoittaa ohjelmaan seuraavat funktiot:

Kirjoita lisäksi pääohjelma, joka kutsuu tervetulotoivotuksen jälkeen funktiota alusta_noppa, pyytää pelaajaa painamaan enteriä ja sen jälkeen kutsuu funktiota heita_nopat. Pääohjelma tulostaa heittojen tulokset ja tutkii sitten, sisältääkö tulosrivi kolme samaa, kaksi samaa tai suoran. Jos sisältää, se kerrotaan pelaajalle ja myöskin se, jos tulosrivistä ei löytynyt mitään erityistä. Lopuksi pääohjelma tulostaa heittojen tulokset vielä uudestaan ja pelaajan saamat pisteet. Katso tarkemmin esimerkkiajoista tarkemmin, millainen ohjelman tulostuksen pitää olla eri tapauksissa.

Vinkkejä

Voit tutkia sitä, onko listassa täsmälleen kaksi samaa lukua esimerkiksi käyttämällä hyväksi Pythonin valmista metodia count, joka palauttaa tiedon siitä, kuinka monta kertaa parametrina annettu alkio esiintyy listassa. Esimerkiksi koodi

lista = [4, 5, 4]
print(lista.count(4))
tulostaa luvun 2.

Kun pitää tutkia, voiko listassa olevista luvuista muodostaa suoran, on yksi vaihtoehto tehdä listasta kopio ja järjestää tämä kopiolista Pythonin valmiilla metodilla sort. Tästä listasta on helppo tutkia, ovatko luvut siinä kasvavassa suuruusjärjestyksessä niin, että alkiot kasvavat aina yhdellä.

Virheiden käsittely

Ohjelman ei tarvitse varautua virhetilanteisiin.

Ohjelman palautus

Ole tarkka siitä, että ohjelmasi tulostus on täsmälleen (välimerkkejä ja tyhjiä rivejä myöten) alla olevan mallin mukainen. Goblinin tarkistus menee helposti sekaisin, jos tulostuksessasi on eri määrä rivejä kuin mallitulostuksessa.

Tarkistusten (kaksi samaa, kolme samaa ja suora) testauksessa voi olla järkevää korvata väliaikaisesti noppien heittäminen sillä, että annat ohjelmalle suoraan erilaisia tulosrivejä. Näin pääset testaamaan eri tarkistusten toimimisen ilman, että sinun pitää löytää sopiva satunnaisluku jokaisen erilaisen rivin generoimiseen. Lisää kuitenkin noppien heittämien ohjelmaan takaisin ennen kuin palautat sen Gobliniin.

Palauta Gobliniin tiedosto noppapeli.py.

Huomautus

Pelistä saa mielekkäämmän, jos siihen lisää myös tietokoneen tai toisen pelaajan noppien heittämisen. Lisäksi peliä voi laajentaa siten, että pelataan useita kierroksia ja kierrosten yhteispistemäärä ratkaisee voittajan. Näitä ominaisuuksia ei ole kuitenkaan vaadittu tässä tehtävässä, jotta tehtävän työmäärä pysyisi järkevänä. (Laajennettua ohjelmaa ei voi myöskään palauttaa Goblinin tarkistettavaksi.)

Esimerkkejä ohjelman suorituksesta:

[ohjelman suoritus alkaa]
Tervetuloa pelaamaan noppapelia!
Anna siemenluku nopan alustamiseksi.
11
Paina enteria heittaaksesi noppia.

Heittotuloksesi on [4, 5, 4]
Hyva: tulosrivissasi on kaksi samaa silmalukua.
Sarja [4, 5, 4] antaa 10 pistetta.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Tervetuloa pelaamaan noppapelia!
Anna siemenluku nopan alustamiseksi.
15
Paina enteria heittaaksesi noppia.

Heittotuloksesi on [2, 1, 5]
Tulosrivisi ei sisalla samoja silmalukuja tai suoraa.
Sarja [2, 1, 5] antaa 5 pistetta.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Tervetuloa pelaamaan noppapelia!
Anna siemenluku nopan alustamiseksi.
109
Paina enteria heittaaksesi noppia.

Heittotuloksesi on [3, 2, 4]
Hyva: tulosrivissasi on suora.
Sarja [3, 2, 4] antaa 21 pistetta.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Tervetuloa pelaamaan noppapelia!
Anna siemenluku nopan alustamiseksi.
155
Paina enteria heittaaksesi noppia.

Heittotuloksesi on [5, 5, 5]
Hyva: tulosrivissasi on kolme samaa silmalukua.
Sarja [5, 5, 5] antaa 41 pistetta.
[ohjelman suoritus päättyy]

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