Lekcja 1.0.6 Allegro5 - bitmapy

                                                          BITMAPY:                                     Przykłady z kursu  
 W bibliotece allegro5 mamy możliwość wczytywania, wyświetlania jak i zapisu bitmap w wielu formatach: BMP, PNG, JPG, PCX, TGA. 
 Każdą wczytaną bitmapę możemy obracać, odwracać w poziomie i pionie, skalować, wycinać jej fragment, zapisywać, nadawać przezroczystość. Do tego celu mamy wiele funkcji graficznych.
 Zanim napiszę o wczytywaniu, wyświetlaniu i zapisie bitmap należy wspomnieć o możliwości tworzenia własnych bitmap w pamięci, aby na przykład rysować, wyświetlać tekst na bitmapie, tworzyć warstwy bitmap, zapisywać, itd.
                                                      TWORZENIE BITMAP              
#include <allegro5/allegro.h>// podstawowy nagłówek.
ALLEGRO_BITMAP *al_create_bitmap(int w, int h); // szerokość i wysokość bitmapy,liczby typu int. 
Przykład: 
ALLEGRO_BITMAP *kwadrat = al_create_bitmap(500,500); // tworzymy nową bitmape o podanych wymiarach. 
al_clear_to_color(al_map_rgb(0,120,0)); // nadajemy dany kolor bitmapie, jak i czyścimy podanym kolorem gdy chcemy usunąć wszystko co się na niej znajduje, aby było to możliwe musimy wskazać na nasz kwadrat. 
al_set_target_bitmap(kwadrat); // rysujemy,piszemy na naszej bitmapie kwadrat.
al_set_target_bitmap(al_get_backbuffer(okno));// powrót do naszego okna, lub
al_set_target_backbuffer(okno);
                                                      WCZYTYWANIE  BITMAP         
#include <allegro5/allegro.h> // podstawowy plik nagłówkowy
#include <allegro5/allegro_image.h> //wczytywanie, wyświetlanie i zapis obrazów  BMP,PCX,TGA, JPEG,  PNG. 
#include <allegro5/allegro_native_dialog.h> // plik nagłówkowy do funkcji sprawdzającej wczytanie bitmapy. 
al_init_image_addon(); // inicjowanie bitmap, możliwości odczytu jak i zapisu bitmap. 
al_shutdown_image_addon(); //wyłączenie bitmap. 
Wczytywanie bitmap: 
ALLEGRO_BITMAP *bitmapa = al_load_bitmap("domek.png"); // ładowanie bitmapy w formacie png do pamięci, aby wczytać inny format zmieniamy rozszerzenie:.bmp,.jpg,.pcx,..tga.
if(!bitmapa) {
    al_show_native_message_box(okno, "Błąd", "Coś nie tak",
    "Nie mogę wczytać bitmapy domek!", NULL, ALLEGRO_MESSAGEBOX_ERROR);
     return 0;
    } // sprawdzenie czy bitmapa została poprawnie wczytana.
Jeśli chcemy usunąć z pamięci daną bitmape dajemy   al_destroy_bitmap(obrazek);
                                                               ZAPIS    BITMAP:                       
