310 likes | 539 Views
Projekat: C++ Tetris. Fakultet za poslovnu informatiku Predmet: Uvod u programiranje II Studenti: Željko Bareta 25/2005 Miljan Simonović 54/2005 Srboljub Stojadinović 73/2005 Bojan Prekić 89/2005 Biljana Miličić 118/2005. Ovo je prezentacija na š eg projekta: C++ Tetris.
E N D
Projekat: C++ Tetris Fakultet za poslovnu informatiku Predmet: Uvod u programiranje II Studenti: Željko Bareta 25/2005 Miljan Simonović 54/2005 Srboljub Stojadinović 73/2005 Bojan Prekić 89/2005 Biljana Miličić 118/2005
Ovo je prezentacija našeg projekta: C++ Tetris. • Program je napisan u C++ kao Win32 aplikacija, koristeći Windows Graphics Device Interface (GDI). • Dalje sledi upoznavanje sa kodom.
- Program se sastoji od 3 fajl-a: main.cpp, bitmapobject.cpp, bitmapobject.h • Počećemo sa main.cpp fajlom, sa nekim osnovnim definicijama.
- Sledi izrada veličine svakog tile-a, kao i same mape. - Kao i varijable za budući bitmap (potrebno nam je 10 boja od kojih se jedna ne iscrtava).
- Ovde inicijalizujemo sve potrebne funkcije. - Zatim slede globalne varijable. Application handle i main window handle.
Napravićemo niz koji sadrži blokove koji se nalaze u području igre. Napravićemo strukturu za blok (piece), sadržaće dve promenljive, za trenutni i nailazeći blok. - Ovde privremeno napuštamo main.cpp.
Bitmapobject.h • Moramo napraviti klasu za bitmap objekat. • Potreban nam je handle za izlazni uređaj.
- Ovde prelazimo na bitmapobject.cpp Pravimo constructor / destructor.
- Zatim se izvršava HDC konverzija, i prave se funkcije za visinu / širinu. • Nakon ovoga se vraćamo u main.cpp, gde nastavljamo rad sa globalnim • varijablama.
- Vraćamo se u main.cpp. Definišemo po jednu promenljivu klase BitMapObject za mapu i za blokove.
- Sada pravimo hendler poruka. Windows šalje poruke prozoru sve vreme. Neke od tih informacija su nam bitne, a neke ne. Ovaj hendler služi za usmeravanje tih poruka.
- Funkcija winmain, pomoću koje se pravi naš sopstveni prozor.
- Koristimo privremeni pravougaonik(RECTrcTemp) koji se koristi za čišćenje prozora. Zatim kreiramo sliku mape i čistimo je na sličan način. Na kraju učitavamo bitmap fajl koji smo sami napravili i koji služi da oživi grafiku u igri. Ubačena je i funkcija GameDone za čišćenje, koja se ovde ne koristi, ali je ostavljena zarad eventualnih budućih proširenja
- Pravimo funkciju NewGame. Postavljamo start_time, inicijalizujemo Map niz, i kazemo mu da ubaci novi blok.
- DrawMap funkcija iscrtava toolbar, pa sledeći blok, pa posle toga blokove koji su već tu i blok kojim igrač trenutno upravlja.
- NewBlock funkcija, pravi novi blok. Generiše sledeći (preview) blok, i stavlja ga na mesto trenutnog kada se sa ovim završi. Za početno pokretanje igre moramo da odradimo case generaciju za svaki blok ponaosob. Ovde nismo prikazali celu case naredbu zato jer je za svaku figuru slična.
0 1 2 3 0 1 2 3 case 1: //Box! { sPiece.size[1][1]=TILEBLUE; sPiece.size[1][2]=TILEBLUE; sPiece.size[2][1]=TILEBLUE; sPiece.size[2][2]=TILEBLUE; }break; 0 1 2 3 0 1 2 3 case 2: //Pyramid! { sPiece.size[1][1]=TILESTEEL; sPiece.size[0][2]=TILESTEEL; sPiece.size[1][2]=TILESTEEL; sPiece.size[2][2]=TILESTEEL; }break;
- RotateBlock funkcija. Copy & rotate u privremenu vrednost, proveri za kolizije, i onda vraća u originalnu vrednost.
- Move funkcija. Provera kolizije, zatim pomeranje na novo mesto, ili započinjanje nove igre ako se pređe granica područja igre.
- CollisionTest. Proveravanje granica i da li prostor pripada nekom drugom bloku.
- RemoveRow funkcija. Jednostavno uklanja red ako je popunjen skroz, i spušta ostale dole. - Ovde se završava kod, uživajte u igranju!
http://triplebuffer.devmaster.net/file.php?id=3&pa%20ge=0 http://triplebuffer.devmaster.net