Kierros 5, tehtävä 4

Nopanheitto (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 nopanheitto.

Tehtävän kuvaus

Kirjoita moduuliin nopanheitto ohjelma, jonka avulla käyttäjä voi pelata tietokonetta vastaan alla annetun kuvauksen mukaista noppapeliä.

Noppapelin kulku

Pelissä on kaksi pelaajaa, käyttäjä ja tietokone. Molempien pelaajien pistemäärä on aluksi nolla. Pelaajat heittävät vuorollaan noppaa. Noppaa saa heittää halutessaan omalla vuorollaan useampaan kertaan, mutta jos uuden heiton tulos on pienempi kuin saman vuoron edellisen heiton tulos, pelaajan pisteet tältä vuorolta nollautuvat ja vuoro päättyy. (Heiton tulosta siis verrataan aina vain saman vuoron edellisen heiton tulokseen, ei koskaan aikaisempien vuorojen heittoihin.) Jos vuoro päättyy siihen, että pelaaja ei enää halua heittää tällä vuorolla enempää (vaikka viimeisen heiton tulos ei olekaan liian pieni), pelaajan kaikkien heittojen tulokset tältä vuorolta lasketaan yhteen ja lisätään pelaajan kokonaispisteisiin.

Kun käyttäjä on heittänyt noppaa yhden kerran, ohjelma kysyy aina häneltä, haluaako hän heittää uudelleen niin kauan, että käyttäjä joko ei enää halua uutta heittoa tai käyttäjän tämän vuoron pisteet ovat nollautuneet liian pienen viimeisen heiton tuloksen takia.

Tietokone heittää uudelleen niin kauan kun sen edellisen heiton pisteet ovat 1, 2 tai 3. Jos tietokone saa heitollaan 4, 5 tai 6, se lopettaa vuoronsa. Kun tietokone päättää vuoronsa, sen vuoron aikana keräämät pisteet lisätään sen kokonaispisteisiin, jos vuoron viimeisen heiton pistemäärä ei ollut pienempi kuin toiseksi viimeisen heiton pistemäärä.

Pelin voittaa se, jolla on ensiksi 45 pistettä tai enemmän, kun molemmat pelaajat ovat pelanneet oman vuoronsa loppuun. Jos molemmat pelaajat saavuttavat 45 pistettä saman kierroksen lopuksi, pelin voittaa se, jolla on enemmän pisteitä. Jos pelaajien pistemäärä on tällöin yhtäsuuri, peli päättyy tasapeliin.

Ohjelman rakenne

Sekä käyttäjän että tietokoneen nopan 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 sinun tarvitsee vain ohjelmassasi kutsua funktiota heita_noppaa() aina, kun haluat heittää yhtä noppaa. Funktion paluuarvo kertoo heiton tuloksen. Alla on annettu myös pääohjelman alussa käyttäjälle tulostettavat ohjeet tulostava pääohjelman alku, jotta sinun ei tarvitse kirjoittaa käskyjä itse.

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("Milla luvulla noppa alustetaan?\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.

def main():
    print("Tama on noppapeli.")
    print("Sina ja tietokone heitatte vuorotellen noppaa.")
    print("Samalla heitolla saa heittaa monta kertaa,")
    print("mutta jos silmaluku on huonompi kuin edellisella heitolla,")
    print("koko vuorosi pisteet nollataan, ja vuorosi paattyy.")
    print("Peli paattyy, kun vahintaan toisella pelaajalla on")
    print("molempien vuorojen paattyessa 45 pistetta.")
    print("Pelin voittaa se, jonka pistemaara on suurempi.")
    print()
    print("Aloitetaan peli!")

# Jatka paaohjelman 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 ensin funktiota alusta_noppa ja antaa alkuarvot pelaajien pisteille. Tämän jälkeen pääohjelma pelaa vuorollaan tietokoneen ja käyttäjän vuoroja niin kauan, että peli on päättynyt. Tietokoneen vuoro pelataan aina ensiksi, mutta pelin päättymistä tutkitaan vasta sitten, kun myös käyttäjä on pelannut oman vuoronsa. Kun peli on päättynyt, ohjelman pitää vielä tulostaa, kumpi on voittanut pelin. Kutsu sopivia funktioita tarvittavien toimenpiteiden tekemiseen.

Kun molemmat ovat pelannneet vuoronsa, ohjelma tulostaa pistetilanteen. Katso tarkemmin esimerkkiajosta, miten ohjelman kulku menee ja millaisia tulostusten pitää täsmälleen olla.

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.

Palauta Gobliniin tiedosto nopanheitto.py.

Esimerkkejä ohjelman suorituksesta:

[ohjelman suoritus alkaa]
Tama on noppapeli.
Sina ja tietokone heitatte vuorotellen noppaa.
Samalla heitolla saa heittaa monta kertaa,
mutta jos silmaluku on huonompi kuin edellisella heitolla,
koko vuorosi pisteet nollataan, ja vuorosi paattyy.
Peli paattyy, kun vahintaan toisella pelaajalla on
molempien vuorojen paattyessa 45 pistetta.
Pelin voittaa se, jonka pistemaara on suurempi.

Aloitetaan peli!
Milla luvulla noppa alustetaan?
67
Tietokoneen vuoro heittaa:
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 1.
Tietokone heittaa uudelleen.
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 1.
Tietokone heittaa uudelleen.
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 4.
Tietokoneen pistemaara vuorolta yhteensa 6.
Nyt on sinun heittovuorosi:
Heita noppaa painamalla enteria.

Nopan pistemaara on 4.
Haluatko jatkaa kierrosta (k/e)?
k
Nopan pistemaara on 4.
Sinulla on talta vuorolta yhteensa 8 pistetta.
Haluatko jatkaa kierrosta (k/e)?
e
Pistetilanne: sinulla 8 - tietokoneella 6.
Tietokoneen vuoro heittaa:
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 3.
Tietokone heittaa uudelleen.
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 5.
Tietokoneen pistemaara vuorolta yhteensa 8.
Nyt on sinun heittovuorosi:
Heita noppaa painamalla enteria.

Nopan pistemaara on 4.
Haluatko jatkaa kierrosta (k/e)?
e
Pistetilanne: sinulla 12 - tietokoneella 14.
Tietokoneen vuoro heittaa:
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 4.
Tietokoneen pistemaara vuorolta yhteensa 4.
Nyt on sinun heittovuorosi:
Heita noppaa painamalla enteria.

Nopan pistemaara on 5.
Haluatko jatkaa kierrosta (k/e)?
e
Pistetilanne: sinulla 17 - tietokoneella 18.
Tietokoneen vuoro heittaa:
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 3.
Tietokone heittaa uudelleen.
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 2.
Hupsis, tietokoneen pisteet vuorolta nollautuivat!
Nyt on sinun heittovuorosi:
Heita noppaa painamalla enteria.

Nopan pistemaara on 6.
Haluatko jatkaa kierrosta (k/e)?
e
Pistetilanne: sinulla 23 - tietokoneella 18.
Tietokoneen vuoro heittaa:
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 1.
Tietokone heittaa uudelleen.
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 6.
Tietokoneen pistemaara vuorolta yhteensa 7.
Nyt on sinun heittovuorosi:
Heita noppaa painamalla enteria.

Nopan pistemaara on 2.
Haluatko jatkaa kierrosta (k/e)?
k
Nopan pistemaara on 3.
Sinulla on talta vuorolta yhteensa 5 pistetta.
Haluatko jatkaa kierrosta (k/e)?
k
Nopan pistemaara on 1.
Koko kierroksen pisteesi nollautuivat!
Pistetilanne: sinulla 23 - tietokoneella 25.
Tietokoneen vuoro heittaa:
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 2.
Tietokone heittaa uudelleen.
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 4.
Tietokoneen pistemaara vuorolta yhteensa 6.
Nyt on sinun heittovuorosi:
Heita noppaa painamalla enteria.

Nopan pistemaara on 2.
Haluatko jatkaa kierrosta (k/e)?
k
Nopan pistemaara on 1.
Koko kierroksen pisteesi nollautuivat!
Pistetilanne: sinulla 23 - tietokoneella 31.
Tietokoneen vuoro heittaa:
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 6.
Tietokoneen pistemaara vuorolta yhteensa 6.
Nyt on sinun heittovuorosi:
Heita noppaa painamalla enteria.

Nopan pistemaara on 1.
Haluatko jatkaa kierrosta (k/e)?
k
Nopan pistemaara on 4.
Sinulla on talta vuorolta yhteensa 5 pistetta.
Haluatko jatkaa kierrosta (k/e)?
e
Pistetilanne: sinulla 28 - tietokoneella 37.
Tietokoneen vuoro heittaa:
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 3.
Tietokone heittaa uudelleen.
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 2.
Hupsis, tietokoneen pisteet vuorolta nollautuivat!
Nyt on sinun heittovuorosi:
Heita noppaa painamalla enteria.

Nopan pistemaara on 4.
Haluatko jatkaa kierrosta (k/e)?
e
Pistetilanne: sinulla 32 - tietokoneella 37.
Tietokoneen vuoro heittaa:
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 6.
Tietokoneen pistemaara vuorolta yhteensa 6.
Nyt on sinun heittovuorosi:
Heita noppaa painamalla enteria.

Nopan pistemaara on 5.
Haluatko jatkaa kierrosta (k/e)?
e
Pistetilanne: sinulla 37 - tietokoneella 43.
Tietokoneen vuoro heittaa:
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 1.
Tietokone heittaa uudelleen.
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 4.
Tietokoneen pistemaara vuorolta yhteensa 5.
Nyt on sinun heittovuorosi:
Heita noppaa painamalla enteria.

Nopan pistemaara on 6.
Haluatko jatkaa kierrosta (k/e)?
e
Pistetilanne: sinulla 43 - tietokoneella 48.
Peli on lopussa.
Tietokone oli sinua parempi!
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Tama on noppapeli.
Sina ja tietokone heitatte vuorotellen noppaa.
Samalla heitolla saa heittaa monta kertaa,
mutta jos silmaluku on huonompi kuin edellisella heitolla,
koko vuorosi pisteet nollataan, ja vuorosi paattyy.
Peli paattyy, kun vahintaan toisella pelaajalla on
molempien vuorojen paattyessa 45 pistetta.
Pelin voittaa se, jonka pistemaara on suurempi.

Aloitetaan peli!
Milla luvulla noppa alustetaan?
23
Tietokoneen vuoro heittaa:
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 3.
Tietokone heittaa uudelleen.
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 1.
Hupsis, tietokoneen pisteet vuorolta nollautuivat!
Nyt on sinun heittovuorosi:
Heita noppaa painamalla enteria.

Nopan pistemaara on 1.
Haluatko jatkaa kierrosta (k/e)?
k
Nopan pistemaara on 5.
Sinulla on talta vuorolta yhteensa 6 pistetta.
Haluatko jatkaa kierrosta (k/e)?
e
Pistetilanne: sinulla 6 - tietokoneella 0.
Tietokoneen vuoro heittaa:
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 3.
Tietokone heittaa uudelleen.
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 4.
Tietokoneen pistemaara vuorolta yhteensa 7.
Nyt on sinun heittovuorosi:
Heita noppaa painamalla enteria.

Nopan pistemaara on 4.
Haluatko jatkaa kierrosta (k/e)?
k
Nopan pistemaara on 5.
Sinulla on talta vuorolta yhteensa 9 pistetta.
Haluatko jatkaa kierrosta (k/e)?
e
Pistetilanne: sinulla 15 - tietokoneella 7.
Tietokoneen vuoro heittaa:
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 3.
Tietokone heittaa uudelleen.
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 2.
Hupsis, tietokoneen pisteet vuorolta nollautuivat!
Nyt on sinun heittovuorosi:
Heita noppaa painamalla enteria.

Nopan pistemaara on 6.
Haluatko jatkaa kierrosta (k/e)?
e
Pistetilanne: sinulla 21 - tietokoneella 7.
Tietokoneen vuoro heittaa:
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 2.
Tietokone heittaa uudelleen.
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 3.
Tietokone heittaa uudelleen.
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 4.
Tietokoneen pistemaara vuorolta yhteensa 9.
Nyt on sinun heittovuorosi:
Heita noppaa painamalla enteria.

Nopan pistemaara on 1.
Haluatko jatkaa kierrosta (k/e)?
k
Nopan pistemaara on 2.
Sinulla on talta vuorolta yhteensa 3 pistetta.
Haluatko jatkaa kierrosta (k/e)?
k
Nopan pistemaara on 5.
Sinulla on talta vuorolta yhteensa 8 pistetta.
Haluatko jatkaa kierrosta (k/e)?
e
Pistetilanne: sinulla 29 - tietokoneella 16.
Tietokoneen vuoro heittaa:
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 4.
Tietokoneen pistemaara vuorolta yhteensa 4.
Nyt on sinun heittovuorosi:
Heita noppaa painamalla enteria.

Nopan pistemaara on 1.
Haluatko jatkaa kierrosta (k/e)?
k
Nopan pistemaara on 1.
Sinulla on talta vuorolta yhteensa 2 pistetta.
Haluatko jatkaa kierrosta (k/e)?
k
Nopan pistemaara on 1.
Sinulla on talta vuorolta yhteensa 3 pistetta.
Haluatko jatkaa kierrosta (k/e)?
k
Nopan pistemaara on 6.
Sinulla on talta vuorolta yhteensa 9 pistetta.
Haluatko jatkaa kierrosta (k/e)?
e
Pistetilanne: sinulla 38 - tietokoneella 20.
Tietokoneen vuoro heittaa:
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 4.
Tietokoneen pistemaara vuorolta yhteensa 4.
Nyt on sinun heittovuorosi:
Heita noppaa painamalla enteria.

Nopan pistemaara on 4.
Haluatko jatkaa kierrosta (k/e)?
e
Pistetilanne: sinulla 42 - tietokoneella 24.
Tietokoneen vuoro heittaa:
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 1.
Tietokone heittaa uudelleen.
Paina enteria nahdaksesi heiton tuloksen.

Heiton tulos on 5.
Tietokoneen pistemaara vuorolta yhteensa 6.
Nyt on sinun heittovuorosi:
Heita noppaa painamalla enteria.

Nopan pistemaara on 6.
Haluatko jatkaa kierrosta (k/e)?
e
Pistetilanne: sinulla 48 - tietokoneella 30.
Peli on lopussa.
Hyva, onnistuit voittamaan!
[ohjelman suoritus päättyy]

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