Kierros 5, tehtävä 3

Noppapeli (250 p)

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

Tee Eclipseen uusi projekti, jonka nimi on tehtava5_3, ja tähän projektiin moduuli noppapeli. Kirjoita moduuliin ohjelma, jonka avulla käyttäjä voi pelata tietokonetta vastaan alla annetun kuvauksen mukaista noppapeliä.

Pelissä on kaksi pelaajaa, käyttäjä ja tietokone. Molempien pelaajien pistemäärä on aluksi nolla. Pelaajat heittävät vuorollaan kahta noppaa. Heittojen tulosten summa lisätään vuorossa olevan pelaajan pisteisiin. Jos molemmissa nopissa on sama tulos, saa pelaaja heittää kumpaakin noppaa vielä uudelleen samalla vuorolla, ja uudenkin heiton tulosten summa lisätään pelaajan pisteisiin. Jos uudellakin heitolla molemmissa nopissa on sama tulos, saa pelaaja heittää noppia vielä uudelleen jne. Kun noppien tulos on eri, vuoro siirtyy toiselle pelaajalle. Peli jatkuu niin kauan, että jompi kumpi pelaajista saavuttaa 100 pistettä tai enemmän. Tässäkin tilanteessa molemmat pelaajat pelaavat ensin vuoronsa loppuun, ja pelin tulos katsotaan vasta sen jälkeen. Voittaja on se pelaaja, jolla on nyt enemmän pisteitä. Jos molemmilla pelaajilla on sama pistemäärä, peli päättyy tasan.

Sekä käyttäjän että tietokoneen noppien heittäminen tehdään ohjelmassa satunnaislukujen avulla. Voit lukea satunnaisluvuista enemmän tehtävän 3.2 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.

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)
 
# 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 ensin funktiota alusta_noppa ja antaa alkuarvot pelaajien pisteille. Tämän jälkeen pääohjelma pyytää käyttäjää aloittamaan seuraavan vuoron painamalla enteriä (kirjoita ohjelmaan raw_input-käsky, jonka palauttamaa arvoa ei tarvitse tallentaa lainkaan mihinkään muuttujaan).

Kun käyttäjä on painanut enter-näppäintä, ohjelma kutsuu pelaa_vuoro-funktiota ensin käyttäjälle ja sitten tietokoneelle. Ohjelma lisää funktion palauttaman arvon aina vuorossa olevan pelaajan pisteisiin. Kun molemmat ovat pelannneet vuoronsa, ohjelma tulostaa pistetilanteen. Katso tarkemmin esimerkkiajosta, miten ohjelman kulku menee ja millaisia tulostusten pitää täsmälleen olla.

Funktio pelaa_vuoro ei itse tiedä, kenen vuoroa ollaan pelaamassa, mutta pääohjelma lisää funktion palauttamat pisteet aina oikean pelaajan pisteisiin sen mukaan, ollaanko pelaamassa käyttäjän vai tietokoneen vuoroa.

Pääohjelma jatkaa toimintaansa niin kauan, että vähintään toinen pelaajista on saavuttanut vähintään 100 pistettä. Pistetilanne tarkistetaan (funktion peli_paattynyt avulla) kuitenkin vain aina silloin, kun molemmat pelaajat ovat pelanneet vuoronsa loppuun. Kun peli on päättynyt, pääohjelma kutsuu tulosta_voittaja-funktiota.

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. Esimerkkiajossa näkyvät rivit

Sinun vuorosi:
ja
Tietokoneen vuoro:
on tulostettu pääohjelmassa. Samoin pääohjelmassa on tulostettu yksi tyhjä rivi aina pelaa_vuoro-funktion kutsumisen jälkeen.

Palauta Gobliniin tiedosto noppapeli.py.

Esimerkkejä ohjelman suorituksesta:

[ohjelman suoritus alkaa]
Anna siemenluku nopan alustamiseksi.
15
Aloitetaan peli.
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 6, 2. noppa 1.
Vuoro paattyi, pisteet talta vuorolta yhteensa 7.

Tietokoneen vuoro:
Heitto: 1. noppa 5, 2. noppa 1.
Vuoro paattyi, pisteet talta vuorolta yhteensa 6.

