Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Allegro 5, funkcje oraz int main()

Ostatnio zmodyfikowano 2012-10-16 17:54
Autor Wiadomość
Temes
Temat założony przez niniejszego użytkownika
Allegro 5, funkcje oraz int main()
» 2012-10-16 17:34:12
Witam. Mam wielki problem.

Mam taki kod (kod jest skrócony o niepotrzebne i niezwiązane z tematem rzeczy):

C/C++
int main()
{
    al_init();
    al_init_image_addon();
   
    int Poziom;
   
    ALLEGRO_BITMAP * Mapa_1 = al_load_bitmap( "media/mapa_1.png" );
    ALLEGRO_BITMAP * Mapa_2 = al_load_bitmap( "media/mapa_2.png" );
    ALLEGRO_BITMAP * Mapa_3 = al_load_bitmap( "media/mapa_3.png" );
    ...( i tutaj duuuuzo map )...
   
    ...obliczenia...
   
    if( Poziom == 1 ) al_draw_bitmap( Mapa_1, 0, 0, 0 );
   
    if( Poziom == 2 ) al_draw_bitmap( Mapa_2, 0, 0, 0 );
   
    if( Poziom == 3 ) al_draw_bitmap( Mapa_3, 0, 0, 0 );
   
    ...itd.
}

Problem polega na tym, że, załóżmy, mamy z 20 map. Chce aby "poziom" odpowiadał za mapę, czyli jak poziom 1, rysujemy mapę 1, jak 2 to mapę 2, jak 565 to mapę 565 itd.. problem polega na tym, że muszę to wrzucić w funkcję.

C/C++
void rysuj_mape()
{
    if( Poziom == 1 ) al_draw_bitmap( Mapa_1, 0, 0, 0 );
   
    if( Poziom == 2 ) al_draw_bitmap( Mapa_2, 0, 0, 0 );
   
    if( Poziom == 3 ) al_draw_bitmap( Mapa_3, 0, 0, 0 );
   
    ...itd.
}

Problem w tym, że w funkcji, muszę rysować obrazki (al_draw_bitmap) a w tym celu, potrzebuję wcześniejszej deklaracji (przed voidem musi stać ALLEGRO_BITMAP *...), ale tu z kolei potrzebuję "inita" (al_init_image_addon();), a przecież inity muszą być w int main().

Co mam zrobić, aby nie pisać 500 razy tego ifa?
P-66936
SeaMonster131
» 2012-10-16 17:54:21
C/C++
ALLEGRO_BITMAP * mapa[ 500 ];

string sciezka;
for( int i = 0; i < 500; i++ )
{
    sciezka = "media/mapa_";
    // przeksztalcasz zmienna i na char, i dodajesz do sciezki (numer mapy)
    ..
    sciezka += ".png";
    mapa[ i ] = al_load_bitmap( sciezka.c_str() );
}

// rysowanie

al_draw_bitmap( mapa[ poziom ], x, y, 0 );
P-66939
« 1 »
  Strona 1 z 1