al_save_bitmap("
ekran.png",al_get_backbuffer(okno)); //zapis całego ekranu, w różnych formatach, .png, .bmp, .jpg, .pcx, .tga. 
al_save_bitmap("zapis.png",bitmapa);// zapis wczytanej lub utworzonej bitmapy, w formatach jak wyżej.
 if(al_key_down(&
klawiatura,ALLEGRO_KEY_Z))al_save_bitmap("ekran.png",al_get_backbuffer(okno));//zapis po wciśnięciu klawisza  Z  
                             Kilka dodatkowych przydatnych funkcji:    
int al_get_bitmap_width(ALLEGRO_BITMAP *bitmapa) // pobranie szerokości danej bitmapy.
int al_get_bitmap_height(ALLEGRO_BITMAP *bitmapa) // pobranie wysokości danej bitmapy.
void al_convert_mask_to_alpha(ALLEGRO_BITMAP *bitmapa, ALLEGRO_COLOR mask_color)//kolor przezroczystości gdy brak go w obrazku(wybór dowolnego koloru).
ALLEGRO_BITMAP *al_clone_bitmap(ALLEGRO_BITMAP *klon) // tworzy kopie bitmapy.
ALLEGRO_BITMAP *al_create_sub_bitmap(ALLEGRO_BITMAP *dziecko, int x, int y,int w, int h); // tworzy kopie bitmapy, lub jej fragment, x i y współrzędne na bitmapie źródłowej, w i h szerokość i wysokość bitmapy docelowej.
ALLEGRO_COLOR al_get_pixel(ALLEGRO_BITMAP *bitmapa, int x, int y); // pobranie koloru piksela z podanej pozycji na bitmapie lub oknie, liczby typu int.

Przykłady:
int szerokosc = al_get_bitmap_width(bitmapa); // bitmapa bitmapa musi być wcześniej wczytana.
int wysokosc = al_get_bitmap_height(bitmapa); // bitmapa bitmapa musi być wcześniej wczytana.
al_convert_mask_to_alpha( bitmapa, al_map_rgb(255,0,255) );//nadanie przezroczystości bitmapie
ALLEGRO_BITMAP *klon = al_clone_bitmap(dolly); // bitmapa dolly musi być wcześniej wczytana.
ALLEGRO_BITMAP *dziecko = al_create_sub_bitmap(rodzic,10, 12, 50, 60);// bitmapa rodzic musi być wcześniej wczytana, wymiary bitmapy docelowej(dziecko) mogą być większe od bitmapy źródłowej.
ALLEGRO_COLOR *kolor = al_get_pixel(bitmapa,19, 68); // bitmapa bitmapa musi być wcześniej wczytana, lub al_get_pixel (al_get_backbuffer(okno),10,10); 


...............................................................................................................
Wyświetla piksel.
al_draw_pixel( x,  y, kolor);
Parametry:
x, y               - pozycja bitmapy na ekranie (liczby typu float).
kolor             - kolor piksela (liczby typu float lub int).
Przykład:
al_draw_pixel( 5, 5, al_map_rgb(255, 255, 255));
..............................................................................................................
Wyświetla bitmapę.
al_draw_bitmap(bitmapa, dx, dy, flaga);
Parametry:
bitmapa        -  ALLEGRO_BITMAP *bitmapa
dx, dy          - pozycja bitmapy na ekranie. (liczby typu float).
flaga            -  odwracanie bitmapy, 0, 1, 2, 3 (liczba typu int). lub
ALLEGRO_FLIP_VERTICAL - odwrócenie w osi x.
ALLEGRO_FLIP_HORIZONTAL - odwrócenie w osi y.









Przykład:
al_draw_bitmap (bitmapa,10,10,ALLEGRO_FLIP_VERTICAL | ALLEGRO_FLIP_HORIZONTAL);// lub 3
...............................................................................................................
Wyświetla skalowalną bitmapę.
al_draw_scaled_bitmap(bitmapa, sx, sy, sw, sh, dx, dy, dw, dh, flaga);
Parametry:
bitmapa          -  ALLEGRO_BITMAP *bitmapa
sx,sy              - pozycja początkowa w osi x i y na bitmapie od której ma być wyświetlana bitmapa (liczby typu float).
sw,sh             - szerokość i wysokość z bitmapy żródłowej w pikselach (liczby typu float).
dx, dy             - pozycja bitmapy na ekranie. (liczby typu float).
dw, dh            - wielkość wyświetlanej bitmapy wyrażona w pikselach (liczby typu float).
flaga               - jak w  al_draw_bitmap
Przykład:
al_draw_scaled_bitmap(bitmapa,15,10,90,90,150,10,128,128,1);
...................................................................................................................
Wyświetla obracalną bitmapę.
al_draw_rotated_bitmap(bitmapa, cx, cy, dx, dy, kat, flaga);
Parametry:
bitmapa     -  ALLEGRO_BITMAP *bitmapa
cx,cy          -  pozycja w osi x i y na bitmapie, względem której ma być obracana bitmapa.(liczby typu float).
dx, dy       - pozycja bitmapy na ekranie. (liczby typu float).
kat             - kąt obrotu w prawo podany radianach. (liczba typu float).
flaga         - jak w  al_draw_bitmap.
Przykład:
al_draw_rotated_bitmap(bitmapa, 64, 64,350, 74, 3.14/4, 0);
..................................................................................................................
Wyświetla wycinek  bitmapy.
al_draw_bitmap_region(bitmapa, sx, sy, sw, sh, dx, dy, flaga);
Parametry:
bitmapa   -  ALLEGRO_BITMAP *bitmapa
sx,sy        - pozycja x i y na bitmapie źródłowej.(liczby typu float).
sw,sh       - szerokość i wysokość bitmapy docelowej.(liczby typu float).
dx, dy      - pozycja bitmapy docelowej na ekranie. (liczby typu float).
flaga        - jak w  al_draw_bitmap.
Przykład:
al_draw_bitmap_region(bitmapa,64,0,64, 64, 520, 60, 0);
....................................................................................................................
Wyświetla skalowalną i obracalną bitmapę.
al_draw_scaled_rotated_bitmap(bitmapa, cx, cy, dx, dy, skalax, skalay, kat, flaga);
Parametry:
bitmapa     -  ALLEGRO_BITMAP *bitmapa
cx,cy        -  pozycja w osi x i y na bitmapie, względem której ma być obracana bitmapa.(liczby typu float).
dx, dy       - pozycja bitmapy na ekranie. (liczby typu float).
skalax, skalay - wielkość bitmapy. (liczby typu float).1 to normalna wielkość,2 to dwa razy większa.
kat           - kąt obrotu w prawo podany radianach. (liczba typu float).
flaga         - jak w  al_draw_bitmap.
Przykład:
al_draw_scaled_rotated_bitmap(bitmapa, 64, 64,90,225, 0.8,1.2,3.14/3,0);
.......................................................................................................................

Lekcja 1.0.5 Allegro5 - prymitywy

                  PRYMITYWY                                                 LINK->Przykładowe programy.   
 Aby wyświetlać proste linie, trójkąty, prostokąty, okręgi, i inne figury geometryczne, nie potrzebujemy wyświetlać bitmap wystarczą nam figury geometryczne, tak zwane prymitywy. 
#include <allegro5/allegro_primitives.h> //plik nagłówkowy.
al_init_primitives_addon(); //inicjowanie prymitywów.
al_shutdown_primitives_addon(); //Wyłączenie prymitywów odbywa się automatycznie przy wyjściu z programu, ale możemy to zrobić w każdej chwili podczas jego działania.
Kolory prymitywów możemy określić wcześniej za pomocą (np. ALLEGRO_COLOR kolor = al_map_rgb0,  0255); //lub bezpośrednio w funkcjial_draw_line( 10, 15, 80, 90, al_map_rgba( 0, 0, 255, 128), 4); // tu linia szeroka na 4 piksele, plus dodanie przezroczystości (ostatni parametr). 


Rysuje prosty odcinek między dwoma punktami.
  al_draw_line( x1, y1, x2, y2, kolor, szerokosc);
  Parametry:
  x1, y1, x2, y2 - początek i koniec linii. (liczby typu float).
  kolor              - kolor linii.
  szerokosc      - szerokość linii. (liczba typu float).

Rysuje trójkąt (linie) pomiędzy trzema punktami.
  al_draw_triangle( x1, y1, x2, y2, x3, y3, kolor, szerokosc);
  Parametry:
  x1, y1, x2, y2, x3, y3 - trzy punkty trójkąta.(liczby typu float).
  kolor                          - kolor linii trójkąta.
  szerokosc                  - szerokość linii. (liczba typu float).

Rysuje wypełniony trójkąt.
  al_draw_filled_triangle(x1,y1,x2,y2,x3,y3,kolor);
  Parametry:
  x1, y1, x2, y2, x3, y3 - trzy punkty trójkąta.(liczby typu float).
  kolor                          - kolor trójkąta.

Rysuje prostokąt (linie) pomiędzy czterema punktami.
  al_draw_rectangle(x1,y1,x2,y2,kolor,szerokosc);
  Parametry:
  x1, y1, x2, y2 - lewy górny i prawy dolny punkt prostokąta.(liczby typu float).
  kolor              - kolor linii prostokąta .
  szerokosc      - szerokość linii. (liczba typu float).

Rysuje wypełniony prostokąt.
  al_draw_filled_rectangle(x1,y1,x2,y2,kolor);
  Parametry:
  x1, y1, x2, y2 - lewy górny i prawy dolny punkt prostokąta.(liczby typu float).
  kolor              - kolor prostokąta.

Rysuje zaokrąglony prostokąt (linie) pomiędzy czterema punktami.
  al_draw_rounded_rectangle( x1, y1, x2, y2, rx, ry, kolor, szerokosc);
  Parametry:
  x1, y1, x2, y2 - lewy górny i prawy dolny punkt prostokąta.(liczby typu float).
  kolor              - kolor linii prostokąta .
  rx, ry              - promień łuku.(liczby typu float).
  szerokosc       - szerokość linii. (liczba typu float).

Rysuje zaokrąglony wypełniony prostokąt.
  al_draw_filled_rounded_rectangle( x1, y1, x2, y2, rx, ry, kolor);
  Parametry:
  x1, y1, x2, y2 - lewy górny i prawy dolny punkt prostokąta.(liczby typu float).
  kolor              - kolor prostokąta .
  rx, ry              - promień łuku.(liczby typu float).

Rysuje okrąg.
  al_draw_circle( cx,  cy,  r, kolor, szerokosc);
  Parametry:
  cx, cy - środek okręgu.(liczby typu float)
  r         - promień okręgu. (liczba typu float).
  kolor  - kolor linii okręgu.
  szerokosc - szerokość linii okręgu. (liczba typu float).

Rysuje wypełniony okrąg.
  al_draw_filled_circle( cx,  cy,  r, kolor);
  Parametry:
  cx, cy - środek okręgu.(liczby typu float).
  r         - promień okręgu. (liczba typu float).
  kolor  - kolor okręgu.

 To tylko kilka najbardziej przydatnych prymitywów. tu link do pozostałych PRYMITYWY

Przykładowy kod:

#include <allegro5/allegro.h>
#include <allegro5/allegro_primitives.h>
int main()
{
    al_init();
    al_init_primitives_addon();
    al_install_keyboard();
    ALLEGRO_KEYBOARD_STATE klawiatura;
    al_set_new_display_flags(ALLEGRO_WINDOWED);
    ALLEGRO_DISPLAY *okno = al_create_display(400,300);
    al_set_window_title( okno,"Allegro5 - Prymitywy");
    ALLEGRO_EVENT_QUEUE *event_queue = al_create_event_queue();
    al_register_event_source(event_queue, al_get_display_event_source(okno));
    ALLEGRO_EVENT event;
    while(!al_key_down(&klawiatura, ALLEGRO_KEY_ESCAPE))
    {
        al_get_next_event(event_queue, &event);if(event.type == ALLEGRO_EVENT_DISPLAY_CLOSE) { return 0; }
        al_get_keyboard_state(&klawiatura);
        al_clear_to_color(al_map_rgb(150,150,150)); //tło
        al_draw_line( 10, 15, 80, 90, al_map_rgba( 0, 255, 0, 128), 4);
        al_draw_triangle(100, 15, 150, 25, 125, 80, al_map_rgb(255, 0, 0), 8);
        al_draw_filled_triangle(190, 15, 250, 76, 175, 80, al_map_rgb(0,0,255));
        al_draw_rectangle(250,10,300, 60,al_map_rgba(255,255,0,128),2);
        al_draw_filled_rectangle(280, 20,350, 80,al_map_rgba(0,0,0,100));
        al_draw_rounded_rectangle( 50,100,100,150,12,12,al_map_rgb(0,255,255),5);
        al_draw_filled_rounded_rectangle(110, 90,150,154, 12, 20,al_map_rgb(128,0,255));
        al_draw_circle(200,120, 30, al_map_rgb( 0,128, 0), 20);
        al_draw_filled_circle(250,120, 34, al_map_rgba(200,28, 0,60));
        al_flip_display();
        al_rest(0.005);//pauza
    }
    al_destroy_display(okno);
    return 0;
}

Lekcja 1.0.4 Allegro5 - klawiatura i time.

 Aby sterować obiektami w programach, grach potrzebna jest nam znajomość obsługi klawiatury,
na początek mały przykładzik:
#include <allegro5/allegro.h>
int szer=320,wys=240;
int main()
{
    al_init();
    al_install_keyboard();
    ALLEGRO_KEYBOARD_STATE klawiatura;
    ALLEGRO_DISPLAY *okno = al_create_display( szer, wys);
    al_set_window_title( okno,"Allegro5 klawiatura i czas");
    ALLEGRO_BITMAP *kwadrat = al_create_bitmap(32,32);
    al_set_target_bitmap(kwadrat);
    al_clear_to_color(al_map_rgb(255,255,0));
    al_set_target_bitmap(al_get_backbuffer(okno));
    int x=100, y=100;
    double czas = al_get_time()
    while( !al_key_down( &klawiatura, ALLEGRO_KEY_ESCAPE))
    {
        al_get_keyboard_state(&klawiatura);
        if ( al_get_time() > czas + 0.01)
        {
            if ( al_key_down(&klawiatura, ALLEGRO_KEY_RIGHT )   && x  <=  szer-32) x=x+1 ;
            if ( al_key_down(&klawiatura, ALLEGRO_KEY_LEFT  )    && x  >=           0) x=x- 1 ;
            if ( al_key_down(&klawiatura, ALLEGRO_KEY_DOWN  ) && y <= wys  -32) y=y+1 ;
            if ( al_key_down(&klawiatura, ALLEGRO_KEY_UP    )      && y  >=           0) y=y- 1 ;
            czas = al_get_time();
        }
        al_clear_to_color(al_map_rgb_f(0.5,0.5,0.5));
        al_draw_bitmap (kwadrat,x,y,0);
        al_flip_display();
        al_rest(0.001);
    }
    al_destroy_bitmap(kwadrat);
    al_destroy_display(okno);
    return 0;
}

Opis:
int szer=320,wys=240;// aby łatwiej zmieniać sobie wysokość i szerokość ekranu, utworzymy dwie zmienne.
al_install_keyboard();// instalujemy klawiaturę.
A tak, al_uninstall_keyboard();// odinstalowujemy klawiaturę.
ALLEGRO_KEYBOARD_STATE klawiatura;// tworzymy zmienną do struktury stanów klawiatury.
while( !al_key_down( &klawiatura, ALLEGRO_KEY_ESCAPE))// początek pętli głównej,sprawdzenie czy wciśnięty klawisz escape, kończący program.
al_get_keyboard_state(&klawiatura); //odczyt stanu klawiatury
if ( al_key_down(&klawiatura, ALLEGRO_KEY_RIGHT )   && x  <=  szer-32) x=x+1 ;//sprawdzenie jaki klawisz wciśnięty i czy pozycja x (minus szerokość bitmapy) większa od szerokości ekranu.
Kody klawiszy <-link
double czas = al_get_time();//zwraca liczbę sekund od czasu zainicjowania
Link -> Link do przykładowych programów  Allegro-5

Lekcja 1.0.3 Allegro5 - pliki nagłówkowe, inicjowanie Allegro, kolory

  W Allegro5 mamy modułową budowę elementów  składowych biblioteki jedne nagłówki  dodajemy przed innymi a więc:
#include <allegro5/allegro.h> - podstawowy plik nagłówkowy, dajemy go zawsze, zawarta w nim jest obsługa klawiatury i myszki, obsługa okna, itd.
#include <allegro5/allegro_primitives.h> - rysowanie linii, okręgów, trójkątów, kwadratów, itd.
#include <allegro5/allegro_image.h> -wyświetlanie i zapis obrazów BMP, PCX, TGA, JPEG,  PNG.
#include <allegro5/allegro_font.h> - czcionka bitmapowa.
#include <allegro5/allegro_ttf.h>   - czcionka ttf. (TrueType) (z #include <allegro5/allegro_font.h> )
#include <allegro5/allegro_color.h> - zmiana formatu kolorów rgb, cmyk, hsl, yuv, html.
#include <allegro5/allegro_audio.h> - odtwarzanie, zapis dźwięku.
#include <allegro5/allegro_acodec.h> - kodeki audio .wav, .flac, .ogg, .it, .mod,.s3m,.xm.(z  #include <allegro5/allegro_audio.h> )
#include <allegro5/allegro_native_dialog.h> - tworzenie okien dialogowych.
#include <allegro5/allegro_opengl.h>
#include <allegro5/allegro_direct3d.h>
#include <allegro5/allegro_physfs.h> - odczyt plików .zip
#include <allegro5/allegro_memfile.h> - odczyt i zapis do pamięci komputera.
od Allegro5.1.0
#include <allegro5/allegro_video.h> - odczyt plików wideo
#include <allegro5/allegro_shader.h> - cieniowanie, vertex i pixel shader, GLSL, HLSL lub Cg.
Więcej informacji w kolejnych lekcjach.
                                                              KOLORY
W Allegro5 do reprezentacji kolorów mamy strukturę w skład której wchodzą trzy lub cztery argumenty:
ALLEGRO_COLOR al_map_rgbunsigned char r, unsigned char g, unsigned char b)
ALLEGRO_COLOR al_map_rgba(unsigned char r, unsigned char g, unsigned char b, unsigned char a)
ALLEGRO_COLOR al_map_rgb_f(float r, float g, float b)
ALLEGRO_COLOR al_map_rgba_f(float r, float g, float b, float a)
  Przykłady:
