Rästitehtävä 1

Tikkupeli (300 p)

Tällä rästitehtävällä voit korvata yhden kierroksista 1, 2 tai 3. Jos sinulta puuttuu minimipisteet kahdelta näistä kierroksista, sinun pitää tehdä sekä tämä tehtävä että rästitehtävä 2 tai 3. Jos sinulta puuttuu minimipisteet kaikilta näiltä kierroksilta, tee rästitehtävät 1, 2 ja 3. Jotta rästitehtävä korvaisi tehtäväkierroksen, siitä on saatava vähintään 250 pistettä. Vaikka saisit tehtävästä enemmän pisteitä, niin harjoitustehtäväarvosanaa määrättäessä tällä tehtävällä korvatun kierroksen pistemääräksi lasketaan kuitenkin vain korvattavan kierroksen minimipistemäärä.

Tee Eclipseen uusi projekti, jonka nimi on tehtava10_1. Luo sitten tähän projektiin moduuli tikkupeli ja kirjoita siihen ohjelma, joka pelaa käyttäjän kanssa tikkupeliä. Pelin tarkempi kuvaus on alla.

Tikkupelissä aloitetaan sillä, että pöydällä on 20-40 tikkua. (Käyttäjä saa valita tikkujen aloitusmäärän tältä väliltä.) Tietokone ja käyttäjä ottavat pöydältä vuorollaan 1-3 tikkua (korkeintaan kuitenkin niin monta kuin tikkuja on jäljellä). Häviäjä on se, joka joutuu ottamaan viimeisen tikun.

Ennen pelin aloittamista ohjelma tulostaa käyttäjälle lyhyet peliohjeet ja kysyy käyttäjältä tikkujen aloitusmäärän. Jos käyttäjän antama luku ei ole välillä 20-40, ohjelma kysyy käyttäjältä uutta lukua niin kauan, kunnes käyttäjä antaa oikealla välillä olevan luvun. Tämän jälkeen ohjelma kysyy, kumpi aloittaa pelin. Jos vastaus on "kayttaja" (vastauksessa saa käyttää myös isoja kirjaimia), käyttäjä aloittaa pelin. Kaikissa muissa tapauksissa tietokone aloittaa pelin.

Kunkin pelivuoron alussa ohjelma ensin tulostaa, kuinka monta tikkua on jäljellä. Jos vuoro on tietokoneella, ohjelma tulostaa tämän jälkeen, kuinka monta tikkua tietokone otti. Jos vuoro on käyttäjällä, ohjelma kysyy otettavien tikkujen määrän. Jos käyttäjän antama määrä ei ole välillä 1-3 tai on suurempi kuin tikkuja on jäljellä, ohjelma tulostaa "Laiton maara tikkuja. Havisit!" Siinä tapauksessa ohjelma päättyy. Muussa tapauksessa vuoro siirtyy tikkujen ottamisen jälkeen toiselle pelaajalle, jos tikkuja on vielä jäljellä.

Kun jäljellä olevien tikkujen määrä on joko käyttäjän tai tietokoneen pelivuoron jälkeen 0, ohjelma tulostaa joko "Onnittelut, voitit pelin!" tai "Otit viimeisen tikun. Tietokone voitti." sen mukaan, kumpi pelaajista voitti pelin.

Kirjoita ohjelma siten, että tietokone pyrkii valitsemaan ottamiensa tikkujen määrän niin, että sen vuoron jälkeen jää jäljelle aina 4 * N + 1 tikkua, missä N on jokin ei-negatiivinen kokonaisluku. Jos tietokone onnistuu tässä kerran pelin aikana, pystyy se sen jälkeen voittamaan pelin jatkamalla samaa strategiaa. Huomaa, että kerralla saa kuitenkin ottaa korkeintaan 3 tikkua ja on pakko ottaa vähintään yksi tikku. Sen vuoksi tietokone ei pysty valitsemaan otettavien tikkujen määrää ym. tavalla, jos sen vuoron alussa tikkujen määrä on 4 * N + 1. Siinä tapauksessa tietokone ottaa aina vuorollaan yhden tikun (ja toivoo käyttäjän valitsevan omalla vuorollaan jonkin muun määrän kuin 3 tikkua, jolloin tietokone pystyisi valitsemaan seuraavalla kerralla optimaalisen tikkujen määrän).

