Boro Casso Opublikowano 20 Lutego 2009 Udostępnij Opublikowano 20 Lutego 2009 Wszystko pisane było w devie bardzo dawno temu, odkopałem mój stary przykład więc publikuje, może komuś się przyda. /* Przykład stworzony przez Boro casso Obrazuje on Praktycznie zastosowanie w stopniu podstawowym biblioteke allegro. Jeżeli masz jakieś pytania gg:6854542 E-mail borocasso[malpa]gmail.com Gra posiada wszystkie niezbedne opcje. Wszystkie funkcje zostały opisane za pomocą komentarzy. */ #include <allegro.h> #include <string> #include <iostream> #include <ctime> using namespace std; volatile long speed = 0; void increment_speed() { speed++; } END_OF_FUNCTION(increment_speed); LOCK_VARIABLE(speed); LOCK_FUNCTION(increment_speed); int main() { srand(static_cast<int>(time(NULL))); allegro_init(); //Deklaruje funkcje allegro install_keyboard(); //Deklaruje obsługę klawiatury set_color_depth(16); //Ustawia głębię kolorów, możliwe tryby to : 8, 15, 16, 24, 32 bity. set_gfx_mode(GFX_AUTODETECT_WINDOWED,800,600,0,0); //Tym poleceniem włączamy tryb graficzny. liczby 800 i 600 to rozdzelczość install_timer(); //Uruchamia timer install_int_ex(increment_speed, BPS_TO_TIMER(80)); //Deklaruje timer BITMAP *bufor = NULL; // BITMAP *postac_gora00 = NULL; //Deklarowanie zmiennych BITMAP *monster = NULL; // BITMAP *drzewo_spr = NULL; // bufor = create_bitmap(800,600); //Tworzenie bufora. postac_gora00 = load_bmp("gracz.bmp",default_palette); //Ładowanie zasobów graficznych. monster = load_bmp("monster.bmp",default_palette); drzewo_spr = load_bmp("drzewko.bmp",default_palette); int ludek_x = 1, ludek_y = 1, ludek_hp = 100; //Zmienne dotyczące postaci gracza int monster_hp[10], monster_x[10], monster_y[10], strona_mon = 1; //Tablice dotyczące przeciwników int map[800][600]; //Tablica dotycząca mapy int frame = 0; //Zmienne która będzie stosowana do zarządzania klatkami animacji. string strona = "lewo"; //Zmienna łańcuchowa. for (int i=1; i<=10; i++)//Pętla wypełniająca talice z potworami { monster_hp[i]=100; //Zdrowie monster_x[i]=rand() % 800; //Połozenie na osi x monster_y[i]=rand() % 600; //Połozenie na osi y } for (int i=1; i<=800; i+=32)//Pętla wypełniająca talice z mapą for (int j=1; j<=600; j+=32) { map[i][j]=rand() % 10; } while( !key[KEY_ESC]) //Pętla, w środku niej podajemuwszystki akcje dot. gry. { //textprintf(screen,font,20,20,makecol(255,255,128),"HP: %d",ludek_hp); //Rysuje napis hp: nasze zdrowie. while( speed > 0) { if( key[KEY_LEFT] && (map[ludek_x-32][ludek_y]!=8) && (frame==0 || frame==20)) { ludek_x-=32; strona = "lewo"; } //Poruszanie się lewo if(key[KEY_RIGHT] && (map[ludek_x+32][ludek_y]!=8) && (frame==0 || frame==20)) { ludek_x+=32; strona = "prawo"; } //Poruszanie się prawo if(key[KEY_UP] && (map[ludek_x][ludek_y-32]!=8) && (frame==0 || frame==20)) { ludek_y-=32; strona = "gora"; } //Poruszanie się górę if(key[KEY_DOWN] && (map[ludek_x][ludek_y-32]!=8) && (frame==0 || frame==20)) { ludek_y+=32; strona = "dol"; } //Poruszanie się dół speed--; frame++; if( frame > 39) frame=0; } clear_to_color(bufor, makecol(80,220,80)); //Rysuje tło. //Rysowanie gracza \/ if( frame<20) { draw_sprite(bufor, postac_gora00, ludek_x, ludek_y); } else if( frame>=20 && frame<40) { draw_sprite(bufor, postac_gora00, ludek_x, ludek_y); } //Rysowanie gracza /\ for (int i=1; i<=10; i++) //Pętla obsługująca przeciwników. { strona_mon = rand() % 10; //Losowanie strony poruszania się przeciwnika if (strona_mon == 0 && (frame==0 || frame==20) ){ monster_x[i]+=32;} if (strona_mon == 1 && (frame==0 || frame==20)){ monster_y[i]+=32;} if (strona_mon == 2 && (frame==0 || frame==20)){ monster_x[i]-=32;} if (strona_mon == 3 && (frame==0 || frame==20)){ monster_y[i]-=32;} draw_sprite(bufor, monster, monster_x[i], monster_y[i]); //Rysowanie przeciwnika } for (int i=1; i<=800; i+=32)//Pętla wypełniająca talice z mapą for (int j=1; j<=600; j+=32) { if (map[i][j]==8) {draw_sprite(bufor, drzewo_spr, i, j);} } for (int i=1; i<=10; i++) //Pętla odpowiedzalna za walkę if (ludek_x>=monster_x[i]-15 && ludek_x<=monster_x[i]+15 && ludek_y>=monster_y[i]-14 && ludek_y<=monster_y[i]+14) { ludek_hp=ludek_hp - (rand() % 3); monster_hp[i]=monster_hp[i] - (rand() % 5); if (monster_hp[i]<=0) { monster_x[i]=-100; } } blit( bufor, screen, 0,0,0,0, 800,600); //Kopiowanie bufor na ekran } //Czyszczenie zasobów remove_int( increment_speed); destroy_bitmap(postac_gora00); destroy_bitmap(monster); destroy_bitmap(bufor); allegro_exit(); //Wychodzenie z trybu allegro return 0; //Program zwraca 0 } END_OF_MAIN(); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Crackkk-GM Opublikowano 20 Lutego 2009 Udostępnij Opublikowano 20 Lutego 2009 Eh, myślałem, że to będzie coś lepszego... ;P ja się bawię w allegro i takie coś zrobiłem, no ale dla początkujących programistów, którzy korzystają z Allegro na pewno się przyda :) Bardzo ładnie opisane. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Bassmaster Opublikowano 20 Lutego 2009 Udostępnij Opublikowano 20 Lutego 2009 Przecież allegro to strona internetowa :P. A tak serio kod fajny może się komuś przydać 5/5 :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Darlix Opublikowano 20 Lutego 2009 Udostępnij Opublikowano 20 Lutego 2009 Allegro nie ma dużych możliwosci. Ale na początek tworzenia gier w C++ wystarczy :) 4/5 :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marmot Opublikowano 20 Lutego 2009 Udostępnij Opublikowano 20 Lutego 2009 Może i nie ma dużych możliwości, ale 90% amatorskich twórców gier nawet nie wykorzysta możliwości Allegro w 100% (: . A kod bardzo IMHO nieczytelny. Lepiej porobić sobie funkcje odpowiadające za przesunięcie, narysowanie itd. Kod jest czytelniejszy, no i nie trzeba potem powielać kodu, jak chcemy dodać drugą postać, która się porusza. Aczkolwiek, jak ktoś się uczy, to może się mu przydać, chociaż kod ten uczy trochę złych nawyków jak na mój gust. 4/5 ;P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 20 Lutego 2009 Udostępnij Opublikowano 20 Lutego 2009 void increment_speed() { speed++; } Padłem. Po primo to allegro moim zdaniem zwykły badziew, a po drugie primo to zgadzam się z poprzednikiem - złych nawyków to uczy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Boro Casso Opublikowano 20 Lutego 2009 Autor Udostępnij Opublikowano 20 Lutego 2009 Wiem wiem, jak już pisałem, wszystko tworzone było dawno temu. A increment_speed jest odzelną funkcją z racji ze prócz samego speed miało być tam więcej kodu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 20 Lutego 2009 Udostępnij Opublikowano 20 Lutego 2009 Dawid, uzasadnij. Krytykować trzeba umieć, a nie pisać bez sensu. Czekam do 24 na odpowiedź... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 20 Lutego 2009 Udostępnij Opublikowano 20 Lutego 2009 Kod nieczytelny, jeśli dobrze przejrzałem kod, potwory przechowujesz na tablicach? I to w dodatku jakoś egzotycznie, nie lepiej na structach? A no i std::list. Pental, bo dodaje prędkość CO KLATKĘ? ; d - Jednak nie, bo to jest do jakiegoś timera podpięte. ;D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Boro Casso Opublikowano 20 Lutego 2009 Autor Udostępnij Opublikowano 20 Lutego 2009 Ehh... jak widać nikt z was nie potrafi czytać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Harrrry Opublikowano 21 Lutego 2009 Udostępnij Opublikowano 21 Lutego 2009 Mi się przyda bo akurat uczę się Allegro i hawkNL =) Co do increment_speed i "Padłem" - tak działają timery w allegro =/ a moim zdaniem allegro to dobry lib i ma funkcje porównywalne z gmem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 21 Lutego 2009 Udostępnij Opublikowano 21 Lutego 2009 Chodzi mi o to, że po cholerę robić funkcję, w której znajduje się JEDNA linia. Na dodatek nic nie zwracająca. Czekam do 24 na odpowiedź...Zdążyłem :) Ed: Oj, wpadłem :P Nie analizowałem całego kodu. Myślałem, że używasz increment_speed() po prostu jako zamiennika speed++ xd... Niech będzie, zwracam honor... :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 21 Lutego 2009 Udostępnij Opublikowano 21 Lutego 2009 Boshe! Powiedz, profesjonalisto, dlaczego Allegro ssie? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Darlix Opublikowano 21 Lutego 2009 Udostępnij Opublikowano 21 Lutego 2009 Harry: Ja nie sądzę by allegro można by porównać do gm'a. Gm ma szereg wbudowanych funkcji i ma tryb 3D (słaby ale jest). Nie sugeruje że allegro nie obsługuje 3D ale jest to tylko rendering programowy, które ma dużo słabsze możliwosci od tego co oferuje nam gm. Ale jedynym dużym plusem allegro w walce z gm'em jest wydajność. ;] Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 21 Lutego 2009 Udostępnij Opublikowano 21 Lutego 2009 Harry, Allegro jest gorsze wydajnościowo pewnie od GM, bo ponieważ w Allegro jest grafika renderowana przez procesor, w GMie przez Directa na karcie, jest róznica? : D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 21 Lutego 2009 Udostępnij Opublikowano 21 Lutego 2009 Dla niewtajemniczonych, Allegro korzysta z DDrawa ( pod wine ofc. ). Dlatego Allegro ssie :) E: Natomiast można go połączyć z inną biblioteką ( np OGL ), wtedy warto użyć takiej biblioteki ( Multiplatformowość ) ;p Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 21 Lutego 2009 Udostępnij Opublikowano 21 Lutego 2009 To już lepiej SDL z openGL, samo w sobie SDL ma ograniczone możliwości :) . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 21 Lutego 2009 Udostępnij Opublikowano 21 Lutego 2009 Też tak myślę że SDL+OGL są bardzo dobrą parą, jednak jeśli ktoś się uprze przy Allegro to jego sprawa ;p Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się