Issuu on Google+

VISOKA ŠKOLA ELEKTROTEHNIKE I RAČUNARSTVA STRUKOVNIH STUDIJA

Student: MILJKOVIĆ Veselin NRT-39/03 Mentor: KRAUS Laslo

- Projekat 2 Video igra u jeziku Java: Hazard Sweep

Beograd


Veselin Miljković NRT-39/03 Projekat 2: Hazard Sweep

Strana |2

Jun 2010.

1. Računarske igre Igranje predstavlja veoma značajan deo u razvoju psihologije deteta ali takođe igra bitnu ulogu i u životu svake odrasle osobe. O tome su napisane mnogobrojne studije u kojima su pomenute i neke teorije u kojima se smatra da ceo svoj život čovek doživljava kao jednu veliku igru. Takođe, kroz istoriju se pominju različiti oblici igre od veoma velikog društvenog značaja, npr. sportske olimpijske igre za čije postojanje znamo još od vremena antičke Grčke. Računari su celokupnoj priči o igrama dodali nešto potpuno novo od samih početaka. Za samo nekoliko decenija (prve video u prodaji su se pojavile početkom sedamdesetih godina prošlog veka) koliko postoje, napravljen je čitav novi svet sa nebrojeno mnogo mogućnosti koji danas uključuje čitavu industriju. Pored toga što su za vreme svog postojanja bile i ostale odgovorne za razonodu i opuštanje, delimično su odgovorne i za veoma brz razvoj hardverskog i softverskog dela računara. Izbor programskog jezika za razvoj igre nikad nije jednostavan zbog velikog broja istih. Kao jedan od važnijih faktora prilikom izbora je multiplatformska podrška, a u skorije vreme i podrška za HTTP u smislu da je kreiranu igru moguće postaviti i na Web stranicu. Programski jezik Java zadovoljava mnogobrojne kriterijume, između ostalih (uključujući i pomenute), objektno orijentisanost koja pojednostavljuje i ubrzava razvoj igre.

2. Hazard Sweep 2.1 Hazard Sweep Igra je zasnovana na ideji igre koja se besplatno dobija uz operativne sisteme Microsoft familije pod imenom Mine Sweeper (Winmine). Igranje je u suštini veoma jednostavno i svodi se na otkrivanje sakrivenih opasnih polja, gde je cilj otvoriti sva polja koja nisu opasna. Kao pomoć igraču, a takođe da bi igranje bilo interesantnije, otkrivena bezbedna polja koja se dodiruju sa nekim od opasnih imaju na sebi broj koji označava sa koliko opasnih polja je to polje okruženo. Pored toga, postoji još nekoliko različitih mogućnosti koje olakšavaju potragu za opasnim poljima i doprinose zanimljivosti igranja o kojima će kasnije biti više rečeno. Vreme igranja je ograničeno na 999 sekundi (nešto više od 16 minuta) u svakom nivou što je sasvim dovoljno za svaki, uključujući i najteži.

Sika 1: Uveličana slika obeleženog opasnog polja

2.2 Hazard Sweep - glavni prozor 2


Veselin Miljković NRT-39/03 Projekat 2: Hazard Sweep

Strana |3

Glavni prozor Hazard Sweep-a je dizajniran da se na lak i intuitivan način dođe do svih funkcija koje se najčešće koriste. Uglavnom je vođeno računa da većina kontrola bude vizuelno dostupna ili preko prečice na tastaturi, što može biti od velike koristi prilikom igranja. Otkrivanje polja se vrši pritiskanjem levog tastera na mišu, dok se za obeležavanje koristi desni. Pored obeležavanja moguće je na polje postaviti znak pitanja na neotkriveno polje (pritiskom desnog tastera miša na već obeleženo) što može biti korisno, ako igrač nije u potpunosti siguran šta se krije ispod njega. Ako se na otkrivenom polju nalazi broj, to znači da se ono dodiruje sa onoliko opasnih polja kolika je vrednost te cifre. Mala pomoć igraču je automatsko otvaranje svih polja koja se ne dodiruju sa opasnim poljima, tako da se vreme igranja može značajno smanjiti. Još jedna olakšavajuća mogućnost prilikom igranja je: ako se oko otvorenog polja koje na sebi ima broj obeleže sva opasna polja, duplim klikom na njega je moguće otkriti sva okolna neobeležena i neotkrivena polja. Ova opcija može biti koliko korisna toliko i opasna zbog toga što se može desiti da je obeleženo pogrešno polje. Kao što je već rečeno, igra najduže traje 999 sekundi, a trenutno vreme provedeno u jednoj partiji igre se prikazuje na desnom numeričkom displeju. Vreme igra značajnu ulogu u Hazard Sweep-u jer se po tom osnovu boduju igrači – što je vreme igranja kraće, to je rezultat bolji. U svakom momentu je moguće pauzirati vreme pritiskom na dugme 'Pauza' na glavnom prozoru ili pritiskom tastera 'space' na tastaturi, što će ujedno i sakriti tablu sa poljima. Drugi numerički displej označava broj neobeleženih opasnih polja i predstavlja još jednu od olakšavajućih stavki za igranje. Ali, treba imati na umu da će on prikazati koliko je polja preostalo da se označi ne vodeći računa o tome da li se ispod obeleženih zaista krije opasno polje iline. više otkrivenih koja se ne dodiruju sa opasnim, kao i nekoliko sa brojem na sebi. Kao što se vidi na slici, u meniju postoje tri stavke: 'Sistem', 'Igra' i 'Pomoć'. U meniju 'Sistem' postoje stavke: 'Izlaz' i 'Minimizuj'. Ispod 'Igre' postoje 'Nova', 'Odabir nivoa' i 'Rezultati', dok se ispod 'Pomoc' nalaze 'Uputstvo' i 'O igri' koje sadrže informacije o igri.

