Showing posts with label Allegro Programiranje. Show all posts
Showing posts with label Allegro Programiranje. Show all posts
Allegro5:: Animacija [VIDEO]
2D igrica na kojoj radim polahko ulazi u svoju završnu fazu. Za sada sam odradio Allegro animaciju koja animira likove na zaslonu koristeči se posebnim kodom koji se izvršava u pozadini. Tehnički, radi se o nizu (eng: array) karaktera koji se čitaju iz glavnog foldera te ih program tako animira koristeči for petlju. Da ne dužim, možete da pogledate video prilog.
Comet Shooter - kratak sumary
Comet Shooter v1.0
Ja sam već ranije objavio naziv svoje 2D igrice Comet Shooter koju razvijam unutar Visual C++ 2008 IDE-a koristeči Allegro5 tehnologiju. U ovom članku ja ću se ukratko osvrnuti na igricu na ono što je do sada urađeno. Dakle, za sada kao što vidite, igrica je imenovana Comet Shooter v1.0. Igrica je nastala u okviru 2D game dev kursa objavljenog na web stranici http://fixbyproximity.com/2d-game-development-course/ ili 2D game development course koji prikazuje razvoj 2D/Allegro5 igrice iz skratch-a uvaženog autora po imenu Mike Geig.
Kako bi razvojem ove igrice izvukao maksimum znanja što iz C++ programiranja pa tako i Allegro5 biblioteke, ja sam kreirao Allegro radionicu koja ima za cilj razvoj programa koji rješavaju adekvatne funkcije igrice na kojoj radim uz mogučnost da se isti djelovi kod mogu kasnije primjeniti za potrebu razvoja drugih igrica. Do sada su objavljena dva Allegro Lab-a koja sam u potpunosti napisao ja i objavio na ovoj svojoj web stranici. Prvi lab prikazuje kreiranje primitivne while petlje u igrici: http://www.amartufointeractive.org/2015/11/allegro-lab-ii-i-primitivna-while-petlja.html. Dok drugi lab prikazuje učitavanje željenog fonta i kreiranje escape rutine: http://www.amartufointeractive.org/2015/10/allegro-lab1-kreiranje-escape-rutine-i.html.
Kada je riječ o samoj igrici, gornja slika prikazuje prvu verziju moje igrice koja nije grafički ispolirana. U nastavku Allegro radionice i samog 2D game dev kursa, ova igrica će dobiti svoje animacije, poboljšanu fiziku kretanja, poboljšanu manipulaciju kolizije, efekte prilikom uništavanja kometa i samog broda te niz drugih poboljšanja koje bi trebalo bitno istaknuti igricu od gornje slike. U svakom slučaju, moja web stranica bit će glavni izvor informacija oko ove moje 2D igrice pa ćete biti svakako u tijeku što se tiće njenog razvoja, poboljšanja i prve verzije koja će biti uskoro objavljena za beta test i naravno probu samog game play-a.
Kada je riječ o samoj igrici, gornja slika prikazuje prvu verziju moje igrice koja nije grafički ispolirana. U nastavku Allegro radionice i samog 2D game dev kursa, ova igrica će dobiti svoje animacije, poboljšanu fiziku kretanja, poboljšanu manipulaciju kolizije, efekte prilikom uništavanja kometa i samog broda te niz drugih poboljšanja koje bi trebalo bitno istaknuti igricu od gornje slike. U svakom slučaju, moja web stranica bit će glavni izvor informacija oko ove moje 2D igrice pa ćete biti svakako u tijeku što se tiće njenog razvoja, poboljšanja i prve verzije koja će biti uskoro objavljena za beta test i naravno probu samog game play-a.
Comet Shooter - moja prva 2D igrica
Comet Shooter v1.0
Prošlo je nešto više od dva mjeseca kako sam zapoćeo svoju prvu 2D space igricu odnosno Comet Shooter. Iako su ovakve igrice uveliko dosupne širom neta i to u daleko boljem izdanju što interfejsa, dinamike, fizike same igre, efekata i drugih karakteristika, ja sam i dalje ponosan na činjenicu da se radi o mojoj prvoj 2D igrici.
Comet Shooter je napisan u Visual C++ 2008 IDE-u koristeči Allegro5 razvojnu biblioteku. Za sada Comet Shooter nije dostupan na netu ali će nakon poliranja biti objavljen na nekim od popularnih game portala kao što je Addicting Games.com ili a10games.com. Ja sam već ranije objavio kratak game play ove igrice koja je još uvijek u fazi poliranja.
Moj kratki game play možete pogledati u ovom video prilogu.
Allegro Lab II i primitivna While petlja
Image source: (cgcookie.com/2DSpaceShooter)
U ovom izdanju AllegroLab-a II pogledat ćemo na implementaciju i razvoj primitivne while petlje u programu kojim se sprite pomjera tipkovnicom u različitim pozicijama na zaslonu. Ovaj AllegroLabII je dio moje Allegro2D radionice u kojoj se izrađuje moja prva interaktivna 2D CometShooter igrica. Da ne dužim bespotrebno, pređimo na posao.
Izvorni tehnički članak,
Piše: Amar Tufo
Opis zadatka:
U ovom labu naš zadatak je da modifikujemo primjer programa Allegro_Bitmap tako da u izvornom kodu kreiramo timer event handler koji će nam omogučiti da se naš program izvršava svakih 60 sekundi na screen-u. Šta to znači? To znači da se objekti igrice, spritovi, animacije, slike, i fontovi ažuriraju i iscrtavaju svakih 60 puta u jednoj sekundi. Kako je to moguće postiči? Vrlo jednostavno! Sve što treba da uradimo jeste kreiranje FPS funkcije ili frames per second. Teoretski govoreči, naša igrica kada se jednom pokrene, korisnik će imati istu brzinu gameplay-a bez obzira na brzinu računala. Ovako u ovom tekstu, ukoliko nastavim dalje, mogao bih vas zbuniti. Pa da ne duljim, pogledajmo kako izgleda while petlja bez timer-a. Ali prije nego nastavimo, treba da znamo šta je to Allegro_Timer?
Allegro_Timer?
Dok igrate neke zahtjevne video igre, podrazumjeva se da vam je HD grafička karta i da je vaš računar barem 2 do 4 GB RAM-a jak. To znači da ćete za ove performanse dobiti podjednaku brzinu gameplay-a vaše igre i da ćete biti u stanju primjetiti velike razlike u FPS-u koji vaša igrica koristi. No, kada dođe do 2D video igara, jako je neophodno da takve igrice imaju svoj FPS jer će se večinom pokretati na slabijim računalima, to se i podrazumjeva. U programiranju video igre koristeči se Allegro bibliotekom unutar koje postoji funkcija Allegro_Timer koja developeru omogučava da vidi brzinu svoje igrice koju izrađuje i igra, a u isto vrijeme mu omogučava da igračima svoje igre dostavi brzinu od recimo 60 FPS-ova u sekundi bez obzira na slabe performanse test računala.
Ovaj lab je dio moje Allegro2D game dev serije pa ja stoga neću govoriti u detalje kako i na koji način kreirati cio projekat, jer podrazumjevam da ste ranije radili u C++-u ili u Visual C++ 2008 razvojnom okruženju i da ste već dosada napravili neke svoje aplikacije makar to bio i HelloWorld ili desktop aplikacija koja pritisko na taster pozdravlja korisnika nekom porukom. Ono što ću iznjeti u daljem djelu ovog članka jeste while petlja kao glavni dio ovog laba. Vidjet ćemo dvije while petlje i ukazati na njihove razlike kako bismo rješili naš problem sa pomjeranjem sprajta na zaslonu. Primjer veoma jednostavne while petlje je dat dolje ispod ovog teksta.
Allegro_Timer?
Dok igrate neke zahtjevne video igre, podrazumjeva se da vam je HD grafička karta i da je vaš računar barem 2 do 4 GB RAM-a jak. To znači da ćete za ove performanse dobiti podjednaku brzinu gameplay-a vaše igre i da ćete biti u stanju primjetiti velike razlike u FPS-u koji vaša igrica koristi. No, kada dođe do 2D video igara, jako je neophodno da takve igrice imaju svoj FPS jer će se večinom pokretati na slabijim računalima, to se i podrazumjeva. U programiranju video igre koristeči se Allegro bibliotekom unutar koje postoji funkcija Allegro_Timer koja developeru omogučava da vidi brzinu svoje igrice koju izrađuje i igra, a u isto vrijeme mu omogučava da igračima svoje igre dostavi brzinu od recimo 60 FPS-ova u sekundi bez obzira na slabe performanse test računala.
Ovaj lab je dio moje Allegro2D game dev serije pa ja stoga neću govoriti u detalje kako i na koji način kreirati cio projekat, jer podrazumjevam da ste ranije radili u C++-u ili u Visual C++ 2008 razvojnom okruženju i da ste već dosada napravili neke svoje aplikacije makar to bio i HelloWorld ili desktop aplikacija koja pritisko na taster pozdravlja korisnika nekom porukom. Ono što ću iznjeti u daljem djelu ovog članka jeste while petlja kao glavni dio ovog laba. Vidjet ćemo dvije while petlje i ukazati na njihove razlike kako bismo rješili naš problem sa pomjeranjem sprajta na zaslonu. Primjer veoma jednostavne while petlje je dat dolje ispod ovog teksta.
//main loop while(!exit) { ALLEGRO_EVENT ev; al_wait_for_event(event_queue, &ev); if(ev.type == ALLEGRO_EVENT_KEY_DOWN) { switch(ev.keyboard.keycode) { case ALLEGRO_KEY_ESCAPE: exit = true; break; } }
U ovoj klasičnoj while petlji nema ništa tako bitno što je vrijedno pomena. Tu se, doduše, nalazi jedna swithc case funkcija koja zatvara aplikacije pritiskom tastera escape na tastaturi. While petlja ili game petlja je jako važan dio bilo koje igrice jer se u njoj provjerava unos s tastature, kontrole, razni drugi djelovi igrice kao što je rendering, animacije i još niz drugih stvari. A sada pogledajmo kako bi izgledala unapređena while petlja na primjeru iz opisa ovog teksta. Da se posjetimo, sprite mora da se pomjera jako glatko na zaslonu a ne step- by -step. Da bismo to postigli u tu svrhu je deklariran timer ili jednostavno FPS regulator.
Prije nego li pogledamo kako cijela while petlja izgleda, pogledajmo izvorni kod Allegro_Bitmap programa kojeg treba da modifikujemo.
//Allegro_Bitmap_App //Developer: Amar Tufo //8. October, 2015 //This sample demonstrates the use of bitmaps in Allegro //and way of manipulating the bitmaps in actual programs #include <allegro5\allegro.h> #include <allegro5\allegro_primitives.h> #include <allegro5\allegro_image.h> int main() { //variables int width = 640; int height = 480; bool exit = false; int imageWidth = 0; int imageHeight = 0; int x = 0; int y = 0; //allegro variable ALLEGRO_DISPLAY *display = NULL; ALLEGRO_EVENT_QUEUE *event_queue = NULL; ALLEGRO_BITMAP *image = NULL; //program init if(!al_init()) //initialize Allegro return -1; display = al_create_display(width, height); //create our display object if(!display) //test display object return -1; //addon init al_install_keyboard(); al_init_image_addon(); image = al_load_bitmap("slika.png"); //local folder imageWidth = al_get_bitmap_width(image); imageHeight = al_get_bitmap_height(image); x = width / 2 - imageWidth / 2; y = height / 2 - imageHeight / 2; //installing event sources event_queue = al_create_event_queue(); al_register_event_source(event_queue, al_get_keyboard_event_source()); //main loop starts here while(!exit) { ALLEGRO_EVENT ev; al_wait_for_event(event_queue, &ev); if(ev.type == ALLEGRO_EVENT_KEY_DOWN) { switch(ev.keyboard.keycode) { //allow user to exit the program case ALLEGRO_KEY_ESCAPE: done = true; break; case ALLEGRO_KEY_UP: y -= 10; break; case ALLEGRO_KEY_DOWN: y += 10; break; case ALLEGRO_KEY_LEFT: x -= 10; break; case ALLEGRO_KEY_RIGHT: x += 10; break; } } //main loop ends here al_draw_bitmap(image, width / 2 - imageWidth / 2, height / 2 - imageHeight / 2, 0); al_draw_tinted_bitmap(image, al_map_rgba(255, 0, 0, .2), x, y, 0); al_flip_display(); al_clear_to_color(al_map_rgb(0,0,0)); } al_destroy_bitmap(image); al_destroy_event_queue(event_queue); al_destroy_display(display); //destroy our display object return 0; }
Dakle, ovo je izvorni kod Allegro_Bitmap programa u kojem treba da napravimo modifikaciju tako da se sprajt na zaslonu pomjera koristeči FPS timer a ne step by step ili piksel po piksel. Ovako teoretski ne možete vidjeti šta to znači pa sam stoga pripremio i kratki video demo ovog programa u akciji kako biste vidjeli što je to FPS.
Demonstracija pomjeranja sprajta na zaslonu bez upotrebe FPS-a
Glavna razlika u gornjem izvornom kodu jeste ta što program nema deklariran FPS event handler, odnosno da se program ne izvršava 'glatko' kako bi trebao. Da bi se ovo rješilo potrebno je deklarirati nekoliko manjih varijabli koje omogučavaju programu da se svi njegovi elementi pokreću ili iscrtavaju svakih 60 puta u jednoj sekundi. Dakle, FPS je po standartu jednak 60 sekundi pa stoga program koristi istu brzinu rada bez obzira na performanse vašeg računala na kojemu se program izvršava.
Modifikacije koje treba da napravimo u gornjem izvornom kodu su sljedeće. Prvo trebamo da modifikujemo pomjeranje sprajta na zaslonu u samom izvornom kodu. Ne želimo nikako da nam se sprajt pomjera svakih 10 piksela ili korak po korak. Naš cilj je da se sprajt pomjera onoliko dugo po zaslonu koliko mi držimo određene tastere (strelice) naše tastature, tek onda kada otpustimo naše strelice sprajt će prestati sa pomjeranjem. Kako sam već i rekao, prvu stvar koju radimo jeste deklaracija FPS varijable (int FPS = 60;). Ova varijabla je kreirala FPS od 60 sekundi. Sada treba da deklariramo poseban pokazivać na timer. Srećom, Allegro u sebi ima timer handler koji nam omogučava da ostvarimo željeni efekat uz jako malo koda. Evo i kako.
Timer će nam omogučiti adekvatnu primjenu FPS varijable u našem kodu pa bi se naš sprajt trebao brzo pomjerati na zaslonu bez obzira na performanse računala. Deklaracija timer-a je sljedeća: ALLEGRO_TIMER *timer = NULL; Ovde kako vidimo imamo pokazivać po imenu timer na varijablu Allegro_Timer. Pokazivači su jako bitan segment u programiranju bilo video igara pa tako i drugih aplikacija pa je njihovo razumjevanje od prijeke važnosti. Nakon deklaracije Allegro_Timer varijable trebali bismo registrovati izvor za ovu varijablu a to radimo sljedećom linijom koda: al_register_event_source(event_queue, al_get_timer_event_source(timer)); Ovom linijom koda smo kazali Allegru koji izvor akcije koristimo u doslovnom smislu. Nakon kreiranja i potvrde korištenja Timer varijable potrebno je da uključimo timer ovom linijom koda: al_start_timer(timer);
Glavni dio ovog koda jeste naša sređena while petlja koju ovdje prenosim u cjelosti uz popratne komentare pa ću komentirati u nastavku while petlju za pojedine nejasnoće.
//while loop start's here while(!exit) { //creating allegro event ALLEGRO_EVENT ev; al_wait_for_event(event_queue, &ev); //if keyboard key is pressed then if(ev.type == ALLEGRO_EVENT_KEY_DOWN) { switch(ev.keyboard.keycode) { case ALLEGRO_KEY_UP: keys[UP] = true; break; case ALLEGRO_KEY_DOWN: keys[DOWN] = true; break; case ALLEGRO_KEY_RIGHT: keys[RIGHT] = true; break; case ALLEGRO_KEY_LEFT: keys[LEFT] = true; break; } } //keep track of my keys else if(ev.type == ALLEGRO_EVENT_KEY_UP) { switch(ev.keyboard.keycode) { case ALLEGRO_KEY_UP: keys[UP] = false; break; case ALLEGRO_KEY_DOWN: keys[DOWN] = false; break; case ALLEGRO_KEY_RIGHT: keys[RIGHT] = false; break; case ALLEGRO_KEY_LEFT: keys[LEFT] = false; break; //if user press escape key case ALLEGRO_KEY_ESCAPE: exit = true; //than exit break; //if user press space key case ALLEGRO_KEY_SPACE: exit = true;//than exit break; } } //closing window by pressing red X else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) { //while loop end's here exit = true; } //using allegro_timer event handler else if(ev.type == ALLEGRO_EVENT_TIMER) { //move my square every 10 pixels y -= keys[UP] * 10; y += keys[DOWN] * 10; x -= keys[LEFT] * 10; x += keys[RIGHT] * 10; }
Listing1: Primjer while petlje sa upotrebom FPS i Timer varijable
Ja sam večinu ovih linija koda prethodno iskomentarisao kako bi se snašao u budućim modifikacijama istog izvornog koda ukoliko bude bilo potrebe za njih. Nešto posebno da kažem nemam, ali se ovaj dio koda bitno razlikuje od onog gore koji je prikazan u ovom članku jer ovaj kod ima TIMER event handler koji sada automatski startuje program bez potrebe da se ćeka na određeni pritisak tastera na tastaturi kako bi se program pokrenuo. Osim toga, kako ćete u nastavku imati priliku da vidite, program se izvršava relativno brzo gdje koristi svoje resurse za rad pa se sprajt dosta brže pomjera na zaslonu. Cio izvorni kod konačnog rješenja ovog laba možete pogledati u nastavku.
//Allegro_Bitmap_App //Developer: Amar Tufo //12. October, 2015 //This sample demonstrates the use of bitmaps in Allegro //and way of manipulating the bitmaps in actual programs //by using FPS #include <allegro5\allegro.h> #include <allegro5\allegro_primitives.h> #include <allegro5\allegro_image.h> enum KEYS{UP, DOWN, LEFT, RIGHT}; int main() { int width = 700; int height = 650; bool exit = false; bool keys[4] = {false, false, false, false}; int imageWidth = 0; int imageHeight = 0; int x = 0; int y = 0; //int pos_x = width / 2; //int pos_y = height / 2; //creating speed regulation int FPS = 60; //float scale = 2; //float degree = 0; //Creating allegro variables ALLEGRO_DISPLAY *display = NULL; ALLEGRO_EVENT_QUEUE *event_queue = NULL; ALLEGRO_BITMAP *image = NULL; //Creating timer event handler ALLEGRO_TIMER *timer = NULL; //allegro init check if(!al_init()) return -1; display = al_create_display(width, height); //check display initialisation if(!display) return -0; //addon init al_install_keyboard(); al_init_primitives_addon(); al_init_image_addon(); //register timer event timer = al_create_timer(1.0 / FPS); //load image into memory image = al_load_bitmap("slika.png"); //determine width & height of image imageWidth = al_get_bitmap_width(image); imageHeight = al_get_bitmap_height(image); //initialising variables x = width / 2 - imageWidth / 2; y = height / 2 - imageHeight / 2; //registering event sources event_queue = al_create_event_queue(); al_register_event_source(event_queue, al_get_keyboard_event_source()); al_register_event_source(event_queue, al_get_timer_event_source(timer)); al_register_event_source(event_queue, al_get_display_event_source(display)); //start timer al_start_timer(timer); //while loop start's here while(!exit) { //creating allegro event ALLEGRO_EVENT ev; al_wait_for_event(event_queue, &ev); //if keyboard key is pressed then if(ev.type == ALLEGRO_EVENT_KEY_DOWN) { switch(ev.keyboard.keycode) { case ALLEGRO_KEY_UP: keys[UP] = true; break; case ALLEGRO_KEY_DOWN: keys[DOWN] = true; break; case ALLEGRO_KEY_RIGHT: keys[RIGHT] = true; break; case ALLEGRO_KEY_LEFT: keys[LEFT] = true; break; } } //keep track of my keys else if(ev.type == ALLEGRO_EVENT_KEY_UP) { switch(ev.keyboard.keycode) { case ALLEGRO_KEY_UP: keys[UP] = false; break; case ALLEGRO_KEY_DOWN: keys[DOWN] = false; break; case ALLEGRO_KEY_RIGHT: keys[RIGHT] = false; break; case ALLEGRO_KEY_LEFT: keys[LEFT] = false; break; //if user press escape key case ALLEGRO_KEY_ESCAPE: exit = true; //than exit break; //if user press space key case ALLEGRO_KEY_SPACE: exit = true;//than exit break; } } //closing window by pressing red X else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) { //while loop end's here exit = true; } //using allegro_timer event handler else if(ev.type == ALLEGRO_EVENT_TIMER) { //move my square every 10 pixels y -= keys[UP] * 10; y += keys[DOWN] * 10; x -= keys[LEFT] * 10; x += keys[RIGHT] * 10; } //draw on the screen if there are no other event to process al_draw_bitmap(image, width / 2 - imageWidth / 2, height / 2 - imageHeight / 2, 0); //drawing tinted image on screen al_draw_tinted_bitmap(image, al_map_rgba(125,100,100, .5), x, y, 0); //draw scaled image on the screen //al_draw_scaled_bitmap(image, 0, 0, imageWidth, imageHeight, x, y, imageWidth * scale, imageHeight * scale, 0); //draw rotated image to the center of the screen //al_draw_rotated_bitmap(image, imageWidth / 2, imageHeight / 2, width / 2, height / 2, degree * 3.14159 / 180, 0); //draw image on center of the screen //al_draw_bitmap(image, width / 2 - imageWidth / 2, height / 2 - imageHeight / 2, 0); al_flip_display(); al_clear_to_color(al_map_rgb(0,0,0)); } al_destroy_bitmap(image); al_destroy_event_queue(event_queue); al_destroy_display(display); return 0; }
Konačno rješenje Allegro_Lab-: Moving image by FPS and Timer on the screen (Video)
Zaključak:
Bez obzira da li pravili 2D ili 3D igricu veoma je važno da vaša igrica obezbjedi takvu igraču atmosferu gdje greškama i minusima u brzini izvršavanja vaše igre jednostavno mjesta nema. Obzirom da tehnologije svaki dan napreduju, Allegro je i dalje jedan od onih izvrsnih API-a koji nam omogučavaju izradu visoko kvalitetnih i interaktivnih 2D/3D igara koje su kompatibilne sa skoro svim vodećim platformama. Jednom razvijena u Windows okruženju, vaša Allegro igrica će se bez problema pokrenuti na Mac-u ili Ubuntu Linux-u. Stoga je poliranje brzine i upotreba FPS-a svakako prijeko potrebna funkcija koja vašoj igri daje onu dozu adrenalina koja drži korisnika prikovanog uz tastaturu i monitor bez obzira o kakvoj vrsti i tipu igre je rjeć. S druge strane, FPS nije luksuz u video igricama barem koliko sam ja upoznat, nego je on jedan njen sastavni dio koji omogučava nesmetano igranje vaše igrice bez obzira koji OS i brzinu vaše računalo koristi. Zato u početku, razvoj igara treba da bude fokusiran isključivo samo na 2D video igrice kojima ne samo da ćete izgraditi temelj za prijelaz u 3D svijet game developmenta, nego je to jedan od vjerovatno najboljih načina da savladate programiranje u suštini i ovladate C++ programskim jezikom.
__________________________
© Amar Tufo, 2015
www.amartufointerctive.org
18. Novembar, 2015
Allegro2D Game radionica - sumiranje prvog djela!
Image source: Notbus Unity2D spaceshooter
Nakon kraće pauze, Allegro 2D game radionica se nastavlja. U ovom kratkom postu trebao bih da resumiram i napravim kratak pregled onoga što sam do sada uradio i što sam naučio. Da vas posjetim šta je to Allegro 2D radionica? Allegro 2D radionica je game dev radionica koja ima za cilj razvoj 2D space shootera koji koristi Allegro5 API i koji se razvija u Visual C++ 2008 Express izdanju.
Šta je do sada urađeno?
Smatram da nema potrebe da dužim pa ću ovako jasno i kratko sumirati glavne cjeline svoje prve 2D igrice. Dakle, 2D space shooter igrica se razvija u Visual C++ 2008 Express izdanju te kao takva još uvijek nema svoj oficijelni naslov. Igrica počiva na Allegro5 API-u, crossplatform engineu koji omogučava game developerima razvoj interaktivnih video igara koje su kompatibilne sa svim vodećim platformama Windows, Mac & Linux.
Cijela Allegro radionica ima za cilj da prikaže osnove 2D game developmenta kroz osnovnu matematiku, manipulaciju određenim tipovima podataka kroz C++ programski jezik, primjenu određenih tehnika programiranja, manipulaciju if then else, while, & for petljama, kreiranje od osnovnih do veoma naprednih game petlji, zatim manipulaciju ulazom i izlazom koristeči tastaturu i miš, te razumjevanje glavnih i ćesto korištenih Allegro funkcija i njihove manipulacije kroz Visual C++ 2008.
SpaceShooter game play short preview
Do sada je, mogu slobodno da kažem, izrađena cijela igrica sa jasnim i veoma solidnim game stateom gdje imate maleni brod koji se kreće kroz maleni svemirski prostor. Vaš cilj je da uništite što više kometa koje dolaze na vas a da vas pritom niti jedna kometa ne prođe niti dotakne vaš brodić, jer u suprotnom gubite jedan od vaša tri života. Ukratko opisano. Igrica za sada ima i score, game over sequence i exit mode te 5 sekundi da se korisnik spremi za igru. Poprilično kuul!
Za sada nedostaje svakako grafičko poliranje interfejsa, ušminkavanje te sređivanje glavnih game funkcija kako bi igra postala zahtjevnija nego što je to sada. Naravno, ne oćekujete valjda da pravim World of Warcraft, toliko dobar nisam a i da jesam sigurno ju sam ne bi pravio niti bi imao te konjske živce i sabur, osim toga jako užasno crtam pa taj film nećete dugo Bogme pogledati a možda i nikada.
Uglavnom, po završetku poliranja bit će to solidan 2D space shooter sa animacijama razaranja brodiča i komita, nekakvim zvukovima u pozadini, muzikom game play-a, nekim mojim artom za menu i komete i eto je moja prva 2D/C++ igrica za PC-jeve. Nemojte zaboraviti, ja sam buduči arheolog a ne softwer inženjer, programiranje mi je najbolja vanstručna i vanarheološka aktivnost koju imam i vjerovatno najbolji skil koji sam mogao steči.
Šta sam ja do sada naučio?
Uh, pa mogu slobodno vala da kažem, sve i svašta. Tako je, sve i svašta sam naučio kroz ovaj prvi završeni dio razvoja svoje 2D igrice. Od manipulacije tipova podataka, učitavanja assets-a (programeri će razumjeti), manipulacije uređajima tastature i miša, manipulacije ulazom i izlazom, manipulacije glavnih Allegro5 funkcija i da ne zaboravim njenu instalaciju i konfiguraciju pod razvojno Visual C++ 2008 okruženje.
Dakle, mogu slobodno da kažem da je ovo koliko izazovna toliko i dobra stvar jer konačno vidim if then else, while & for loop u akciji, konaćno razumijem one silne boolean tipove podataka gdje sam naučio kako da sam manipulišem različitim varijablama koristeči boolean tip, učitavanje fontova na određenoj poziciji screen-a te kreiranje sopstvenog FPS timer-a u video igri kako bi dobio podjednake game performanse na drugim računalima uz istu brzinu.
Ovdje takođe moram da kažem kako su urađena dva Allegro Lab-a kao manje provjere znanje sa ciljem manipulacije određenih funkcija kao što je AllegroLab za kreiranje FSP speed kontrolera unutar video igrice (ovaj lab se privodi kraju), a dostupan je gotov Allegro Lab koji prikazuje kreriranje escape rutine i učitavanje custom fonta (vidi na kraju ovog članka link na sam lab).
Cijelu Allegro radionicu možete pratiti na ovom mom blogu gdje će uskoro biti objavljena na beta test moja prva 2D igrica kao krajnji rezultat cijele ove Allegro radionice i ovog, za mene velikog, programerskog poduhvata.
Do narednog čitanja, Amar Tufo.
Poveznice:
Allegro 2D Space Shooter - kratki gameplay
SpaceShooter video igrica
Obzirom da se radi o mojoj prvoj igrici koju sam uspio programirati nakon samo mjesec i pol dana i da se radi naravno o jednom 2D SpaceShooter-u koji je u cjelosti implementiran, sastavio sam, naravno set opcija koje će uskoro biti dodate u ovu moju igricu.
SpaceShooter je napisan u Visual C++ 2008 Express (IDE) te koristi Allegro API kao pogonski radni okvir. Cilj igrice je uništiti vašim malenim svemirskim brodićem što više kometa koje hurljaju na vas. Svaki put kada Vas kometa prođe, vi gubite jedan život ili ga izgubite u sudaru sa kometama. Moj najviši score iznosi 18 bodova.
Igrica nije još uvijek ispolirana kako sam zamislio, obzirom da sam pripremio jedan lijep art za meni, image rendering i pravi space ship sa animacijom kako za komete tako i za brodić. Uglavnom, igrica je i ovako ne baš jednostavna za igranje pa vam trebaju dobri živci i dobra brzina da uništite sve komete koje dolaze u jednom valu kako biste ostali živi i sa svoja dragocjena tri života.
SpaceShooter Gameplay
SpaceShooter - Game Over -
Uskoro će biti objavljen kratki video prilog gameplay-a ove moje igrice. Za sada, igrica je dosta dobra kao neka klasična space avantura, ali će u narednom periodu proči ozbiljne promjene pa će vjerovatno i samo ime završne igrice biti promjenjeno.
No, za sada toliko od mene i do narednog čitanja.
Allegro2D: SpaceShooter game 1 - dio
Izgled svemirskog brodića igrice SpaceShooter
Evo, protekao je mjesec dana kako sam zapoćeo Allegro2D školu programiranja čiji je cilj inteaktivno C++ programiranje kako bi se ovaj programski jezik savladao. Krajnji rezultat ove Allegro2D škole je interaktivna i veoma jednostavna 2D igrica odnosno SpaceShooter gdje se ovaj maleni brodić probija kroz gomilu kometa koje hurljaju na vas i raznih svemirskih enemija čiji je cilj uništiti planetu Zemlju a vaš cilj je da ju zaštitite i osujetite loše planove enemija koji vas žele uništiti. Naravno, morate ostati živi kako biste okončali misiju.
U nastavku pogledajte kratki video prilog onoga što sam do sada uspio uraditi.
Ovo je prva sedmica kako je moja Allegro2D škola konaćno prešla iz teorije u praksu kada sam poćeo izradu 2D SpaceShooter-a. U ovom veoma kratkom video prilogu imate priliku da vidite kako se svemirski brodić pomjera gore, dolje i koristi svoje oružje.
U narednom postu ovog bloga, bit će prikazan kratki video prilog sa kometama koje hurljalju na ovaj maleni brodić sa prikazom detekcije kolizije i eksplozije kometa. Do tada, ugodan ostatak na blogu želim vam AmarTufoInteractive.
.
Allegro radionica: Jedan mali sumari!
Allegro_Kvadrat i movement manipulacije unosom s tastature
Od kako je počela moja serija Allegro_2D škole i interaktivnog C++ programiranja kroz kreiranje video igrice, mogu da kažem da sam dosta posla do sada uradio, neke nove stvari naučio a one koje mi nisu bile jasne savladao.
Teško je sada u ovom postu iznjeti šta radi ova slika i šta predstavlja ovaj maleni rozi kvadratić koji vidite unutar crnog prozora, ali vjerujte mi, radi mnogo toga. Ovaj kvadratić predstavlja prvi korak ka implementaciji moje video igrice, ili pravog 2D space okršaja u svemiru između mene i nekih uvrnutih svemirskih enemija.
Uglavnom, u nastavku moje serije, ovaj kvadratić će uskoro da postane jedan maleni svemirski brodić koji će se tako probijati kroz komete, rušiti druge svemirske enemije kako bi došao do svog odredišta i uspješno završio svoju misiju. Bit će to prvi put, da sam uspio razviti interaktivnu, 2D video igricu što će biti moj prvi naslov u toj oblasti.
Eto, tako ću postati uskoro hytech arheolog koji je poznat po svome player-u a imati ću uskoro i svoju 2D video igru. Šta više zaželiti?
Do narednog čitanja!
Allegro Lab1: Kreiranje escape rutine i učitavanje custom font-a
Izvorni autorski tehnički članak,
AllegroLab1_Kreiranje escape rutine i učitatavanje custom font-a
Autor: Amar Tufo
Napomena: Pred vama se nalazi tehnički članak namjenjen isključivo programerima, hobistima i gikovima koji su upoznati sa teorijama kompjuterskih nauka, programiranja, C++ programskog jezika i ljudi koji poznaju šta je to objektno orjentisano programiranje. Ovaj članak predstavlja dio moje serije Allegro 2D game development čiji krajnji rezultat treba da bude 2D space shooter igrica.
Opis zadatka:
Ovaj zadatak ima za cilj da demonstrira kreiranje primitivne while petlje kroz učitavanje i renderovanje custom fonta na zaslonu te zatvaranje aplikacije kreiranjem escape rutine. Ovaj AllegroLab1 je napisan koristeči Visual C++ 2008 Express (IDE), Allegro5 API, i kells.ttf font. U zadatku mora biti učitan navedeni font sa željenom porukom (recimo ime i prezime a velićina fonta mora biti 20 piksela).
Krajnji rezultat:
Ono što će biti rezultat ove aplikacije može se već vidjeti na gornjoj slici gdje je prikazan screenshot aplikacije po imenu Allegro_Fonts.exe koja u sebi prikazuje tri različite tekst poruke kroz tri različita tipa fontova i njihovih velićina.
Rješenje AllegroLab1 i izvorni kod:
//Allegro Lab 1 //Developer: Amar Tufo //This Allegro sample shows how to render custom font on display //and how to close program by pressing escape key //Datum: 1, Oktobar. 2015 #include <allegro5\allegro.h> #include <allegro5\allegro_primitives.h> #include <allegro5\allegro_font.h> #include <allegro5\allegro_ttf.h> int main() { int width = 640; int height = 480; bool exit = false; ALLEGRO_EVENT_QUEUE *event_queue = NULL; if(!al_init()) return -1; ALLEGRO_DISPLAY *display = NULL; display = al_create_display(640, 480); if(!display) return -1; //initialize font module al_init_font_addon(); //initialize ttf module al_init_ttf_addon(); //load my font ALLEGRO_FONT *font20 = al_load_font("kells.ttf", 25, 0); //install allegro primitives al_init_primitives_addon(); //install keyboard al_install_keyboard( ); //register keyboard source event_queue = al_create_event_queue(); al_register_event_source(event_queue, al_get_keyboard_event_source()); //create basic game loop while(!exit) { //creating allegro event ALLEGRO_EVENT ev; al_wait_for_event(event_queue, &ev); //draw some text on the screen al_draw_text(font20, al_map_rgb(255, 127, 127), 640/2, 480/2, ALLEGRO_ALIGN_CENTRE, "Developer: Amar Tufo"); //allow user to exit by pressing escape key if (ev.type == ALLEGRO_EVENT_KEY_UP) { if (ev.keyboard.keycode == ALLEGRO_KEY_ESCAPE) exit = true; } //back buffer al_flip_display( ); //clear back buffer al_clear_to_color(al_map_rgb(0, 0, 0)); } //Destroy the display al_destroy_display(display); return 0; }
Završni rezultat programa:
Ovo je završni rezultat programa i rješenje mog Allegro_Lab-a. Kao što vidite tekst poruka "Developer: Amar Tufo" je uspješno renderovana koristeči custom font kells.ttf koji je dat u zadatku. Ja ne mogu ovako tekstualno da vam demonstriram escape rutinu te se ista nalazi u izvornom kodu koji je gore objavljen i izvorni kod možete slobodno prekopirati ukoliko vas zanima da i vi sami nešto napravite, neku aplikaciju koja će raditi kao moja.
Toliko od mene za sada i do narednog čitanja.
Prvi dio Allegro 2D radionice doveden kraju
Prošlo je relativno dug vremenski period kako sam započeo Allegro 2D radionicu. Cilj radionice je ovladati programskim jezikom C++-om kroz izradu 2D Space Shooter igrice koristeči .NET Framework 3.5 SP1 tehnologiju i Visual C++ 2008 Express razvojno integrisano okruženje i naravno, Windows 7 dev platform.
Ova radionica je dio moje C++ online škole koju pohađam na interaktivnoj online platformi Udemy koja je u svojoj ponudi imala cio besplatan C++ kurs od 79 lekcija na koji sam aplicirao. Moja aplikacije izgleda ovako:
Završni projekat moje Allegro 2D radionice bit će gotova 2D igra kompatibilna sa svim vodečim platformama kako Windowso-om tako Linux-om i Mac-om. Targetovana Linux platforma jeste Ubuntu Linux sada 15.04 aktuelna verzija ove popularne Linux distre.
Allegro je uglavnom namjenjen Windows developerima koji žele da se okušaju u game developmentu koje nisu ovisne o platformi za koju su razvijene. Jedina mana jeste portovanje izvornog koda sa platforme na platformu što znači da će developeru koji je razvio aplikaciju na Windows-u biti jako teško da istu aplikaciju pokrene pod Linux ili Mac okruženjem te su male vjerovatnoće da isti developer neće provesti nekoliko sati rješavajuči bagove u izvornom kodu.
Do sada sam lično radio sa raznim apijima ali mi je najdraži SDL koji je jedan od mojih omiljenih game apija do sada. Razlog tomu jeste vrlo jednostavan način instalacije neovisno o platformi a obzirom da ja radim u glavnom u Linux-u njegova instalacija je tako jednostavna i jedno od največih iskustava koje sam do sada imao. No, što se tiće Allegra ovo je takođe jedan od najboljih načina da se ovlada C++ programiranjem jer izrada ove 2D igre objedinjuje glavne i ćesto korištene tipove podataka u game developmentu kao što su pointeri, nizovi, if, than, else zatim else if, switch case, for petlje, implementaciju main game loop koriteči while petlju, polimorfizam, enkapsulaciju i nasljeđivanje ali i način razmišljanj i implementaciju osnovnih karakteristika 2D igre.
Toliko od mene za sada pa do narednog čitanja.