Pistetilanne vuorojen paatteeksi: sina 7, tietokone 6
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 6, 2. noppa 1.
Vuoro paattyi, pisteet talta vuorolta yhteensa 7.

Tietokoneen vuoro:
Heitto: 1. noppa 6, 2. noppa 5.
Vuoro paattyi, pisteet talta vuorolta yhteensa 11.

Pistetilanne vuorojen paatteeksi: sina 14, tietokone 17
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 6, 2. noppa 6.
Heitto: 1. noppa 2, 2. noppa 3.
Vuoro paattyi, pisteet talta vuorolta yhteensa 17.

Tietokoneen vuoro:
Heitto: 1. noppa 5, 2. noppa 2.
Vuoro paattyi, pisteet talta vuorolta yhteensa 7.

Pistetilanne vuorojen paatteeksi: sina 31, tietokone 24
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 2, 2. noppa 2.
Heitto: 1. noppa 6, 2. noppa 6.
Heitto: 1. noppa 5, 2. noppa 2.
Vuoro paattyi, pisteet talta vuorolta yhteensa 23.

Tietokoneen vuoro:
Heitto: 1. noppa 6, 2. noppa 4.
Vuoro paattyi, pisteet talta vuorolta yhteensa 10.

Pistetilanne vuorojen paatteeksi: sina 54, tietokone 34
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 2, 2. noppa 3.
Vuoro paattyi, pisteet talta vuorolta yhteensa 5.

Tietokoneen vuoro:
Heitto: 1. noppa 3, 2. noppa 1.
Vuoro paattyi, pisteet talta vuorolta yhteensa 4.

Pistetilanne vuorojen paatteeksi: sina 59, tietokone 38
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 4, 2. noppa 3.
Vuoro paattyi, pisteet talta vuorolta yhteensa 7.

Tietokoneen vuoro:
Heitto: 1. noppa 4, 2. noppa 6.
Vuoro paattyi, pisteet talta vuorolta yhteensa 10.

Pistetilanne vuorojen paatteeksi: sina 66, tietokone 48
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 4, 2. noppa 3.
Vuoro paattyi, pisteet talta vuorolta yhteensa 7.

Tietokoneen vuoro:
Heitto: 1. noppa 6, 2. noppa 6.
Heitto: 1. noppa 3, 2. noppa 6.
Vuoro paattyi, pisteet talta vuorolta yhteensa 21.

Pistetilanne vuorojen paatteeksi: sina 73, tietokone 69
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 1, 2. noppa 1.
Heitto: 1. noppa 2, 2. noppa 6.
Vuoro paattyi, pisteet talta vuorolta yhteensa 10.

Tietokoneen vuoro:
Heitto: 1. noppa 5, 2. noppa 5.
Heitto: 1. noppa 2, 2. noppa 3.
Vuoro paattyi, pisteet talta vuorolta yhteensa 15.

Pistetilanne vuorojen paatteeksi: sina 83, tietokone 84
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 6, 2. noppa 1.
Vuoro paattyi, pisteet talta vuorolta yhteensa 7.

Tietokoneen vuoro:
Heitto: 1. noppa 1, 2. noppa 1.
Heitto: 1. noppa 3, 2. noppa 6.
Vuoro paattyi, pisteet talta vuorolta yhteensa 11.

Pistetilanne vuorojen paatteeksi: sina 90, tietokone 95
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 4, 2. noppa 3.
Vuoro paattyi, pisteet talta vuorolta yhteensa 7.

Tietokoneen vuoro:
Heitto: 1. noppa 4, 2. noppa 2.
Vuoro paattyi, pisteet talta vuorolta yhteensa 6.

Pistetilanne vuorojen paatteeksi: sina 97, tietokone 101
Peli on paattynyt.
Tietokone voitti sinut.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Anna siemenluku nopan alustamiseksi.
13
Aloitetaan peli.
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 2, 2. noppa 5.
Vuoro paattyi, pisteet talta vuorolta yhteensa 7.

Tietokoneen vuoro:
Heitto: 1. noppa 5, 2. noppa 6.
Vuoro paattyi, pisteet talta vuorolta yhteensa 11.

Pistetilanne vuorojen paatteeksi: sina 7, tietokone 11
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 2, 2. noppa 2.
Heitto: 1. noppa 1, 2. noppa 2.
Vuoro paattyi, pisteet talta vuorolta yhteensa 7.

