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