al_map_rgb( 0128255); argumenty to liczby unsigned char czyli z zakresu od 0 do 255.
al_map_rgba0128255,255); tu jak wyżej plus kanał alpha ( 255 brak )
al_map_rgb_f( 0.0, 0.5, 1.0); argumenty to liczby float z zakresu 0.0f do 1.0f
al_map_rgba_f( 0.0, 0.5, 1.0, 1.0); tu jak wyżej plus kanał alpha  ( 1.0f  brak)
Możemy również utworzyć zmienną
ALLEGRO_COLOR czerwonyal_map_rgb255,  0,  0); - liczby typu unsigned char
ALLEGRO_COLOR zielony     = al_map_rgb_f(  0.0, 1. 0,  0.0); - liczby typu  float
Przykład.
// Program kolory i inicjowanie Allegro
#include <allegro5/allegro.h>
#include <allegro5\allegro_native_dialog.h>
ALLEGRO_DISPLAY *okno = NULL;
int main()
{
    if(!al_init()) {
    al_show_native_message_box(okno, "Błąd", "hej no co?",
    "Nie mogę zainicjować Allegro5!\n weź się ogarnij!",
    NULL, ALLEGRO_MESSAGEBOX_ERROR);
    return 0;
  }
    al_set_new_window_position(20,30);
    al_set_new_display_flags(ALLEGRO_WINDOWED);
    okno = al_create_display( 320, 240);
    if(!okno) {
    al_show_native_message_box(okno, "Błąd", "NULL",
    "Nie mogę utworzyć okna!",
    NULL, ALLEGRO_MESSAGEBOX_ERROR);
    return 0;
  }
   al_set_window_title( okno,"Kolory i inicjowanie Allegro5");
   ALLEGRO_BITMAP *kwadrat*prostokat= NULL;
   kwadrat  = al_create_bitmap(50,50);
   prostokat= al_create_bitmap(100,50);
if(!kwadrat or !prostokat) {
    al_show_native_message_box(okno, "Błąd", "Coś nie tak",
    "Nie mogę utworzyć bitmap!",
    NULL, ALLEGRO_MESSAGEBOX_ERROR);
    return 0;
  }
   al_set_target_bitmap(kwadrat);
   al_clear_to_color(al_map_rgb(0,255,0));
   al_set_target_bitmap(prostokat);
   al_clear_to_color(al_map_rgb(255,0,0));
   al_set_target_bitmap(al_get_backbuffer(okno));
   al_clear_to_color(al_map_rgb_f(1.0,1.0,0.0));
   al_draw_bitmap(kwadrat, 100, 100, 0);
   al_draw_bitmap(prostokat,125, 125, 0);
   al_flip_display();
   al_rest(5.0);
   al_destroy_display(okno); //usuwamy okno z pamięci i zwalniamy pamięć 
    return 0;
}
Opis:
#include <allegro5/allegro.h> 
      if(!al_init()) {
      al_show_native_message_box(okno, "Błąd", "hej no co?",
      "Nie mogę zainicjować Allegro5!\n weź się ogarnij!",
       NULL, ALLEGRO_MESSAGEBOX_ERROR);
      return 0;
   }
   - plik nagłówkowy,  inicjowanie  i sprawdzenie czy można zainicjować Allegro5 za pomocą funkcji  al_show_native_message_box - wcześniej dołączamy nagłówek #include<allegro5\allegro_native_dialog.h> w przypadku niepowodzenia zwraca NULL i wyświetla 