Slika 2: Izgled aplikacije u toku igre na početnom nivou. Na slici se vide dva obeležena polja, 3


Pod uslovom da se otkriju sva bezbedna polja pre isteka vremena igrač je pobedio i pojavljuje mu se novi dijalog koji ga o tome obaveštava. Ako je njegovo vreme igranja manje od igrača koji su ranije igrali polje za unos imena postaje otvoreno, dok u drugom slučaju ostaje vidljivo, ali nije moguće uneti ime. Slika 3: Izgled aplikacije nakon pobede igrača. Kao što se vidi na slici, polje za unos imena je omogućeno.

2.3 Hazard Sweep – Odabir nivoa Odabir nivoa omogućava korisniku da prilagodi igru svojim željama. Do prozora odabira nivoa se dolazi preko glavnog prozora u meniju 'Igra' pod stavkom 'Odabir nivoa'. U osnovi su predviđena i predefinisana tri različita nivoa težine: 9 x 9 polja sa 10 prikrivenih (početni nivo), 16 x 16 polja sa 40 prikrivenih (srednji nivo) i 16 x 30 polja sa 99 opasnih polja (ekspert). Pored toga, igraču je obezbeđeno da odabere željeni broj polja i mina koji ne može biti veći od 16 x 30 polja niti manje od 9 x 9 polja. Gornja granica za opasna polja iznosi 99, a donja 9. Svako prekoračenje ovih ograničenja prilikom unosa željenih dimenzija i broja opasnih polja neće biti ispoštovano, nego će se tabla kreirati po predefinisanim maksimalnim ili minimalnim podešavanjima.

Slika 4: Forma za izbor nivoa

2.4 Hazard Sweep – Rezultati Kao i u svakoj igri rezultati su veoma bitni za igrača. Do prozora sa rezultatima u Hazard Sweep-u je moguće doći preko glavnog prozora: u meniju 'Igra' pod stavkom 'Rezultati'. Za početni i srednji


nivo pamte se rezultati 10 najboljih igrača, redosledom od najboljeg do najlošijeg, dok je za nivo 'ekspert' predviđeno samo jedno mesto, tako da ako više igrača koristi Hazard Sweep na istom računaru oni se moraju takmičiti za jedino mesto najtežeg nivoa. Da bi rezultati igranja bili sačuvani i nakon gašenja igre čuvaju se u posebnoj datoteci rez.rez koja se nalazi uz izvršnu verziju igre.

Slika 5: Forma sa rezultatima

3. Hazard Sweep struktura Struktura klasa unutar Hazard Sweep-a je realizovana u dva paketa za potrebe same igre, dok je za prikazivanje vremena i broja mina upotrebljen poseban paket. Prvi paket org.jhsweep.core sadrži samu srž igre i sastoji se iz pet klasa koje su razvijene na način da se veoma lako mogu prilagoditi za neke druge potrebe. Drugi paket org.jhsweep.front se sastoji od sedam klasa od kojih svaka nasleđuje svojstva klase Frame (iz standardnog JDK paketa java.awt), što znači da sadrže većinu stvari koje će igrač videti u igri. Treći paket numericDisplay je u potpunosti nezavisno razvijan paket za prikazivanje numeričkih karaktera u stilu elektronske komponente: osmoelementni numerički displej. Za razvoj svih gore pomenutih paketa korišćen je JDK 1.5 u Eclipse IDE razvojnom okruženju.

