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

[Allegro] Jak zrobić menu

Ostatnio zmodyfikowano 2008-05-15 17:23
Autor Wiadomość
maciek1316
Temat założony przez niniejszego użytkownika
[Allegro] Jak zrobić menu
» 2008-05-13 17:06:04
Pewnie znowu zrobiłem jakąś głupotę... Przeczytałem w jednym temacie o robieniu Menu. Wsadziłem gre ( trudno to grą nazwać:p) w klase. I nie działa... Czy mógł by ktoś zerknąć na kodzik? Kto pyta nie błądzi ;)




C/C++
#include <allegro.h>
#include <iostream>
#include <conio.h>

void uruchom_gre()
{
    int x = 250, y = 150;
    int x1 = 250, y1 = 550;
    int a;
    a = 1;
    bool kolizja = false;
    BITMAP * tlo = NULL;
    BITMAP * bufor = NULL;
    BITMAP * koniec = NULL;
    tlo = load_bmp( "tlo.bmp", default_palette );
    bufor = create_bitmap( 800, 600 );
    koniec = load_bmp( "koniec.bmp", default_palette );
    for(;; )
    {
        if(( key[ KEY_UP ] ) &&( x > 20 ) ) x = x - 2;
       
        if(( key[ KEY_DOWN ] ) &&( x < 780 ) ) x = x + 2;
       
        if(( key[ KEY_LEFT ] ) &&( y > 20 ) ) y = y - 2;
       
        if(( key[ KEY_RIGHT ] ) &&( y < 780 ) ) y = y + 2;
       
        if( key[ KEY_W ] ) x1--;
       
        if( key[ KEY_S ] ) x1++;
       
        if( key[ KEY_A ] ) y1--;
       
        if( key[ KEY_D ] ) y1++;
       
        clear_to_color( bufor, makecol( 46, 54, 140 ) );
        blit( tlo, bufor, 0, 0, 0, 0, tlo->w, tlo->h );
        rectfill( bufor, y1, x1, y1 + 50, x1 + 50, makecol( 0, 0, 0 ) );
        rectfill( bufor, y, x, y + 50, x + 50, makecol( 255, 255, 255 ) );
       
        if(( x == x1 + 50 ) &&( y <= y1 + 50 ) &&( y + 50 >= y1 ) ) kolizja = true;
       
        if(( x + 50 == x1 ) &&( y <= y1 + 50 ) &&( y + 50 >= y1 ) ) kolizja = true;
       
        if(( y + 50 == y1 ) &&( x <= x1 + 50 ) &&( x + 50 >= x1 ) ) kolizja = true;
       
        if(( y == y1 + 50 ) &&( x <= x1 + 50 ) &&( x + 50 >= x1 ) ) kolizja = true;
       
        if( kolizja = true ) break;
       
        blit( bufor, screen, 0, 0, 0, 0, 800, 600 );
        destroy_bitmap( tlo );
        destroy_bitmap( bufor );
        blit( koniec, screen, 0, 0, 300, 200, 300, 200 );
    }
};
int main()
{
    allegro_init();
    install_keyboard();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 );
    clear_to_color( screen, makecol( 46, 54, 140 ) );
    if( key[ KEY_Q ] )
    {
        uruchom_gre();
    }
    while( !key[ KEY_ESC ] );
   
    readkey();
    allegro_exit();
    return( 0 );
}

END_OF_MAIN();
P-738
DejaVu
Szkielet programu dla gier w allegro z obsługą menu
» 2008-05-13 17:46:10
[tutorial]

Szkielet programu dla gier w allegro z obsługą menu


C/C++
#include <allegro.h>
void ObslugaGry( BITMAP * bufor, int maxX, int maxY )
{
    //inicjacja
    do
    {
        //obsługa gry
       
        //...
       
        //wyświetlanie grafiki gry
        clear_to_color( bufor, makecol( 0, 0, 0 ) );
       
        //wyświetlenie bufora na ekran
        blit( bufor, screen, 0, 0, 0, 0, maxX, maxY );
    } while( !key[ KEY_ESC ] );
    //zakończenie
}

void ObslugaMenu( BITMAP * bufor, int maxX, int maxY )
{
    //inicjacja
    do
    {
        //obsługa menu
        if( key[ KEY_S ] ) ObslugaGry( bufor, maxX, maxY );
        //wyświetlanie grafiki menu
        clear_to_color( bufor, makecol( 0, 0, 0 ) );
       
        //wyświetlenie bufora na ekran
        blit( bufor, screen, 0, 0, 0, 0, maxX, maxY );
    } while( !key[ KEY_Q ] );
    //zakończenie
}

int main()
{
    allegro_init();
    install_keyboard();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 );
    BITMAP * bufor = create_bitmap( 800, 600 );
    if( bufor )
    {
        ObslugaMenu( bufor, 800, 600 );
       
        destroy_bitmap( bufor );
    } else allegro_message( "Nie udało się utworzyć bufora obrazu!" );
   
    allegro_exit();
    return( 0 );
}

END_OF_MAIN();
[/tutorial]
P-742
maciek1316
Temat założony przez niniejszego użytkownika
» 2008-05-14 18:14:03
Co wpisać w zakończenie??
C/C++
allegro_exit();
return;
po czym takim mi błąd wyskakuje.
P-744
DejaVu
» 2008-05-14 23:34:21
Jeśli funkcja zwraca wartość, to return musi ją zwracać. W Twoim przypadku żadna wartość nie jest zwracana i może pokazywać Ci błąd. Jak dostajesz błędy to oprócz kodu wklejaj log kompilacji.
P-745
maciek1316
Temat założony przez niniejszego użytkownika
» 2008-05-15 17:23:44
Już wiem co pomieszałem:D wsadziłem return(0); do funkcji, teraz już wszystko działa .
Dzięki
P-750
« 1 »
  Strona 1 z 1