Możemy również sprawdzać w konsoli dla C++
#include <iostream>
   if(!al_init()){
std::cout << "Nie mozna zainicjowac Allegro5!" << std::endl;
getchar();
return 0;
}
 else   std::cout << "Zainicjowano Allegro5!\n" << std::endl;
zamykać konsole klawiszem enter lub escape.
 lub dla C:
#include <stdio.h>
  if(!al_init()){
         fprintf(stderr, "Nie mozna zainicjowac Allegro5!");
         return -1;
    }
 else fprintf(stderr, "Zainicjowano Allegro5!\n");
Gdy nie chcemy sprawdzać dajemy po prostu: al_init(); - kończymy średnikiem.
al_set_new_window_position(20,30); - pozycja okna na ekranie.
al_set_new_display_flags - flagi jakie udostępnia Allegro5:
al_set_new_display_flags(ALLEGRO_WINDOWED); - Ekran  w trybie okienkowym  
al_set_new_display_flags(ALLEGRO_RESIZABLE | ALLEGRO_WINDOWED ); - Ekran w  trybie okienkowym + zmiana rozmiaru +  przycisk maksymalizacji resizable (tylko w połączeniu z ALLEGRO_WINDOWED).
al_set_new_display_flags(ALLEGRO_FULLSCREEN); - Ekran w trybie pełnoekranowym.
al_set_new_display_flags(ALLEGRO_NOFRAME); - Okno bez ramki (tj. nie ma granicy (ramki) lub paska tytułowego).
al_set_new_display_flags(ALLEGRO_FULLSCREEN_WINDOW); - Ekran trybie pełnoekranowym  - rozdzielczość zależna od wielkości ekranu na pulpicie (bez względu na to co wpiszemy do "al_create_display").
al_set_new_display_flags(ALLEGRO_OPENGL);
al_set_new_display_flags(ALLEGRO_OPENGL_3_0);
al_set_new_display_flags(ALLEGRO_DIRECT3D);
al_set_new_display_flags(ALLEGRO_OPENGL_FORWARD_COMPATIBLE);
al_set_new_display_flags(ALLEGRO_GENERATE_EXPOSE_EVENTS);
ALLEGRO_DISPLAY *okno = NULL; - tworzymy wskaźnik do naszego ekranu, który nazwaliśmy sobie okno.
 Istnieje możliwość utworzenia więcej niż jednego okna, wystarczy podać inną nazwę.