3.1. Paket: org.jhsweep.core Kao što je već rečeno ovaj paket predstavlja osnovu igre a sastoji se od pet klasa: Board.java Field.java Slusac.java Imagizer.java


Domain.java 3.1.1 Board.java

Za ovu klasu bi se moglo reći da predstavlja glavni deo paketa org.jhsweep.core jer ona koristi sve klase iz njega. Predstavlja proširenje klase Panel iz paketa java.awt, što je urađeno radi lakše manipulacije poljima koja su klase Field.java. Ona obezbeđuje pravilno kreiranje svih polja u igri, zajedno sa svim svojim funkcijama tj. instanca table kada se kreira ostaje potpuno nezavisna od ostatka aplikacije u kojoj je kreirana, a pritom je potpuno funkcionalna. Konstruktor ove klase (public Board(int m, int n, int brm)) prima argumente koji definišu dimenzije table kao i broj opasnih polja koji će kreirati tablu spremnu za igranje, a pored toga postoje metode: public void openAll (int prom) koja služi za otvaranje svih opasnih polja kad igrač pokuša da otvori opasno polje (što predstavlja kraj igre) i public void reset() koja će sakriti sva polja i postaviti opasna po slučajnom izboru. 3.1.2 Field.java

Field.java predstavlja jedno polje na tabli. Nasleđuje sve metode klase Label iz paketa jawa.awt. Jedini veći dodatak klasi Label je zamena (override) paint() metode koja je prilagođena tako da na sebi prikazuje sličicu u svakom momentu u zavisnosti od statusa polja. 3.1.3 Slusac.java

Klasa Slusac.java proširuje klasu MouseAdapter, takođe iz jawa.awt paketa. Unutar nje je rešen veći deo logike koji je potreban za predviđeno korišćenje Board.java klase. Privatnom metodom void otvoriKomsije(Field f) je rešena mogućnost otvaranja svih bezbednih polja koja se ne dodiruju sa opasnim poljima, a koja je pomenuta ranije u vidu male pomoći igraču. Nasleđene metode public void mousePressed(MouseEvent d) i public void mouseReleased(MouseEvent d) su zamenjene tako da menjaju statuse unutar instanci klase Field.java u zavisnosti od upotrebljenog tastera na mišu. Pored toga, u metodi public void mousePressed(MouseEvent d) se proverava da li je došao kraj igri, to jest, da li je igrač pritisnuo opasno polje. 3.1.4 Imagizer.java

U ovoj klasi se vrši samo učitavanje svih sličica koje se koriste za prikazivanje polja. U tu svrhu upotrebljena je metoda getClass().getResource("putanja_do_slike/ime_slike") za dobijanje relativne putanje do fajla slike koja se nalazi unutar gotovog JAR fajla i metoda iz klase Toolkit (paket java.awt) getImage(URL url) kojom je dobijena sama slika. 3.1.5 Domain.java

Sadrži konstante koje su upotrebljene za definisanje trenutnog statusa unutar klase Field.java.

3.2. Paket: org.jhsweep.front Paket org.jhsweep.front predstavlja deo Hazard Sweep-a koji se ne dotiče mnogo logičkog dela igre, nego je njegova glavna uloga grafičko rešenje igre, to jest, deo koji će imati najviše dodira sa igračem što, svakako, podrazumeva zaštitu aplikacije od korisnikovog pogrešnog unosa, kao i dodatne funkcije koje će ubrzati ili olakšati upotrebu aplikacije. Kao što je već spomenuto paket se sastoji od sedam klasa:


• • • • • • •

JHSFront.java Pobeda.java Podesavanja.java Rezultati.java Igrac.java About.java Greska.java

S obzirom da se u prve četiri od navedenih klasa nalaze sva bitnija rešenja, o preostalima neće biti mnogo reči. Klasa About.java kreira prozor ‘O igri’ koji sadrži osnovne informacije o igri. Igrac.java je pomoćna klasa koja služi isključivo za lakšu manipulaciju podacima učitanim iz datoteke rez.rez. 3.2.1 JHSFront.java