Tietokoneen vuoro:
Heitto: 1. noppa 5, 2. noppa 1.
Vuoro paattyi, pisteet talta vuorolta yhteensa 6.

Pistetilanne vuorojen paatteeksi: sina 14, tietokone 17
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 4, 2. noppa 2.
Vuoro paattyi, pisteet talta vuorolta yhteensa 6.

Tietokoneen vuoro:
Heitto: 1. noppa 2, 2. noppa 3.
Vuoro paattyi, pisteet talta vuorolta yhteensa 5.

Pistetilanne vuorojen paatteeksi: sina 20, tietokone 22
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 6, 2. noppa 4.
Vuoro paattyi, pisteet talta vuorolta yhteensa 10.

Tietokoneen vuoro:
Heitto: 1. noppa 1, 2. noppa 2.
Vuoro paattyi, pisteet talta vuorolta yhteensa 3.

Pistetilanne vuorojen paatteeksi: sina 30, tietokone 25
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 1, 2. noppa 6.
Vuoro paattyi, pisteet talta vuorolta yhteensa 7.

Tietokoneen vuoro:
Heitto: 1. noppa 5, 2. noppa 5.
Heitto: 1. noppa 5, 2. noppa 5.
Heitto: 1. noppa 6, 2. noppa 5.
Vuoro paattyi, pisteet talta vuorolta yhteensa 31.

Pistetilanne vuorojen paatteeksi: sina 37, tietokone 56
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 2, 2. noppa 6.
Vuoro paattyi, pisteet talta vuorolta yhteensa 8.

Tietokoneen vuoro:
Heitto: 1. noppa 3, 2. noppa 5.
Vuoro paattyi, pisteet talta vuorolta yhteensa 8.

Pistetilanne vuorojen paatteeksi: sina 45, tietokone 64
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 4, 2. noppa 3.
Vuoro paattyi, pisteet talta vuorolta yhteensa 7.

Tietokoneen vuoro:
Heitto: 1. noppa 3, 2. noppa 3.
Heitto: 1. noppa 2, 2. noppa 1.
Vuoro paattyi, pisteet talta vuorolta yhteensa 9.

Pistetilanne vuorojen paatteeksi: sina 52, tietokone 73
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 5, 2. noppa 5.
Heitto: 1. noppa 6, 2. noppa 5.
Vuoro paattyi, pisteet talta vuorolta yhteensa 21.

Tietokoneen vuoro:
Heitto: 1. noppa 4, 2. noppa 5.
Vuoro paattyi, pisteet talta vuorolta yhteensa 9.

Pistetilanne vuorojen paatteeksi: sina 73, tietokone 82
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 1, 2. noppa 5.
Vuoro paattyi, pisteet talta vuorolta yhteensa 6.

Tietokoneen vuoro:
Heitto: 1. noppa 3, 2. noppa 2.
Vuoro paattyi, pisteet talta vuorolta yhteensa 5.

Pistetilanne vuorojen paatteeksi: sina 79, tietokone 87
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 2, 2. noppa 4.
Vuoro paattyi, pisteet talta vuorolta yhteensa 6.

Tietokoneen vuoro:
Heitto: 1. noppa 2, 2. noppa 3.
Vuoro paattyi, pisteet talta vuorolta yhteensa 5.

Pistetilanne vuorojen paatteeksi: sina 85, tietokone 92
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 4, 2. noppa 3.
Vuoro paattyi, pisteet talta vuorolta yhteensa 7.

Tietokoneen vuoro:
Heitto: 1. noppa 1, 2. noppa 3.
Vuoro paattyi, pisteet talta vuorolta yhteensa 4.

Pistetilanne vuorojen paatteeksi: sina 92, tietokone 96
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 2, 2. noppa 2.
Heitto: 1. noppa 2, 2. noppa 3.
Vuoro paattyi, pisteet talta vuorolta yhteensa 9.

Tietokoneen vuoro:
Heitto: 1. noppa 1, 2. noppa 4.
Vuoro paattyi, pisteet talta vuorolta yhteensa 5.

Pistetilanne vuorojen paatteeksi: sina 101, tietokone 101
Peli on paattynyt.
Tulos on tasapeli.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Anna siemenluku nopan alustamiseksi.
17
Aloitetaan peli.
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 4, 2. noppa 5.
Vuoro paattyi, pisteet talta vuorolta yhteensa 9.