okno = al_create_display( 320, 240); - utworzenie okna o podanych wymiarach.
 if(!okno) {
    al_show_native_message_box(okno, "Błąd", "NULL",
    "Nie mogę utworzyć okna!",
    NULL, ALLEGRO_MESSAGEBOX_ERROR);
    return 0;
  } - sprawdzenie czy można utworzyć okno, w przypadku braku możliwości, zwróci false.

al_set_window_title( okno,"Kolory i inicjowanie Allegro5"); // tytuł okna.

   ALLEGRO_BITMAP *kwadrat*prostokat= NULL; // wskaźniki do bitmap ( hurtem )
   kwadrat  = al_create_bitmap(50,50);    // rozmiar bitmapy
   prostokatal_create_bitmap(100,50); // rozmiar bitmapy
if(!kwadrat or !prostokat) {
    al_show_native_message_box(okno, "Błąd", "Coś nie tak",
    "Nie mogę utworzyć bitmap!",
    NULL, ALLEGRO_MESSAGEBOX_ERROR);
    return 0;
  } - sprawdzenie czy można utworzyć bitmapy, w przypadku braku możliwości, zwróci false.

al_set_target_bitmap(kwadrat);
al_clear_to_color(al_map_rgb(0,255,0)); // nadajemy dany kolor każdej bitmapie
al_set_target_bitmap(prostokat);
al_clear_to_color(al_map_rgb(255,0,0));

