Moje prace napisane w C++ i Allegro


Strona główna
Moje rozwiązania
Aby przykłady działały w "CodeBlocks" należy w znacznikach 'include' usunąć puste pola

Efekt zwijania obrazu- użyty w grze "Rubikon"

#include < allegro.h >
//...
// inicjacja allegro4, bitbap, zegara itp.
//...
blit(screen,obr2,0,0,0,0,800,600);  // bitmap do zwijania
blit(obr2,bufor,0,0,0,0,800,600);   // bitmap zwijany do bufora
int k=0;
for(int i=0; i<600; ++i)
{
    speed=0;
    k=0;                            // szerokosc paska zwijania
    while(k<30)
    {
        if(mouse_b==1) speed++;     // dodatkowe przyspieszenie zwijania
        speed++;
        //-- petla zwalniajaca ---
        if(speed>1)
        {
            blit(obr2,bufor,0,i-k,0,i+k,800,1);  // szykowanie paska zwijania
            ++k;
            // odrozniajacy sie pasek  zwijania 
            for(int j=0; j<400; ++j) vline(obr2,j*2,0,k, makecol(99,77,77));
        }
    }
    // odrozniajacy sie pasek  zwijania 
    for(int j=0; j<400; ++j)  vline(obr2,j*2,i,i+1, makecol(88,66,66));
    // wstawia linię drugiego obrazu od góry
    blit(obr1,bufor,0,i,0,i,800,1); 
    // jasna linia na dole paska zwijania                     
    hline(bufor,0,i+1,800,makecol(155,150,150));   
    // ciemna linia na dole paska zwijania       
    if(i>30) hline(bufor,0,i+30+1,800,makecol(50,30,30)); 
    blit(bufor,screen,0,0,0,0,800,600);         // wszystko na ekran
    rest(1);                                    // mała pauza
}		  
Efekt przesuwania obrazu- przykładowy obrazek TUTAJ

/// marianekA - przesuwane tlo z pasujacymi bokami  ///
#include < allegro5/allegro.h >
#include < allegro5/allegro_image.h >
//
ALLEGRO_KEYBOARD_STATE klaw;
int main()
{
    al_init();                            // Allegro 5
    al_install_keyboard();                // klawiatura
    al_init_image_addon();                // obrazy/grafika
    ALLEGRO_DISPLAY *okno = al_create_display( 1024, 600);  // rozmiar okna
    ALLEGRO_BITMAP *tlo = al_load_bitmap("widok.jpg");  // obrazek (max szer. 4000px)
    int ho=al_get_display_width(okno);    //szerokosci obrazka
    int ht=al_get_bitmap_width(tlo);      //szerokosci obrazka
    int v=0;           // licznik przebytej drogi obrazka
    int v1=0;          // licznik przebytej drogi okna
    float sz = 0.005;  // szybkość przesuwania
    while( !al_key_down( & klaw, ALLEGRO_KEY_ESCAPE ) )
    {
        al_get_keyboard_state( & klaw );  //sprawdza czy wcisniety klawics
        ++v;
        if(v==ht)  v=0;  // gdy "v" osiągnie szerokość obrazka
        if(v1==ho) v1=0; // gdy "v1" osiągnie szerokość okna
        al_draw_bitmap_region(tlo,v,0,ht,600,0,0,0);
        if(v> (ht-ho-1)) ++v1, al_draw_bitmap_region(tlo,0,0,v1,600,ho-v1,0,0);
        al_flip_display();
        al_rest(0.005);
    }
    return 0;
}		
Niestandartowy przycisk... - jak w aplikacji "Flagi"...

#include < allegro5/allegro.h >
#include < allegro5/allegro_primitives.h >

int main()
{
    al_init();                    // Allegro 5
    al_install_mouse();           // myszka
    al_init_primitives_addon();   // kreski,kwadraciki itp.
    ALLEGRO_DISPLAY *okno  = al_create_display(800,600);
    ALLEGRO_BITMAP *ku = al_create_bitmap(800,600);
    ALLEGRO_MOUSE_STATE  myszka;
    al_set_target_bitmap(ku);
    al_draw_circle(600,200,80,al_map_rgb(20,122,122),20);
    al_set_target_bitmap(al_get_backbuffer(okno)); // okno gł.
    unsigned char r,g,b;
    while(1)
    {
        al_get_mouse_state( & myszka);  // czy? wcisniety klawisz myszki
        al_clear_to_color(al_map_rgb(20,60,60));
        al_draw_bitmap(ku,0,0,0);

        //--- obszar kółka jako przycisk---
        ALLEGRO_COLOR kk = al_get_pixel(ku,myszka.x, myszka.y);
        al_unmap_rgb(kk, &r, &g, &b);
        if(r+g+b > 0) al_draw_tinted_bitmap_region
            (ku, al_map_rgba (50,50,50,0),500,100,600,200,500,100,0);
        if(r+g+b>0 && myszka.buttons==1) break;
        //---------------------------------

        al_flip_display();
        al_rest(0.001);
    }
    return 0;
}					
Procedura znikania i ukazywania obrazu

