Bacanje kockica u Pythonu

Pozdrav svima!
U ovo vrijeme kada smo svi zatvoreni u svojim domovima, stalno tražimo nove načine kako se zabaviti i ispuniti vrijeme. Mi ćemo vam dati jednu ideju kako se zabaviti i nešto novo naučiti. Napravit ćemo program u Pythonu koji će bacati kockice umjesto nas.

Sljedeći puta kada budete igrali Čovječe ne ljuti se, Monopol, Rizik ili bilo koju društvenu igru koja koristi kockice, možete koristiti program koji ćete danas napisati. Još jedna stvar… Nakon što napišemo program za bacanje kockica onda ćemo napraviti i igru koja se igra samo s kockicama. Idemo na posao! 🙂

Sve programe ćemo pisati na stranici https://trinket.io/. Možete otići na stranicu, obrisati primjer koji je tamo i početi pisati. Ili, možete koristiti ovaj prozor ispod i u njega pisati. Ako kliknete na play ispod, možete vidjeti kako ćete programirati u tom prozoru. Obrišite ovo što je sada napisano i svakako sačuvajte što napravite nakon svakog zadatka! Kliknite na zadnji trokut u alatnoj traci i imate opciju Download.

Za početak, moramo se podsjetiti kako rade funkcije. Ako se sjećate, funkcija je dio programa koji smo odvojili od glavnog programa jer tvori jednu smislenu cjelinu koju bismo mogli koristiti više puta. Što to znači? Idemo se podsjetiti pomoću jednostavnog primjera funkcije koja treba primiti 2 broja i zbrojiti ih.

Korisnik u glavnom programu unosi dva broja. Vrijednost prvog broja se pridjeli varijabli x, a vrijednost drugog broja varijabli y. Zatim, pozivamo funkciju zbroji_dva_broja i predajemo joj varijable x i y. U definiciji funkcije vidimo da ona prima dva argumenta koji se zovu a i b. Kako je to sada moguće?

Zamislite da radite na šalteru u banci i morate zbrojiti dvije novčanice koje sam netko daje – znači da ste vi funkcija za zbrajanje. Ono što vi dobivate su novac i ono što dajete je rezultat zbrajanja. Baš kao naša funkcija. Ako netko dođe i kaže: “Izvolite pare”, što biste mu rekli? Vi primate novac, ali ne pare, zar ne? Vidite da zapravo nije važno kako se varijabla zove prije ulaza u funkciju, bitno je samo da funkcija primi onoliko ulaza koliko piše u definiciji. Kada “pare” dođu kod vas, onda se zovu “novac”. Isto kao što se x zove a kada dođe u funkciju zbroji_dva_broja.

Na kraju, samo ćemo isprintati rezultat našeg zbrajanja kako bi korisnik programa vidio koji je zbroj dva unesena broja.

# Funkcija koja zbraja 2 broja. Čita brojeve koje joj šaljemo i vraća zbroj 2 broja.
def zbroji_dva_broja(a, b):
  return a + b

# Korisnik unosi 2 broja.
x = int(input("Unesi prvi broj:"))
y = int(input("Unesi drugi broj:"))

# Pozivamo funkciju i šaljemo joj x i y.
rezultat = zbroji_dva_broja(x, y)

# Prikaz rezultat zbrajanja.
print ("Rezultat zbrajanja je " + str(rezultat))

Sada kada smo ponovili što su funkcije i kako se koriste, vratimo se našem programu s kockicama. Kao što vidimo na primjeru ispod, moramo definirati dvije varijable min max koje govore koji je minimalni i maksimalni broj koji možemo dobiti kada bacamo kockicu. Za dobivanje broja između 1 i 6 koristit ćemo funkciju random. Njoj moramo poslati raspon unutar kojeg treba tražiti nasumični broj. To znači da joj pošaljemo naše min max, a ona će vratiti neki broj koji je između min max, uključujući i njih. Idemo prvi primjer riješiti zajedno, a onda slijedi jedan zadatak za vas. 🙂

# Učitavamo gotovu funkciju za traženje nasumičnih brojeva koja postoji u Pythonu.
from random import randint

# Definiramo koji su min i max brojevi koje možemo dobiti kada bacamo kockicu.
najmanja_vrijednost = 1
najveca_vrijednost = 6

print ("Bacamo...")
print ("Dobili smo:")
print (randint(najmanja_vrijednost,najveca_vrijednost)) # pozivamo funkciju randint i prikazujemo rezultat

