Upload
sarai
View
71
Download
0
Embed Size (px)
DESCRIPTION
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. - PowerPoint PPT Presentation
Citation preview
Projekat: C++ Projekat: C++ TetrisTetris
Fakultet za poslovnu informatikuFakultet za poslovnu informatiku
Predmet: Uvod u programiranje IIPredmet: Uvod u programiranje II
Studenti:Studenti:
Željko Bareta 25/2005Željko Bareta 25/2005
Miljan Simonović 54/2005Miljan Simonović 54/2005
Srboljub Stojadinović 73/2005Srboljub Stojadinović 73/2005
Bojan Prekić 89/2005Bojan Prekić 89/2005
Biljana Miličić 118/2005Biljana Miličić 118/2005
Ovo je prezentacija naOvo je prezentacija naššeg projekta: C++ eg projekta: C++ Tetris.Tetris.
Program je napisan u C++ kao Win32 Program je napisan u C++ kao Win32 aplikacija, koristeaplikacija, koristeći Windows Graphics Device ći Windows Graphics Device Interface (GDI).Interface (GDI).
Dalje sledi upoznavanje sa kodom.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.hMoramo napraviti klasu za bitmap objekat.Potreban nam je handle za izlazni uređaj.
- Sada dodajemo funkcije.
- Ovde prelazimo na bitmapobject.cppPravimo constructor / destructor.
- Sledi učitavanje bitmap-a.
- A zatim stvaranje create funkcije.
- Ovde pravimo destroy funkciju.
- 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 (RECT rcTemp) 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
- Mesto odvijanja same igre.
- Pravimo funkciju NewGame. Postavljamo start_time, inicijalizujemo Map niz, i kazemo mu da ubaci novi blok.
- Ovde pravimo draw tile funkciju.
- 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.
XX XX
XX XX
0 1 2 3
0
1
2
3
0 1 2 3
0
1
2
3
XX
XX XX XX
case 1: //Box! { sPiece.size[1][1]=TILEBLUE; sPiece.size[1][2]=TILEBLUE; sPiece.size[2][1]=TILEBLUE; sPiece.size[2][2]=TILEBLUE; }break;
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.phttp://triplebuffer.devmaster.net/file.php?id=3&pa%20ge=0hp?id=3&pa%20ge=0
http://triplebuffer.devmaster.nethttp://triplebuffer.devmaster.net
Hvala na paHvala na pažnjižnji..