Mathballs

mail@pastecode.io avatar
unknown
ruby
3 years ago
5.0 kB
3
Indexable
Never
# 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 + "."