Mathballs
unknown
ruby
4 years ago
5.0 kB
6
Indexable
# U vežbi obrađeno: if, petlje 'for' i 'while', metode (funkcije), # klase, 'require', rečnici (hashes), liste i "random" brojevi # Moduli require 'io/console' # Funkcije i klase #Funkcija za brisanje ekrana def brisanje system "clear" end # Funkcija koja čeka unos da bi se nastavilo sa izvršavanjem programa def press_to_continue print "Pritisnite bilo koje dugme za nastavak." STDIN.getch end # Funkcija koja izvršava update liste kuglica def baratanje_kuglicama(kuglice) for kuglica in kuglice redni_broj = kuglice.find_index(kuglica) + 1 vrednost_kuglice = kuglica.broj boja_kuglice = kuglica.boja print "Redni broj kuglice: " puts redni_broj print "Vrednost kuglice: " puts vrednost_kuglice print "Boja kuglice: " puts boja_kuglice puts " " end end # Klasa koja određuje težinu opne za kuglicu class Opna def initialize @tezina = 10 end attr_accessor :tezina end # Klasa koja "pravi" kuglice class Kuglica < Opna def initialize(broj, boja) super() @broj = broj @boja = boja end attr_accessor :broj, :boja end # Klasa koja pravi igračev profil za tabelu class Igrac def initialize(ime, rezultat) @ime = ime @rezultat = rezultat end def ubacivanje_u_tabelu puts "Rezultat je ubačen u tabelu." end attr_accessor :ime, :rezultat end # Brisanje ekrana brisanje # Uputstvo za igru puts " Svaki igrač izvlači šest kuglica, od kojih je svaka teška 10 grama,\n ima svoju vrednost i boju. Igrač ima pravo da odbaci maksimalno do četiri\n kuglice, a vrednost preostalih kuglica se deli sa njihovom ukupnom težinom,\n pa se tako dobija magični broj. Ako su sve zadržane kuglice iste boje,\n igrač dobija bonus - vrednost se množi sa ukupnim brojem kuglica.\n Igrač sa najvećim magičnim brojem je pobednik.\n\n" print " " press_to_continue brisanje # Lista boja za kuglice i novi hash za tabelu igrača igraci = {} boje = ['crvena', 'zelena', 'plava'] # Broj igrača puts"Broj igrača: " broj = gets broj_igraca = broj.to_i redni_broj_igraca = 1 #Izvlačenje koje se ponavlja za svakog igrača while broj_igraca > 0 puts "Ime igrača broj " + redni_broj_igraca.to_s + ":" ime_igraca = gets ime_igraca = ime_igraca.chomp brojevi = [] # Prazna lista za brojeve while brojevi.length() < 6 # Izvlačenje brojeva broj = rand(1..36) if brojevi.include?(broj) == false #Proverava da li je broj već izvučen brojevi << broj # Ako nije, dodaje se u listu brojeva else nil end end kuglice = [] #Lista kuglica koja treba da se popuni brojac = 0 while brojac < 6 # Šest izvučenih brojeva se pridružuje kuglicama kuglica = Kuglica.new(brojevi[brojac], boje.sample(1)) kuglice << kuglica brojac += 1 end # Poziva funkciju koja vrsi apdejt liste kuglica baratanje_kuglicama(kuglice) #Izbacivanje kuglica koje igrač ne želi mogucnosti = [0, 1, 2, 3, 4] za_izbacivanje = nil while mogucnosti.include?(za_izbacivanje) == false puts "Koliko kuglica želite da izbacite? (0 - 4)" broj = gets za_izbacivanje = broj.to_i end while za_izbacivanje != 0 puts "Kuglica koju želite da izbacite: " izbor = gets loptica = izbor.to_i kuglice.delete_at(loptica - 1) baratanje_kuglicama(kuglice) za_izbacivanje -= 1 end # Program sakuplja boje svih kuglica i proverava da li su sve iste # boje, tj. da li postoji uslov za bonus pregled_boja = [] for kuglica in kuglice pregled_boja << kuglica.boja end if pregled_boja.count(pregled_boja[0]) == kuglice.length() bonus = kuglice.length # Ako se broj ponavljanja prve boje na listi else # poklapa sa dužinom liste boja, znači da su bonus = 1 # sve kuglice iste boje i igrač dobija bonus end # koji je jednak dužini liste tj. broju kuglica # Računanje zbira vrednosti izabranih kuglica zbir = 0 for kuglica in kuglice zbir += kuglica.broj end puts "Vrednost kuglica je " + zbir.to_s + "." # Izračunavanje težine izabranih kuglica tezina = 0 for kuglica in kuglice tezina += kuglica.tezina end puts "Težina je: " + tezina.to_s + " grama." puts "Bonus iznosi: " + bonus.to_s # Izračunava igračev rezultat, pravi profil igrača i dodaje # rezultat u tabelu rezultat = (zbir.to_f / tezina) * bonus igrac = Igrac.new(ime_igraca, rezultat) igraci[igrac.ime] = igrac.rezultat puts "Magični broj je: " + rezultat.to_s igrac.ubacivanje_u_tabelu broj_igraca -= 1 redni_broj_igraca += 1 press_to_continue brisanje end # Sortira hash i pravi listu listi koje sadrže ime i rezultat igrača, # pa određuje pobednika i ispisuje njegovo ime i rezultat tabela = igraci.sort_by {|_key, value| value}.reverse puts " " for element in tabela puts "Igrač: " + element[0] + " Magični broj: " + element[1].to_s end pobednik = tabela[0] ime_pobednika = pobednik[0] rezultat_pobednika = pobednik[1] puts "Pobednik je " + ime_pobednika + "."
Editor is loading...