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

Allegro 4, menu.

Ostatnio zmodyfikowano 2012-09-07 21:10
Autor Wiadomość
Forczek
Temat założony przez niniejszego użytkownika
Allegro 4, menu.
» 2012-09-07 14:44:58
Siemka, najpierw kod:
C/C++
#include <allegro.h>

int mx = 0, my = 0, mb = 0;
void myszka()
{
    if( mx != mouse_x || my != mouse_y || mb != mouse_b )
    {
        mx = mouse_x;
        my = mouse_y;
        mb = mouse_b;
    }
};

int main()
{
    allegro_init();
    install_keyboard();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 1000, 800, 0, 0 );
    clear_to_color( screen, makecol( 128, 128, 128 ) );
    BITMAP * kursor = NULL;
    kursor = load_bmp( "kursor.bmp", default_palette );
    install_mouse();
    show_mouse( screen );
    set_mouse_sprite( kursor );
    unscare_mouse();
   
    BITMAP * bufor = NULL;
    BITMAP * meni = NULL;
    BITMAP * przycisk11 = NULL;
    BITMAP * przycisk12 = NULL;
    BITMAP * przycisk13 = NULL;
    BITMAP * przycisk14 = NULL;
    BITMAP * przycisk15 = NULL;
    BITMAP * przycisk2 = NULL;
   
    bufor = create_bitmap( 1000, 800 );
    meni = load_bmp( "menu.bmp", default_palette );
    przycisk11 = load_bmp( "przycisk1.bmp", default_palette );
    przycisk12 = load_bmp( "przycisk1.bmp", default_palette );
    przycisk13 = load_bmp( "przycisk1.bmp", default_palette );
    przycisk14 = load_bmp( "przycisk1.bmp", default_palette );
    przycisk15 = load_bmp( "przycisk1.bmp", default_palette );
    przycisk2 = load_bmp( "przycisk2.bmp", default_palette );
   
    int menu = 1;
   
    while( !menu == 0 )
    {
        if( menu == 1 )
        {
            if( mx > 425 || mx < 575 || my < 575 || my > 525 )
            {
                masked_blit( przycisk2, meni, 0, 0, 500, 550, przycisk2->w, przycisk2->h );
                textprintf_ex( przycisk2, font, 500, 550, makecol( 200, 200, 200 ), - 1, "Start" );
                if( mb == 1 )
                {
                    menu == 2;
                }
            }
            else
            {
                masked_blit( przycisk11, meni, 0, 0, 500, 550, przycisk11->w, przycisk11->h );
                textprintf_ex( przycisk11, font, 500, 550, makecol( 200, 200, 200 ), - 1, "Start" );
            }
            if( mx > 425 || mx < 575 || my < 500 || my > 450 )
            {
                masked_blit( przycisk2, meni, 0, 0, 500, 475, przycisk2->w, przycisk2->h );
                textprintf_ex( przycisk2, font, 500, 475, makecol( 200, 200, 200 ), - 1, "Kontynuj" );
                if( mb == 1 )
                {
                    menu == 3;
                }
            }
            else
            {
                masked_blit( przycisk12, meni, 0, 0, 500, 475, przycisk12->w, przycisk12->h );
                textprintf_ex( przycisk12, font, 500, 475, makecol( 200, 200, 200 ), - 1, "Kontynuj" );
            }
            if( mx > 425 || mx < 575 || my < 425 || my > 375 )
            {
                masked_blit( przycisk2, meni, 0, 0, 500, 400, przycisk2->w, przycisk2->h );
                textprintf_ex( przycisk2, font, 500, 400, makecol( 200, 200, 200 ), - 1, "Autorzy" );
                if( mb == 1 )
                {
                    menu == 4;
                }
            }
            else
            {
                masked_blit( przycisk13, meni, 0, 0, 500, 400, przycisk13->w, przycisk13->h );
                textprintf_ex( przycisk13, font, 500, 400, makecol( 200, 200, 200 ), - 1, "Autorzy" );
            }
            if( mx > 425 || mx < 575 || my < 350 || my > 300 )
            {
                masked_blit( przycisk2, meni, 0, 0, 500, 325, przycisk2->w, przycisk2->h );
                textprintf_ex( przycisk2, font, 500, 300, makecol( 200, 200, 200 ), - 1, "Pomoc" );
                if( mb == 1 )
                {
                    menu == 5;
                }
            }
            else
            {
                masked_blit( przycisk14, meni, 0, 0, 500, 300, przycisk14->w, przycisk14->h );
                textprintf_ex( przycisk2, font, 500, 300, makecol( 200, 200, 200 ), - 1, "Pomoc" );
            }
            if( mx > 425 || mx < 575 || my < 275 || my > 225 )
            {
                masked_blit( przycisk2, meni, 0, 0, 500, 250, przycisk2->w, przycisk2->h );
                textprintf_ex( bufor, font, 500, 250, makecol( 200, 200, 200 ), - 1, "Wyjscie" );
                if( mb == 1 )
                {
                    menu == 0;
                }
            }
            else
            {
                masked_blit( przycisk15, meni, 0, 0, 500, 250, przycisk15->w, przycisk15->h );
                textprintf_ex( bufor, font, 500, 250, makecol( 200, 200, 200 ), - 1, "Wyjscie" );
            }
            if( key[ KEY_ESC ] )
            {
                menu = 0;
            }
            blit( meni, bufor, 0, 0, 0, 0, 1000, 800 );
        }
        myszka();
        clear_to_color( bufor, makecol( 150, 150, 150 ) );
        blit( bufor, screen, 0, 0, 0, 0, 1000, 800 );
    }
    destroy_bitmap( bufor );
    destroy_bitmap( meni );
    destroy_bitmap( przycisk11 );
    destroy_bitmap( przycisk12 );
    destroy_bitmap( przycisk13 );
    destroy_bitmap( przycisk14 );
    destroy_bitmap( przycisk15 );
    destroy_bitmap( przycisk2 );
    return 0;
}
END_OF_MAIN();