al_set_target_bitmap(al_get_backbuffer(okno)); // powracamy do naszego okna
al_clear_to_color(al_map_rgb_f(1.0,1.0,0.0));  // czyści okno podanym kolorem.
al_draw_bitmap(kwadrat, 100, 100, 0); // wyświetlamy nasz kwadrat  pozycja  x i y
al_draw_bitmap(prostokat,125, 125, 0); // tu również, trzeci parametr to obrócenie i odwrócenie 0,1,2,3. 
al_flip_display(); //  wyświetlamy wszystko na ekran
al_rest(5.0); // jako że nie znamy jeszcze obsługi klawiatury, aby zamknąć nasz program, dajemy pauzę 5 sekund i program się zamyka. 
al_destroy_display(okno); // usuwamy okno z pamięci i zwalniamy pamięć 

LinkPrzykładowe programy

Lekcja 1.0.2 Allegro5 - pobieranie i instalacja.

 Bibliotekę Allegro 5 pobieramy z oficjalnej strony:  Allegro 5.0.9  i    Allegro 5.1.7
Biblioteki  skompresowane są do formatu 7z, którą można wypakować między innymi programem  (7zip.)

Oczywiście programik przyda się również do wypakowania innych formatów jak RAR, zip.
Dla Code::Blocks i Dev-C++ pobieramy wersje skompilowaną pod MinGW zależnie od tego jaką mamy wersje MinGW.
      Microsoft Visual C++  zależnie od wersji MSVC .
                   Instalacja Allegro 5 dla Code::Blocks 10.05 w systemie Windows
