Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Autor: dudek
Biblioteki C++

Instalacja Allegro

[lekcja] Rozdział 1. Opis instalacji biblioteki Allegro.

Wstęp

Allegro to między-platformowa biblioteka do tworzenia gier 2d oraz aplikacji multimedialnych. Pierwszą wersje napisał Shawn Hargreaves, było to w 1996 roku, dla kompilatora djgpp w mieszance C i assemblera.           Allegro to skrót od Allegro Low Level Game ROutines. Biblioteka jest udostępniona w internecie razem ze swoim kodem źródłowym. Strona domowa allegro: http://alleg.sourceforge.net/

Do używania allegro nie trzeba zaawansowanej wiedzy o C++. Wystarczy umiejętność programowania strukturalnego i podstawy :) Dla tych co nie wiedzą programowanie strukturalne to zazwyczaj programowanie nie używając obiektów. Czyli prościej - dzielenie aplikacji na dane i kod. Oczywiście nic nie stoi na przeszkodzie żeby programować obiektowo używając allegro. Przykład to gierka, którą zamieściłem na forum. Lecz teraz widzę, że jest wysoce niedopracowania (jeśli chodzi o używanie obiektowości). Za to można zobaczyć sobie zastosowanie prostych funkcji rysujących prymitywy (figury na płaszczyźnie).

Dlaczego allegro?

Dlaczego akurat allegro wybrałem na początki swojej kariery jako programista gier? Przede wszystkim za względną i nie zniechęcającą prostotę przy podstawach nauki. Allegro to również idealny wybór dla ludzi, którzy nie chcą stosować bibliotek graficznych "jedynego słusznego systemu" i chcą żeby ich gry były łatwe do przeniesienia pod system linux. Zaznaczam, że sam jestem początkującym w allegro :D.

Na przykład fajnej gry napisanej przy pomocą allegro dam link do pewnego, chyba już ukończonego, projektu na gamedev.pl: http://tiny.pl/lxmb

Największą wadą według mnie można uznać to, że allegro nie jest zorientowane obiektowo. Mi to nie przeszkadza ale musiałem to zaznaczyć :).

Opis możliwości można znaleźć tu: http://alleg.sourceforge.net/readme.pl.html

Instalujemy i odpalamy allegro :D

Opiszę tu proces instalacji allegro pod Dev-C++ (instalacja w Code::Blocks opisana jest niżej).
  • Odpalamy Dev-C++. Zakładka Pomoc - > O Dev-C++ - > Sprawdź uaktualnienia
  • W nowo otwartym oknie przy "Select devpak server" wybieramy "devpaks.org Community Devpaks".
  • Wciskamy (na samym dole) "Check for updates"
  • Po załadowaniu sie listy, w "Groups" wybieramy Allegro
  • Wciskamy "Download selected"
Po chwili (od waszego łącza zależy jak długiej :) ) mamy już bibliotekę allegro. W "Groups/Allegro" znaleźć można jeszcze fajne pluginy takie jak AllegroGL, który umożliwia wykorzystywanie OpenGL z allegro :).

Czas na odpalenie i napisanie pierwszej aplikacji. Plik - > Nowy - > Projekt - > Przechodzimy na zakładkę MultiMedia - > Allegro Application Static. Wybieramy jakieś miejsce na nasz nowy projekt i gotowe. Dev-C++ nawet za nas dodał funkcje inicjalizujace tryb allegro :). Przyjrzyjmy się im:
#include <allegro.h>
 - dyrektywa, która dołącza bibliotekę allegro.