Zadatak 1.
Dodajte u program da se baci još jedna kockica. Nakon što pokrenemo program, trebamo dobiti 2 broja, ispisana jedan ispod drugog.

Nakon što ste riješili zadatak, idemo dalje. Sada ćemo raditi na tome da nas program pita želimo li opet bacati kockice i dok god mi govorimo da želimo, on i dalje baca i daje nam rezultat. Za to bismo mogli koristiti novu varijablu koju zovemo bacaj. Na početku, nju ćemo postaviti na da bude jednaka da i onda dok god mi unosimo na kraju bacanja da želimo ponovno bacati, dobivat ćemo rezultate. Kada upišemo bilo što drugo, bacanje će prestati.

from random import randint

najmanja_vrijednost = 1
najveca_vrijednost = 6
bacaj = "da" # varijabla koja nam govori trebamo li bacati kockicu

# Dok god je varijabla bacaj jednaka da, bacamo dalje.
while (bacaj == "da"):
  print ("Bacamo...")
  print ("Dobili smo:")
  print (randint(najmanja_vrijednost,najveca_vrijednost))
  
  # Pitamo korisnika hoće li ponovno bacati i vraćamo se na provjeru uvjeta while petlje
  bacaj = input("Hoćemo li ponovno bacati?")
  
print ("Bacanje gotovo.") # reci korisniku kada smo završili s bacanjem

Zadatak 2.
Dodajte u program da se baci još dvije kockice. Nakon što pokrenemo program, trebamo dobiti 4 broja, ispisana jedan ispod drugog.

Nakon što završimo 2. zadatak, vidimo da nam nije zgodno svaki puta dodavati kockice i da bi bilo bolje kada bismo mogli na početku programa reći koliko kockica želimo i da program onda na temelju toga baci koliko god kockica treba. Kako bismo to mogli napraviti? Morat ćemo dodati input na početku programa i novu varijablu koja će biti jednaka broju koji upišemo.

I što onda? Kako ćemo u while petlji ispisati brojeve za sve kockice? Pa budući da broj kockica znamo jer smo ga unijeli na početku, možemo to napraviti koristeći for petlju.

Vidimo se u for petlji pojavljuje jedna veća linija koja se sastoji od nekoliko stvari u print funkciji. Što radimo tu? Kada želimo broj spojiti s tekstom, onda moramo prvo broj pretvoriti u tekst. Za to koristimo funkciju str(broj) i onda možemo samo zbrojiti dva teksta. Isto radimo i s rezultatom funkcije randint. Ovo zna biti malo zbunjujuće, ali pokušajte maknuti poziv funkcije str i pogledajte koju grešku vam izbacuje. Igrajte se s tim ispisom, tako ćete najbolje naučiti. 

from random import randint

najmanja_vrijednost = 1
najveca_vrijednost = 6
bacaj = "da"
broj_kockica = int(input("Unesi broj kockica potrebnih za igru:"))

# Dok god je varijabla bacaj jednaka da, bacamo dalje.
while (bacaj == "da"):
  print ("Bacamo...")
  print ("Dobili smo:")
  # Za svaku kockicu provjerimo koliko smo dobili i pokažemo korisniku.
  for kockica in range(1, broj_kockica + 1):
    print (str(kockica) + ". kocka: " + str(randint(najmanja_vrijednost,najveca_vrijednost)))
  
  # Pitamo korisnika hoće li ponovno bacati i vraćamo se na provjeru uvjeta while petlje
  bacaj = input("Hoćemo li ponovno bacati?")
  
print ("Bacanje gotovo.") # reci korisniku kada smo završili s bacanjem

Zadatak 3.
Možete li sada dodati da se na početku, uz broj kockica, upiše i broj igrača i da se onda kockice bace za sve igrače? Mala pomoć, opet ćemo morati koristiti for petlju, ali pitanje je gdje i kako. 🙂

Pokušajte napraviti sami, a ako ne znate ili niste sigurni napišite u komentar ili pošaljite mail pa ćemo vam pomoći. Ovaj zadatak će nam biti uvod u sljedeći tjedan kada ćemo ovo sve koristiti da napravimo prvu igru s kockicama.

Čitamo se uskoro s novim zadatcima i prvom igrom s kockicama. Do tada, čuvajte se i bude vrijedni! 🙂 

Leave a Comment

Vaša adresa e-pošte neće biti objavljena. Obavezna polja su označena sa *