Gdyby były problemy z instalacją code::blocks tu kurs Code::Blocks kurs.
Wypakowujemy Allegro w dowolnym miejscu na dysku, będzie to folder o nazwie allegro-5.0.9-mingw-4.6.1-tdm (zależnie od pobranej wersji). 
Gdy mamy Code::Blocks 12.11 z MinGW 4.7.1 TDM należy pobrać wersje Allegro 5 - MinGW 4.7.0
Zawartość to trzy katalogi: bin, include, lib
bin         - pliki typu dll
include  - pliki nagłówkowe typu .h
lib          - biblioteka statyczna pliki .a lub .lib
 Podam tutaj najłatwiejszą metodę, a więc:
  • zawartość include do include w MinGW
  • dwa pliki z lib do lib w MinGW ( liballegro-5.0.9-monolith-mt.a  i  liballegro-5.0.9-monolith-mt-debug.a)
  • w bin są dll-ki potrzebne do uruchomienia naszych programów oczywiście o takich samych nazwach jak liby.
I to tyle pozostałe pliki zbędne do początkowej nauki. 
                Pierwszy program Allegro 5 w Code::Blocks 10.05
Uruchamiamy Code::Blocks → File → New → Project... → Empty project → GoNext>
wpisujemy tytuł (start) i miejsce zapisu(C:\programy-A5).
 kliknij na obrazek aby powiększyć.