C/C++
void init() {
    int depth, res;
    allegro_init();
    depth = desktop_color_depth();
    if( depth == 0 ) depth = 32;
   
    set_color_depth( depth );
    res = set_gfx_mode( GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0 );
    if( res != 0 ) {
        allegro_message( allegro_error );
        exit( - 1 );
    }
   
    install_timer();
    install_keyboard();
    install_mouse();
    /* add other initializations here */
}

  • int depth, res
     - inicjalizacja zmiennych pomocniczych
  • allegro_init()
     - funkcja, która inicjalizuje tryb allegro
  • depth = desktop_color_depth()
     - funkcja desktop_color_depth() zwraca do zmiennej depth głębie kolorów, którą mamy w windowsie:) (w przypadku, gdy ktoś programuje pod linuxem było to by pewnie jego środowisko graficzne)
  • if( depth == 0 ) depth = 32
     - jeśli są jakieś problemy z odczytaniem, bądź jakimś cudem desktop_color_depth() zwróciło 0 automatycznie ustawia depth na 32.
  • set_color_depth( depth )
     - funkcja ustawia głębie kolorów naszej aplikacji na podana w nawiasie. Wczesniej do zmiennej depth była zwrócona głębia naszego pulpitu więc funkcja stara się ustawić naszą domyślną głębie
  • res = set_gfx_mode( GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0 )
     - uruchamia tryb graficzny i w przypadku sukcesu zwraca 0 do zmiennej res.
    Specyfikacja funkcji przedstawia sie następująco:
    int set_gfx_mode( int card, int w, int h, int v_w, int v_h )
    card zazwyczaj jest jednym z "magicznych sterowników allegro" w skrócie można powiedzieć, że to "wirtualne sterowniki", które pozwalają uniknąć zamieszania z różnorodnością sterowników pod wiele kart graficznych.
    int w
     i
    int h
     to jest szerokość i długość rozdzielczości a
    v_w
     i
    v_h
     to szerokość i długość rozdzielczości naszego wirtualnego ekranu (o tym kiedy indziej)
  • C/C++
    if( res != 0 ) {
        allegro_message( allegro_error );
        exit( - 1 );
    }
    Instrukcja warunkowa, która sprawdza czy ustawienie rozdzielczości powiodło się. Jeśli coś nie poszło jak trzeba allegro zwróci komunikat ze stosowną informacją :)
  • C/C++
    install_timer();
    install_keyboard();
    install_mouse();
    Funkcje instalujące timer, obsługę myszy oraz klawiatury:) O timerze i jego zastosowaniach dokładniej kiedy indziej.

To by było na tyle jeśli chodzi o podstawową inicjalizacje :). Została jeszcze funkcja deinit():

C/C++
void deinit() {
    clear_keybuf();
    /* add other deinitializations here */
}

Jedyne co ona robi to czyści bufor klawiatury.

C/C++
int main() {
    init();
   
    while( !key[ KEY_ESC ] ) {
        /* put your code here */
    }
   
    deinit();
    return 0;
}
END_OF_MAIN()

Komentarza wymaga tylko END_OF_MAIN(). Allegro Manual zaleca używanie tego makra. Podyktowane jest to wieloplatformowością allegro i pozwala uniknąć wielu problemów z tym związanych :). Według Allegro Manual tego makra wymaga Windows, oraz niektóre dystrybucje UNIXOWE i MAC OS X.

Instalacja w Code::Blocks

By zainstalować bibliotekę w tym środowisku należy ją ściągnąć specjalnie przygotowaną. Pobieramy pliki(a dokładnie foldery) Allegro 4.2.2 - MinGW i kopiujemy je do Coda::B - > u mnie jest to ścieżka domyślna, więc C:\Program Files\CodeBlocks\MinGW. Dodatkowo możesz wrzucić pliki(foldery) AllegroGL 0.4.2 w to samo miejsce.

Polecam również specjalny dodatek do środowiska Code::Blocks, który umożliwia tworzenie projektu Allegro. Wystarczy ściągnąć i zainstalować allegro_wizard_codeblocks. Po instalacji dodatku mamy do dyspozycji 4 wbudowane gotowe projekty. Jedynie Hallo Word będzie działać poprawnie, reszta potrzebuje dodatkowych bibliotek lub innych dodatków by poprawnie się skompilowały.

Więcej informacji na temat allegro można znaleźć na www.allegro.cc.

Zakończenie

To wszystko jeśli chodzi o podstawy podstaw. Czas omówić działanie allegro. Wszystko opiera się o obiekty typu BITMAP. Głównym takim obiektem jest ekran. Jeśli będzie trzeba użyć jakiegoś obrazka jako tła to będzie on wczytywany do osobnego obiektu. Wiem, ze może to brzmieć trochę dziwacznie ale wszystko pokażę na przykładach oraz również wyjaśnię na czym polega animacja buforowana i ogólne zastosowanie buforów ekranów. Allegro standardowo obsługuje tylko 4 formaty: BMP, PCX, TGA i LBM.

Na koniec dodam, że warto obejrzeć przykłady (znajdują się w Dev-Cpp\Allegro\Examples) oraz demo gierkę (Allegro\Demo). Już teraz radzę zajrzeć do Dev-Cpp\docs\allegro i oswoić się z manualem. Nie ważne jakie kursy by się przeczytało nic nie uchroni programisty od korzystania z dokumentacji :).
Poprzedni dokument Następny dokument
Kurs Allegro 4.x, C++ Wstęp