Professional Documents
Culture Documents
OOP Hanoi
OOP Hanoi
svećenici moraju napraviti 1,84 * 109 poteza kako bi prebacili sve krugove na zadani štap
(imamo još vremena ….)
Cilj: razviti igru
Hanojski tornjevi
Osnovne značajke igre:
1. Tri štapa
2. Četiri diska različitih veličina
3. Upravlja se pomoću miša
4. Jednostavna grafika
5. Diskovi se pokreću prema koordinatama miša
6. Ako se disk ne može spustiti na štap vraća se na prethodnu poziciju
7. Ako su diskovi ispravno posloženi na drugom ili trećem štapu igra je
gotova
8. Igrač može ponovno igrati igru
9. Broje se ukupni potezi igrača, a obavijest se prikaže na kraju igre
Što sada?
Kreirati vlastiti jednostavni engine (jer je za početak to dovoljno)
GameSDK
2DGL (2D Game Language)
Ako ste probali napraviti igru Ping-pong ili ako ste barem pogledali kod i
proučili kako radi, tada će vam ova igra biti novi izazov.
Ako ništa od navedenog niste učinili, vjerojatno vam ništa neće biti jasno.
Kako ima više vas koji ste odabrali igru za projekt, primjereno je proći još
jedan, nešto složeniji primjer.
http://www.youtube.com/user/ashh640?feature=watch
Korak 1
ZAHTJEV 6
Početna pozicija
int[] stap1 = {1, 2, 3, 4}; // u početku se svi diskovi nalaze
//na prvom štapu
int[] stap2 = {0, 0, 0, 0}; // ostali štapovi su prazni
int[] stap3 = {0, 0, 0, 0};
Postavimo i pozadinu!
76-78
Postavljanje pozadine
Pripremili smo sliku u png formatu, ali….
95-96
Učitavanje diskova
// sada je potrebno učitati spriteove koji predstavljaju diskove
loadSprite("Disk1.png", 1);
setImageColorKey(1, Color.Black);
loadSprite("Disk2.png", 2);
setImageColorKey(2, Color.Black);
loadSprite("Disk3.png", 3);
setImageColorKey(3, Color.Black);
loadSprite("Disk4.png", 4);
setImageColorKey(4, Color.Black);
98-107
Problemi počinju
// sada moramo vidjeti je li korisnik kliknuo na miša i na koji je disk kliknuo
// iako zadatak izgleda jednostavan, to nije tako jer nekako treba spriječiti
provjeru za slučaj kada smo kliknuli na disk već samo treba nastaviti pratiti
poziciju miša
Ideja:
1. Ako je tipka miša pritisnuta i ne držiš već disk, tada provjeravaj gdje se nalaziš
2. Ako si blizu nekog štapa, tada podigni disk koji možeš
if(isMousePressed() && uzmiDisk == 0) // ako je miš pritisnut i odabrani disk 0 (nema diska)
{
if(odabraniStap() != 0)
{
podigni(odabraniStap());
} Kako biramo štap?
}
Kako podižemo disk?
130-136
Koji je štap odabran
Ovo je igra, a mi pokušavamo pogoditi namjeru igrača.
Pretpostavljamo kako igrač želi podići disk sa nekog štapa, ako se
nalazi u nekoj “zoni aktivnosti”
public int odabraniStap() // potrebna nam je metoda za dodjelu šipke
{
int stap = 0;
if(mouseX() > 25 && mouseX() < 200 & mouseY() > 150)
{
stap =1;
}
if(mouseX() > 201 && mouseX() < 400 & mouseY() > 150)
{
stap =2;
}
if(mouseX() > 401 && mouseX() < 640 & mouseY() > 150)
{
stap =3;
}
return stap; // vraćamo vrijednost koja pokazuje koji je štap odabran
}
332-354
Još samo podizanje diska
public void podigni(int stap)
{
if (stap == 1) // ovo je stanje za prvi štap na kojem mogu postojati najviše 4 diska - od 0 do 3
{
if(stap1[0] != 0) // ako najviši nije prazan onda ćemo ga podignuti
{
uzmiDisk = stap1[0]; // podižemo disk
prethodniStap = 1; // podigli ste disk i pamtite gdje se nalazio
stap1[0] = 0; // nema više diska, pa je to mjesto prazno
}
else if(stap1[1] != 0)
{
uzmiDisk = stap1[1]; // podižemo disk
prethodniStap = 1; // podigli ste disk i pamtite gdje se nalazio
stap1[1] = 0; // nema više diska, pa je to mjesto prazno
}
else if(stap1[2] != 0)…….. I TAKO ZA SVA TRI ŠTAPA!!!
{
226-329
Sada malo u kod
…