ponownie Next>
 kliknij na obrazek aby powiększyć.
 Nic tu nie zmieniamy i Finish, mamy gotowy pusty projekt.    
Tworzymy plik *.cpp Ctrl-Shift-N → Tak → main.cpp → Zapisz → OK.
 Dodajemy liby do linkera. Project → Build options...→ Linker settings → Link libraries:
dla Debug wpisujemy → allegro-5.0.9-monolith-mt-debug
dla Release → allegro-5.0.9-monolith-mt
  Code::Blocks i Allegro5 gotowe do pracy.
Link -> Przykładowe programy  Allegro-5

Lekcja 1.0.1 Allegro5 - środowisko, biblioteka, kursy, c, c++

Allegro - otwarta i wieloplatformowa biblioteka do tworzenia gier 2D oraz 3D. Projekt został założony w 1996 przez Shawna Hargreavesa, który po pewnym czasie udostępnił źródła biblioteki wszystkim zainteresowanym. Początkowo biblioteka była rozpowszechniana na licencji gift-ware, jednak od wersji 5.0 jest udostępniana na licencji zlib .
Trzeba tutaj dodać że allegro5, nie jest kontynuacją allegro4, została napisana od zera, i nie są ze sobą zgodne składnią kodu.   W Allegro5 mamy dwie linie rozwoju biblioteki oficjalną(stabilną) 5.0.x, aktualna to 5.0.9, i wersje testową (niestabilną) 5.1.x(wip). zawiera wiele funkci niedostępnych w wersji stabilnej, ostatnia wersja to 5.1.7.  
 Co około 3, 4, miesiące jest wydawana kolejna wersja stabilna z poprawkami i nowymi funkcjami. 



 Aby pisać gry, programy w Allegro 5 potrzebna jest nam znajomość języka C lub C++ ponadto obsługa środowiska programistycznego, mamy spory wybór środowisk:
Jak i kursów:
Kurs-C++ ze strony cpp0x.pl