|
|
- ## 5 Torakka-Jalka-Ydinpommi
-
- **Tehtävä:**
-
- Luvun viimeinen tehtävä on luoda klassinen Torakka-Jalka-Ydinpommi-peli tietokoneelle. Pelin säännöt on yksinkertaiset; pelaaja ja tietokone valitsevat joko torakan, jalan tai ydinpommin. Jalka voittaa torakan, ydinpommi voittaa jalan ja torakka voittaa ydinpommin. Kyseessä ei siis ole todellakaan kivi-paperi-sakset-tyylinen peli.
-
- Joka kierroksen alussa pelaaja voi valita jonkin kolmesta vaihtoehdosta syötteellä "1: Torakka 2: Jalka 3: Ydinpommi 4: lopeta", "Valitse (1-4):". Tämän jälkeen tietokone valitsee omansa arpomalla satunnaisen vaihtoehdon. Tämän jälkeen tulostetaan tilanne "Valitsit [valinta], tietokone valitsi [valinta].", sekä lopputulos "Tietokone voitti.", "Voitit!" tai "Valitsitte saman, tasapeli.". Kierroksen lopuksi vielä tulostetaan tilanne muodossa "Peli on pelaaja [pelaajan voittamat kierrokset] : tietokone [tietokoneen voittamat kierrokset]"
-
- Tavallisuudesta poiketen tässä tehtävässä siis tarvitaan seuraavan luvun toistorakenteita ratkaisun toteuttamiseen, joten mikäli tehtävä tuntuu tässä vaiheessa vaikealta, kannattaa tähän tehtävään palata seuraavan luvun päätteeksi.
-
- Toimiessaan oikein erä tietokonetta vastaan voi olla vaikka seuraavanlainen:
-
- Example output:
-
- ```
- 1: Torakka 2: Jalka 3: Ydinpommi 4: lopeta
- Valitse (1-4):
- 3
- Valitsit ydinpommin, tietokone valitsi torakan.
- Tietokone voitti.
- Peli on pelaaja 0 : tietokone 1
- 1: Torakka 2: Jalka 3: Ydinpommi 4: lopeta
- Valitse (1-4):
- 4
- ```
-
- **Vastaus**
-
- ```
- #!/usr/bin/env ruby
- # coding: utf-8
-
- def peli(voitot=0, tasapelit=0, haviot=0)
-
- valintaMap = {
- 1 => "torakan",
- 2 => "jalan",
- 3 => "ydinpommin"
- }
-
- loop do
- printf("1: Torakka 2: Jalka 3: Ydinpommi 4: lopeta\nValitse (1-4):\n")
-
- begin
- valintaUser = Integer(gets.chomp)
- if valintaUser < 1 || valintaUser > 4
- throw ArgumentError
- end
- rescue ArgumentError
- warn "Valintasi ei ole kelvollinen kokonaisluku"
- retry
- end
-
- arpalukuAI = rand(1..3)
-
- if valintaUser == 4
- Process.exit(0)
- end
-
- valintaMap.each do |key, value|
-
- if key == valintaUser
-
- if key != arpalukuAI
- printf("Valitsit " + value + ", tietokone valitsi " + valintaMap[arpalukuAI] + ".\n")
- end
-
- if ((key == 2 and arpalukuAI == 1) or
- (key == 3 and arpalukuAI == 2) or
- (key == 1 and arpalukuAI == 3))
- voitot += 1
- printf("Voitit!\n")
- elsif key == arpalukuAI
- tasapelit += 1
- printf("Valitsitte saman, tasapeli.\n")
- else
- haviot += 1
- printf("Tietokone voitti.\n")
- end
-
- break
- end
- end
- printf("Peli on pelaaja " + voitot.to_s + " : " + "tietokone " + haviot.to_s + "\n")
- end
- end
-
- peli
- ```
|