## 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 ```