OO2/Lab 3 2021
< ОО2
Pređi na navigaciju
Pređi na pretragu
V1
V2
Generator slučajnih celih brojeva generiše slučajne cele brojeve na zahtev. Moguće je zahtevati jedan slučajan ceo brojili niz od n elemenatau zadatom opsegu donje i gornje granice. Zadate granice su inkluzivne.- Generator jedinstvenih celih brojeva je generator koji generiše niz sa jedinstvenim brojevima pomoću heš seta(
HashSet
). Polje je platno (Canvas) koje se stvara sa zadatom dvodimenzionom mrežom (videti niže) kojoj pripada i zadatom celobrojnom vrednošću (broj) koja predstavlja natpis (labelu) na polju i koja može da se dohvati. Polje može imati jedan od sledećih statusa:SLOBODNO
,IZABRANO
,OZNACENO
,POGODJENO
iPROMASENO
,koji se može postaviti i dohvatiti. Podrazumevano, polje ima statusPolje statusaSLOBODNO
, a širina i visina su mu 75 piksela, boja pozadine mu je narandžasta, a broj je ispisan crnom bojom na sredini polja i zauzima jednu trećinu manje dimenzije polja (potrebno je obezbediti promenu veličine sadržaja polja pri promeni veličine prozora). Polje statusaIZABRANO
unutar celog polja iscrtava elipsu popunjenu plavom bojom, a broj je ispisan belom bojom.OZNACENO
unutar celog polja iscrtava elipsu popunjenu belom bojom, a broj je ispisan crnom bojom. Polje statusaPOGODJENO
unutar celog polja iscrtava elipsu popunjenu zelenom bojom, a broj je ispisan crnom bojom. Polje statusaPROMASENO
unutar celog polja iscrtava elipsu popunjenu crvenom bojom, a broj je ispisan crnom bojom.Klikom levog tastera miša na polje menja se njegov status (ukoliko je status polja SLOBODNO ono postaje IZABRANO i obrnuto) i polje prosleđuje mreži informaciju da se njegov status promenio.Mreža je panel koji sadrži pravougaonu matricu polja i listu (Moguće je zaključati polja mreže, čime ta polja ne reaguju na pritiske miša. Moguće je promeniti poljima čiji se brojevi nalaze u zadatoj listi status naArrayList
) polja koja imaju statusIZABRANO
i koja može da se dohvati. Stvara se sa zadatim celobrojnim dimenzijama (podrazumevano 4 h 5) i igrom (videti niže) kojoj pripada. Prilikom stvaranja mreže, polja se dodaju u mrežu redom po vrstama, pri čemu se poljima zadaju sukcesivne celobrojne vrednosti, a numeracija kreće od vrednosti 0. Polja su razmaknuta jedna od drugih za 3 piksela, a boja pozadine mreže je crna, tako da se postigne efekat polja raspoređenih u mreži. Moguće je dohvatiti skup (HashSet
) koji čine svi celi brojevi polja mreže sa statusomIZABRANO
. Promenom statusa nekog njenog polja, mreža ažurira listu polja sa statusomIZABRANO
i prosleđuje igri informaciju da je polje promenilo status.IZABRANO
, dok se ostalima menja naSLOBODNO
.- Aktivan rulet je klasa koja animira izbor brojeva. Stvara se sa zadatom mrežom. Sadrži niz brojeva polja koja se animiraju koji se nasumično generišu i ne moraju biti jedinstveni. Veličina niza je slučajno generisana vrednost između 30% i 70% veličine mreže. Može se dohvatiti poslednji animirani broj, čime se pozivajuća nit blokira ukoliko rulet nije završio (ovo služi samo za proveru pogodtka broja). Animacija treba biti sledeća za svaki član niza: počinje tako što se polje koje predstavlja taj član niza postavi na status
OZNACENO
, zatim se čeka određeno vreme čekanja (inicijalno 200ms, a svake sledeće iteracije se povećava 10%) i zatim vratiti prethodni status polju. - Aktivno izvlačenje je klasa koja izvlači broj s ruleta. Stvara se sa zadatom igrom i brojem rundi. Potrebno je implementirati tako da pri pokretanju ova klasa ponovi isti ciklus koliko ima rundi. Ciklus se sastoji od toga da pokrene rulet, pokupi s ruleta poslednji animirani broj i obavesti igru da je izvučen broj. Ako je broj koji je izvučen bi izabran, potrebno je postaviti status tog polja na
POGODJENO
u suprotnom status jePROMASENO
. Zatim treba čekati 1000ms posle čega treba povratiti stari status polja. Dok traje izvlačenje, nije moguće birati polja, odnosno mreža treba biti onemogućena. Moguće je dohvatiti trenutni broj runde, kao i ukupan broj rundi. - Istorija izvlačenja je panel koji sadrži listu stavki (videti sliku) i stvara se sa maksimalnim kapacitetom. Stavke su objekti klase
TextArea
bez vertikalnog i horizontalnog skrol bara. Moguće je dodati stavku. U slučaju da se dodaje stavka koja bi prešla maksimalni kapacitet, potrebno je izbaciti najraniju stavku. Stavka treba da sadrži broj runde, izvučen broj, ulog i dobitak. Igra je glavni prozor aplikacije (sa slike) koji sadrži jednu mrežu podrazumevane veličine(u centru),koja može da se dohvati,jedan panel za istoriju izvlačenja (sa leve strane),jedan panel za upravljanje(sa desne strane)i statusnu traku (na dnu). Igru je moguće započeti samo ukoliko se izabere barem jedno polje. Ulog ima podrazumevanu vrednost 100.Broj rundi ima podrazumevanu vrednost 4.Izborom polja (promenom njegovog statusa) ili izmenom vrednosti uloga vrši se ažuriranje vrednosti kvote i dobitka koji se prikazuju u prozoru aplikacije. Vrednost kvote se računa kao količnik ukupnog broja polja i broja polja sa statusompokreće izvlačenje.IZABRANO
. Vrednost dobitka se računa kao proizvod kvote i uloga. Igra se započinje klikom na dugmeIgraj
nakon čega seGenerisani broj ispisuje se u statusnoj traci na dnu prozora, koja se boji zelenom bojom ukoliko je generisani broj jedan od brojeva na izabranim poljima mreže (broj je pogođen), odnosno crvenom bojom u suprotnom (broj je promašen). Ukoliko je generisani broj pogođen, vrši se dodavanje vrednosti dobitka na vrednost balansa, dok se, ukoliko je broj promašen, vrši oduzimanje vrednosti uloga od vrednosti balansa.Bez obzira na pogodak, sa balansa se dodatno oduzima vrednost uloga.Inicijalna vrednost balansa je 0. Inicijalno, boja statusne trake je tamno-siva.Glavni prozor sadrži meni sa opcijamaPar
(bira sve parne brojeve mreže),Nepar
(bira sve neparne brojeve mreže),Pola
(izabere nasumično pola mreže) i opcijuBrisi
koja svim poljima stavlja statusSLOBODNO
. Treba onemogućiti ove opcije dok traje proces izvlačenja.