Tietokoneen vuoro:
Heitto: 1. noppa 6, 2. noppa 2.
Vuoro paattyi, pisteet talta vuorolta yhteensa 8.

Pistetilanne vuorojen paatteeksi: sina 9, tietokone 8
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 5, 2. noppa 5.
Heitto: 1. noppa 4, 2. noppa 1.
Vuoro paattyi, pisteet talta vuorolta yhteensa 15.

Tietokoneen vuoro:
Heitto: 1. noppa 1, 2. noppa 3.
Vuoro paattyi, pisteet talta vuorolta yhteensa 4.

Pistetilanne vuorojen paatteeksi: sina 24, tietokone 12
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 5, 2. noppa 2.
Vuoro paattyi, pisteet talta vuorolta yhteensa 7.

Tietokoneen vuoro:
Heitto: 1. noppa 4, 2. noppa 2.
Vuoro paattyi, pisteet talta vuorolta yhteensa 6.

Pistetilanne vuorojen paatteeksi: sina 31, tietokone 18
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 6, 2. noppa 6.
Heitto: 1. noppa 3, 2. noppa 6.
Vuoro paattyi, pisteet talta vuorolta yhteensa 21.

Tietokoneen vuoro:
Heitto: 1. noppa 1, 2. noppa 5.
Vuoro paattyi, pisteet talta vuorolta yhteensa 6.

Pistetilanne vuorojen paatteeksi: sina 52, tietokone 24
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 6, 2. noppa 1.
Vuoro paattyi, pisteet talta vuorolta yhteensa 7.

Tietokoneen vuoro:
Heitto: 1. noppa 5, 2. noppa 4.
Vuoro paattyi, pisteet talta vuorolta yhteensa 9.

Pistetilanne vuorojen paatteeksi: sina 59, tietokone 33
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 6, 2. noppa 2.
Vuoro paattyi, pisteet talta vuorolta yhteensa 8.

Tietokoneen vuoro:
Heitto: 1. noppa 4, 2. noppa 6.
Vuoro paattyi, pisteet talta vuorolta yhteensa 10.

Pistetilanne vuorojen paatteeksi: sina 67, tietokone 43
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 4, 2. noppa 2.
Vuoro paattyi, pisteet talta vuorolta yhteensa 6.

Tietokoneen vuoro:
Heitto: 1. noppa 1, 2. noppa 6.
Vuoro paattyi, pisteet talta vuorolta yhteensa 7.

Pistetilanne vuorojen paatteeksi: sina 73, tietokone 50
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 3, 2. noppa 6.
Vuoro paattyi, pisteet talta vuorolta yhteensa 9.

Tietokoneen vuoro:
Heitto: 1. noppa 1, 2. noppa 5.
Vuoro paattyi, pisteet talta vuorolta yhteensa 6.

Pistetilanne vuorojen paatteeksi: sina 82, tietokone 56
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 5, 2. noppa 6.
Vuoro paattyi, pisteet talta vuorolta yhteensa 11.

Tietokoneen vuoro:
Heitto: 1. noppa 1, 2. noppa 3.
Vuoro paattyi, pisteet talta vuorolta yhteensa 4.

Pistetilanne vuorojen paatteeksi: sina 93, tietokone 60
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 1, 2. noppa 5.
Vuoro paattyi, pisteet talta vuorolta yhteensa 6.

Tietokoneen vuoro:
Heitto: 1. noppa 3, 2. noppa 6.
Vuoro paattyi, pisteet talta vuorolta yhteensa 9.

Pistetilanne vuorojen paatteeksi: sina 99, tietokone 69
Paina enteria seuraavan vuoron aloittamiseksi.

Sinun vuorosi:
Heitto: 1. noppa 3, 2. noppa 5.
Vuoro paattyi, pisteet talta vuorolta yhteensa 8.

Tietokoneen vuoro:
Heitto: 1. noppa 6, 2. noppa 2.
Vuoro paattyi, pisteet talta vuorolta yhteensa 8.

Pistetilanne vuorojen paatteeksi: sina 107, tietokone 77
Peli on paattynyt.
Onneksi olkoon, sina voitit!
[ohjelman suoritus päättyy]

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