Kierros 5, tehtävä 4

Kivi, sakset paperi (250 p)

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

Tee Eclipseen uusi projekti, jonka nimi on tehtava5_4. Luo sitten tähän projektiin moduli kivipeli ja kirjoita siihen ohjelma, jonka avulla käyttäjä voi pelata kivi-sakset-paperi-peliä.

Pelissä tietokone ensin arpoo yhden vaihtoehdoista kivi, sakset tai paperi, mutta ei kerro valintaansa käyttäjälle. Sen jälkeen käyttäjä valitsee yhden näistä kolmesta esineestä ja kertoo sen tietokoneelle. Sitten ohjelma päättää, kumpi (tietokone vai käyttäjä) voitti pelin. Kivi voittaa sakset, sakset voittavat paperin ja paperi voittaa kiven. Jos molemmat valitsivat saman esineen, peli ei vielä ratkennut, vaan sekä käyttäjä että tietokone tekevät uuden valinnan (katso tarkemmin esimerkkiajosta).

Tietokone arpoo oman valintansa satunnaislukugeneraattorin avulla. Jotta ohjelman tarkastaminen Goblinilla olisi mahdollista, satunnaislukugeneraattorille asetetaan aluksi käyttäjän antama siemenluku. Satunnaislukujen generointia on selitetty tarkemmin kierroksen 3 tehtävän 3 tehtävänannossa. Sinun ei välttämättä tarvitse välittää satunnaisluvuista mitään, sillä kaikki tarpeellinen on jo tehty alla annetussa ohjelmapohjassa. Sinun pitää ainoastaan kirjoittaa muut pyydetyt funktiot sekä pääohjelma, joka kutsuu valmiina annettuja ja kirjoittamiasi funktioita tarvittavalla tavalla.

Alla on pohja, johon voi jatkaa ohjelman kirjoittamista. Ohjelmassa on määritelty funktiot tee_alustus ja arvo_tietokoneen_valinta. Ne ovat jo valmiita, eikä niihin tarvitse tehdä lisäyksiä tai muutoksia. Lisäksi ohjelmassa on määritelty joukko vakioita, joiden avulla voi kätevästi käsitellä ohjelman ja käyttäjän valintoja nimien avulla. Vakiot on nyt määritelty funktioiden ulkopuolella, koska samoja vakioita käytetään useammassa funktiossa.

import random

# Maaritellaan vakioita, joiden avulla on helppo kasitella tietokoneen
# ja kayttajan valintoja seka pelin voittajaa.

KIVI = 1
SAKSET = 2
PAPERI = 3
VALINNAT = ["tyhja", "kivi", "sakset", "paperi"]
VALINTA_LKM = 3
TIETOKONE = -1
PELAAJA = 1
TASAPELI = 0

# Funktio alustaa tietokoneen arpomisessa kayttaman 
# satunnaislukugeneraattorin kayttajan antamalla luvulla.

def tee_alustus():
    print "Tervetuloa pelaamaan kivi-sakset-paperi-pelia."
    rivi = raw_input("Anna siemenluku tietokoneen arpomista varten.\n")
    siemenluku = int(rivi)
    random.seed(siemenluku)
    

# Funktio arpoo ja palauttaa tietokoneen valinnan (kivi, sakset tai 
# paperi) satunnaislukugeneraattorin avulla.

def arvo_tietokoneen_valinta():
    return random.randint(1, VALINTA_LKM)

# 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 tee_alustus. Tämän jälkeen pääohjelma kutsuu funktioita arvo_tietokoneen_valinta, pyyda_kayttajan_valinta ja valitse_voittaja sekä tulostaa voittajan tai tiedon tasapelistä niin kauan, että peli on ratkennut. (Katso tarkemmin esimerkkiajosta.)

Ole tarkka siitä, että ohjelmasi tulostus on täsmälleen (välimerkkejä myöten) alla olevan mallin mukainen. Palauta Gobliniin tiedosto kivipeli.py. Kuten funktioiden kuvauksessa on kerrottu, ohjelman pitää pyytää käyttäjältä uutta syötettä, jos tämä valitsee esinettä valitessaan jonkun muun kokonaisluvun kuin 1, 2 tai 3. Sen sijaan ohjelman ei tarvitse varautua siihen, että käyttäjä antaa esimerkiksi desimaaliluvun tai muuten sopimattoman syötteen.

Esimerkkejä ohjelman suorituksesta:

[ohjelman suoritus alkaa]
Tervetuloa pelaamaan kivi-sakset-paperi-pelia.
Anna siemenluku tietokoneen arpomista varten.
5
Valitse joku seuraavista:
1 = KIVI
2 = SAKSET
3 = PAPERI
Anna valintasi.
1
Tietokoneen valinta oli sakset
Sinun valintasi oli kivi
Sina voitit!
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Tervetuloa pelaamaan kivi-sakset-paperi-pelia.
Anna siemenluku tietokoneen arpomista varten.
5
Valitse joku seuraavista:
1 = KIVI
2 = SAKSET
3 = PAPERI
Anna valintasi.
3
Tietokoneen valinta oli sakset
Sinun valintasi oli paperi
Tietokone voitti!
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Tervetuloa pelaamaan kivi-sakset-paperi-pelia.
Anna siemenluku tietokoneen arpomista varten.
101
Valitse joku seuraavista:
1 = KIVI
2 = SAKSET
3 = PAPERI
Anna valintasi.
2
Tietokoneen valinta oli sakset
Sinun valintasi oli sakset
Peli ei viela ratkennut, yrita uudelleen.
Valitse joku seuraavista:
1 = KIVI
2 = SAKSET
3 = PAPERI
Anna valintasi.
1
Tietokoneen valinta oli kivi
Sinun valintasi oli kivi
Peli ei viela ratkennut, yrita uudelleen.
Valitse joku seuraavista:
1 = KIVI
2 = SAKSET
3 = PAPERI
Anna valintasi.
2
Tietokoneen valinta oli paperi
Sinun valintasi oli sakset
Sina voitit!
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Tervetuloa pelaamaan kivi-sakset-paperi-pelia.
Anna siemenluku tietokoneen arpomista varten.
79
Valitse joku seuraavista:
1 = KIVI
2 = SAKSET
3 = PAPERI
Anna valintasi.
7
Anna valintasi.
-1
Anna valintasi.
11
Anna valintasi.
4
Anna valintasi.
3
Tietokoneen valinta oli kivi
Sinun valintasi oli paperi
Sina voitit!
[ohjelman suoritus päättyy]

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