Jest taki problem że się kompiluje, lecz jest jakiś błąd który od razu wyłącza program. Czy widzicie jakiś błąd?
P-64491
m4tx
» 2012-09-07 14:47:48
lecz jest jakiś błąd który od razu wyłącza program.
A może zdradzisz nam tę tajemnicę i powiesz, co to za błąd? :)

Czy widzicie jakiś błąd?
Ciężko zauważyć błąd w dużej ilości powtarzanego kodu. Zwłaszcza, że nie wiemy, jakiż to run-time'owy błąd masz. Aczkolwiek pewnie używasz czegoś, czego nie ma (niezainicjalizowana zmienna lub coś podobnego). Możesz (a właściwie powinieneś od razu) przejechać też debuggerem.
P-64493
Gabes
» 2012-09-07 17:10:37
Na ifach deleko się nie zajedziesz, sam tak zaczynałem w allegro4,
ale w allegro5 zaczołem tworzyć funkcje i wygląda to bardziej przejżyście.
Tu zmoienione dla allegro4. Czcionka bitmapowa, opis buttona,pozycja dowolna.
Jakby co to moge podrzucić cały kod.

C/C++
BITMAP * bufor = NULL;
FONT * font_pcx1 = NULL;
bool na = false, klik = false;

void al_button( BITMAP * bufor, BITMAP * bmp, FONT * font, int x, int y, char const text[] )
{
    int szer_bmp = bmp->w,
    wys_bmp = bmp->h;
   
    if( mouse_x > x && mouse_x < x + szer_bmp && mouse_y > y && mouse_y < y + wys_bmp ) na = true;
   
    if( mouse_b & 1 ) klik = true;
   
    if( na == true && klik == true )
    draw_sprite( bufor, bmp, x, y ),
         textprintf_ex( bufor, font_pcx1, x + 30, y + 5, makecol( 255, 255, 255 ), - 1, "%s", text );
   
    else draw_sprite( bufor, bmp, x, y ),
         textprintf_ex( bufor, font_pcx1, x + 30, y + 5, makecol( 255, 0, 0 ), - 1, "%s", text );
   
    if( na == true && klik == true && text == "Koniec" ) { zamknij = true; };
    na = false; klik = false;
};
...
...
...
al_button( bufor, button, font_pcx1, 100, 100, " Graj" );
al_button( bufor, button, font_pcx1, 100, 132, "Menu" );
al_button( bufor, button, font_pcx1, 100, 164, "Coś tam" );
al_button( bufor, button, font_pcx1, 100, 196, "Koniec" );

P-64509
RazzorFlame
» 2012-09-07 17:54:06
@Gabes nie lepiej zrobić klase?
P-64511
Forczek
Temat założony przez niniejszego użytkownika
» 2012-09-07 17:59:19
No to tak: mam mniej więcej taki błąd. Kompilator nie wykrywa błędów, lecz gdy aplikacja 'Zaczyna działać' wyskakuje błąd że program przestał odpowiadać i co zrobić. Aha Gabes, na razie wolę moje rozwiązanie. Gdy przejdę do innych bibliotek nauczę się tego. Jeżeli chodzi o Debugger, to mam raczej wszystko dobrze. Sprawdzałem to bo skopiowałem kod ze stronki i działał. A kodu, myślę że nie ma aż tak dużo.
P-64512
Forczek
Temat założony przez niniejszego użytkownika
» 2012-09-07 18:06:40
Mam nowy błąd, wcześniej go nie było teraz dopiero mi wyskoczył jak jeszcze raz chciałem skompilować kod w innym projekcie.
BŁĄD: Instrukcja spod 0x00401321 odwołuje się do pamięci pod adresem 0x0000001c. Pamięć nie może być read.
P-64514
RazzorFlame
» 2012-09-07 18:16:59
Jeśli chodzi o ten wcześniejszy błąd:
Gdy przejdę do innych bibliotek nauczę się tego
??? Z takim podejściem daleko nie zajdziesz.
Nie przyszło ci do głowy że może nie masz poprawnej ścieżki do obrazu Hę?
P-64516
Forczek
Temat założony przez niniejszego użytkownika
» 2012-09-07 18:31:09
Znaczy chodziło mi o to że ja tej pracy na za niedługo potrzebuję. W między czasie będę coraz lepsze kody pisał, planuje nawet za nie długo przejść do WinApi. Ale jeżeli chodzi o grafiki, to mam je w folderze z projektem. Zawsze miałem w nim i działało. Spróbuje dać sprawdzenie i zaraz napiszę czy działa. Nie, to nie grafiki.
P-64518
« 1 » 2
  Strona 1 z 2 Następna strona