#include < allegro5/allegro.h >
#include < allegro5/allegro_image.h >
//...
// inicjacja allegro4, bitmap itp.
//...
void ukazywanie_obrazu()
{
    al_set_target_bitmap(bufor);
    rysowanie();                     // narysuj/wstaw obraz do bufora
    al_set_target_backbuffer(okno);  // powrót do okna głównego
    for(int i=0; i< 45; ++i)
    {
        al_draw_tinted_bitmap(bufor,al_map_rgba (i,i,i,i),0,0,0);
        al_rest(0.03);
        al_flip_display();
    }
}
void znikanie_obrazu()
{
    int v=128;
    for(int i=0; i< v; ++i)
    {
        al_draw_tinted_bitmap(bufor,al_map_rgba (v-i,v-i,v-i,v+i),0,0,0);
        al_rest(0.003);
        al_flip_display();
    }
}		
Lecące gwiazdy - jak w grze "Magia Liter"... obrazek TUTAJ
			
//=== gwiazdy, marianekA ===
#include < allegro5/allegro.h >
#include < allegro5/allegro_image.h >

ALLEGRO_DISPLAY *ekran = NULL;
ALLEGRO_BITMAP *gw = NULL;
ALLEGRO_KEYBOARD_STATE klaw;

int const  g=111;        // ilość gwiazd minimum 2 

void gwiazdy(float gwx[], float gwy[], int r[], int &kt)
{
    ++kt;                // kąt obrotu
    if(kt==360) kt=0;    // zerowanie kąta
    float b=0.0;         // wielkość gwiazdy
    ALLEGRO_COLOR kol ;  // kolor gwiazdy

    for(int i=0; i < g; ++i)
    {
        b=5*r[i]*0.005;             // wielkość gwiazd
        if(i%2==0)  gwx[i]+=0.15;   // przesuwanie w lewo
        if(i%2>0)   gwx[i]-=0.15;   // przesuwanie w prawo
        gwy[g-i]+=0.5+0.09*r[i]/2;  // przesuwanie w dół
        kol =  al_map_rgb_f (i,i,b);
        // rysowanie
        al_draw_tinted_scaled_rotated_bitmap
           (gw,kol,33,33,gwx[i],gwy[i],b,b,kt*3.14/180,0);
        // losowe pozycje startowe gwiazd po zniknięciu z ekranu
        if(gwy[i]>800) gwy[i]=-33, gwx[i]=rand() % (200+g)+(412-g/2);
    }
}

int main()
{
    al_init();                    // Allegro 5
    al_install_keyboard();        // klawiatura
    al_init_image_addon();        // grafika
    srand( time( NULL ));         // liczby losowe
    ekran = al_create_display( 1024, 768 ); // rozmiar okna na ekranie
    gw= al_load_bitmap("gwiazda.png");      // gwiazdka
    float gwx[g], gwy[g];         // wsp. gwiazd x,y
    int  kt=0.0;                  // kąt obrotu
    int r[g];                     // rozmiar
    double czas = 0;              // zegar
    for(int i=0; i < g; ++i)      // poczštkowe dane
        gwx[i]=rand() % (200+g)+(412-g/2), gwy[i]=rand() % 800-800, r[i]=rand() % 25+5;
    al_hide_mouse_cursor(ekran);  // wyłączenie wskaźnika myszki
    ALLEGRO_COLOR kol=al_map_rgb(0,80,80);  // kolor tła

    while(!al_key_down(& klaw, ALLEGRO_KEY_ESCAPE))
    {
        al_get_keyboard_state(&klaw);
        if ( al_get_time() > czas + 0.01)
        {
            al_clear_to_color(kol);   // tło
            gwiazdy(gwx,gwy,r,kt);    // gwiazdki
            czas=al_get_time();
        }
        al_flip_display();        // wsio na ekran
        al_rest(0.001);
    }
    al_destroy_display( ekran );  // usunięcie ekranu
    al_destroy_bitmap( gw );      // usunięcie bitmapy
    return 0;                     // wyjście z "main"
}