Mathballs
unknown
ruby
4 years ago
5.0 kB
9
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...