Ruby fundamentals through coding exercises
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

89 lines
3.0 KiB

4 years ago
  1. ## 5 Torakka-Jalka-Ydinpommi
  2. **Tehtävä:**
  3. 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.
  4. 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]"
  5. 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.
  6. Toimiessaan oikein erä tietokonetta vastaan voi olla vaikka seuraavanlainen:
  7. Example output:
  8. ```
  9. 1: Torakka 2: Jalka 3: Ydinpommi 4: lopeta
  10. Valitse (1-4):
  11. 3
  12. Valitsit ydinpommin, tietokone valitsi torakan.
  13. Tietokone voitti.
  14. Peli on pelaaja 0 : tietokone 1
  15. 1: Torakka 2: Jalka 3: Ydinpommi 4: lopeta
  16. Valitse (1-4):
  17. 4
  18. ```
  19. **Vastaus**
  20. ```
  21. #!/usr/bin/env ruby
  22. # coding: utf-8
  23. def peli(voitot=0, tasapelit=0, haviot=0)
  24. valintaMap = {
  25. 1 => "torakan",
  26. 2 => "jalan",
  27. 3 => "ydinpommin"
  28. }
  29. loop do
  30. printf("1: Torakka 2: Jalka 3: Ydinpommi 4: lopeta\nValitse (1-4):\n")
  31. begin
  32. valintaUser = Integer(gets.chomp)
  33. if valintaUser < 1 || valintaUser > 4
  34. throw ArgumentError
  35. end
  36. rescue ArgumentError
  37. warn "Valintasi ei ole kelvollinen kokonaisluku"
  38. retry
  39. end
  40. arpalukuAI = rand(1..3)
  41. if valintaUser == 4
  42. Process.exit(0)
  43. end
  44. valintaMap.each do |key, value|
  45. if key == valintaUser
  46. if key != arpalukuAI
  47. printf("Valitsit " + value + ", tietokone valitsi " + valintaMap[arpalukuAI] + ".\n")
  48. end
  49. if ((key == 2 and arpalukuAI == 1) or
  50. (key == 3 and arpalukuAI == 2) or
  51. (key == 1 and arpalukuAI == 3))
  52. voitot += 1
  53. printf("Voitit!\n")
  54. elsif key == arpalukuAI
  55. tasapelit += 1
  56. printf("Valitsitte saman, tasapeli.\n")
  57. else
  58. haviot += 1
  59. printf("Tietokone voitti.\n")
  60. end
  61. break
  62. end
  63. end
  64. printf("Peli on pelaaja " + voitot.to_s + " : " + "tietokone " + haviot.to_s + "\n")
  65. end
  66. end
  67. peli
  68. ```