Ohjelman ei tarvitse varautua siihen, että käyttäjä lukua pyydettäessä antaa jotain muuta kuin kokonaisluvun. Testaa ohjelmaasi useita kertoja ajamalla sitä itse ennen tehtävän palautusta. Palauta Gobliniin tiedosto tikkupeli.py.

Esimerkkejä ohjelman suorituksesta:

[ohjelman suoritus alkaa]
Tervetuloa pelaamaan tikkupelia.
Saat ottaa kerralla 1-3 tikkua, korkeintaan kuitenkin niin paljon kuin
tikkuja on jaljella. Viimeisen tikun ottaja haviaa pelin.
Monellako tikulla aloitetaan (20-40)?
19
Monellako tikulla aloitetaan (20-40)?
41
Monellako tikulla aloitetaan (20-40)?
20
Valitse aloittaja (tietokone/kayttaja).
Kayttaja
Tikkuja on jaljella 20 kpl.
Montako tikkua haluat ottaa?
2
Tikkuja on jaljella 18 kpl.
Otin 1 tikkua.
Tikkuja on jaljella 17 kpl.
Montako tikkua haluat ottaa?
3
Tikkuja on jaljella 14 kpl.
Otin 1 tikkua.
Tikkuja on jaljella 13 kpl.
Montako tikkua haluat ottaa?
1
Tikkuja on jaljella 12 kpl.
Otin 3 tikkua.
Tikkuja on jaljella 9 kpl.
Montako tikkua haluat ottaa?
2
Tikkuja on jaljella 7 kpl.
Otin 2 tikkua.
Tikkuja on jaljella 5 kpl.
Montako tikkua haluat ottaa?
2
Tikkuja on jaljella 3 kpl.
Otin 2 tikkua.
Tikkuja on jaljella 1 kpl.
Montako tikkua haluat ottaa?
1
Tikkuja on jaljella 0 kpl.
Otit viimeisen tikun. Tietokone voitti.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Tervetuloa pelaamaan tikkupelia.
Saat ottaa kerralla 1-3 tikkua, korkeintaan kuitenkin niin paljon kuin
tikkuja on jaljella. Viimeisen tikun ottaja haviaa pelin.
Monellako tikulla aloitetaan (20-40)?
21
Valitse aloittaja (tietokone/kayttaja).
tietokone
Tikkuja on jaljella 21 kpl.
Otin 1 tikkua.
Tikkuja on jaljella 20 kpl.
Montako tikkua haluat ottaa?
3
Tikkuja on jaljella 17 kpl.
Otin 1 tikkua.
Tikkuja on jaljella 16 kpl.
Montako tikkua haluat ottaa?
3
Tikkuja on jaljella 13 kpl.
Otin 1 tikkua.
Tikkuja on jaljella 12 kpl.
Montako tikkua haluat ottaa?
3
Tikkuja on jaljella 9 kpl.
Otin 1 tikkua.
Tikkuja on jaljella 8 kpl.
Montako tikkua haluat ottaa?
3
Tikkuja on jaljella 5 kpl.
Otin 1 tikkua.
Tikkuja on jaljella 4 kpl.
Montako tikkua haluat ottaa?
3
Tikkuja on jaljella 1 kpl.
Otin 1 tikkua.
Tikkuja on jaljella 0 kpl.
Onnittelut, voitit pelin!
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Tervetuloa pelaamaan tikkupelia.
Saat ottaa kerralla 1-3 tikkua, korkeintaan kuitenkin niin paljon kuin
tikkuja on jaljella. Viimeisen tikun ottaja haviaa pelin.
Monellako tikulla aloitetaan (20-40)?
25
Valitse aloittaja (tietokone/kayttaja).
Tietokone
Tikkuja on jaljella 25 kpl.
Otin 1 tikkua.
Tikkuja on jaljella 24 kpl.
Montako tikkua haluat ottaa?
1
Tikkuja on jaljella 23 kpl.
Otin 2 tikkua.
Tikkuja on jaljella 21 kpl.
Montako tikkua haluat ottaa?
4
Laiton maara tikkuja. Havisit!
[ohjelman suoritus päättyy]

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