Ova klasa, sa stanovišta programera, predstavlja vezivno tkivo svih klasa koje su napravljene ili korišćene za kreiranje igre. Kao osnova JHSFront.java klase upotrebljena je klasa java.awt.Frame. U svom konstruktoru stvara glavni prozor sa menijem, tablom i drugim objektima koje postavlja na predviđeno mesto u predviđenoj veličini, ali pre nego što se on izvrši kreiraju se sve ostale klase koje će kasnije biti iskorišćene. Pored toga, ova klasa sadrži metodu public void nova koja resetuje stanje igre. 3.2.2 Pobeda.java

Iako Pobeda.java grafički izgleda veoma jednostavno na ekranu, ispod jednostavnog grafičkog rešenja krije deo logike koji se odnosi na rezultate igre. Poput prethodne klase i ova proširuje java.awt.Frame klasu, a nasleđena metoda void setVisible(boolean b) je zamenjena sa istoimenom koja pored svoje osnovne funkcije određuje da li je trenutni rezultat igre dovoljan da bi ušao u listu najboljih (ujedno proverava da li su dimenzije table i broj opasnih polja odgovarajući), to jest tekstualno polje za unos čini dostupnim ili nedostupnim za unos. Provera rezultata se vrši učitavanjem podataka iz pomenute datoteke rez.rez, a ako je ona oštećena ili nedostaje, pokreće se metoda public void rez koja generiše fajl iznova sa predefinisanim podacima. 3.2.3 Podesavanja.java

Podesavanja.java je odgovorna za kreiranje prozora Odabir nivoa. Konstruktor ove klase kreira kompletan grafički izgled koji uključuje i četiri radio dugmeta (java.awt.Checkbox) koja služe za izbor težine. Za njihovo pravilno korišćenje napravljena je posebna privatna klasa Promena, u koju je uključen interfejs ItemListener koji sadrži metodu public void itemStateChanged(ItemEvent d) predviđenu za rukovanje ovakvim tipom klasa. Unutar akcije dugmeta private Button dgmOK (u prozoru prikazanom sa tekstom „U redu“) je rešen potencijalni korisnikov pogrešan unos koji će biti zamenjen predefinisanim vrednostima. 3.2.4 Rezultati.java

Veoma jednostavna klasa, koja učitava i prikazuje podatke prikupljene iz datoteke rez.rez, a u slučaju da ista nedostaje poziva metodu void rez iz klase Pobeda.java.


3.3. Paket: numericDisplay Kao što je već rečeno, ovaj paket je u potpunosti odvojeno razvijan, ali je njegova namena i struktura zamišljena tokom razvoja Hazard Sweep-a. Predviđen je da na jednostavan način omogući prikazivanje numeričkih karaktera u stilu elektroničke komponente. Za sad se sastoji iz tri klase: Number.java, NDisplay.java i Domain.java. Poslednji sadrži isključivo konstante koje se koriste u prostoru imena celog paketa, što obezbeđuje veću razumljivost prilikom razvijanja aplikacija koje koriste ovaj paket. 3.3.1 Number.java

Predstavlja jednu komponentu displeja i može da prikaže samo jednu cifru. Predviđa promenu boje (metodom: public void setPresetColor(int preset)) i veličine (metodom: public void setVelicina(int vel)) u toku rada aplikacije, a definisane su četiri veličine i sedam boja. Takođe, omogućen je izbor i drugih boja uz pomoć metode public void setColor(Color c) ali pored nje se mora upotrebiti i metoda public void setOffColor(Color c) za definisanje druge boje na displeju koja simulira izgled ugašenog elementa na displeju. 3.3.2 NDisplay.java

Ova klasa predstavlja niz klasa Number.java sa više metoda za lakše ispisivanje višecifrenih brojeva. Konstruktor ove klase prihvata dva argumenta od kojih jedan predstavlja broj cifara koje će biti kreirane a drugi veličinu. U toku izvršavanja dozvoljava izmenu veličine i boje ali svih elemenata odjednom. Ovu klasu je veoma lako modifikovati za svako prigodno mesto, a takođe dodati još metoda koje će doprineti raznolikosti ali i upotrebnoj vrednosti paketa.

4. Zaključak Video igra Hazard Sweep je izrađena kao kompletna igra koja da bi se pojavila kao zaista gotov proizvod mora proći preliminarne testove krajnjih korisnika koji bi pokazali kako je moguće poboljšati korisnički interfejs, ali i otkriti greške u njoj. Pored toga, u kasnijoj realizaciji je moguća optimizacija igre, kao i prilagođavanje igre za druge uređaje, npr. mobilne telefone.

5. Literatura -

Laslo Kraus: Rešeni zadaci iz programskog jezika Java http://java.sun.com www.howstuffworks.com www.wikipedia.org


Projekat2 - Minice u Javi