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

Allegro...program(gra) sam wyłącza sie po 5 miutach

Ostatnio zmodyfikowano 2012-01-17 00:48
Autor Wiadomość
marianekA
Temat założony przez niniejszego użytkownika
Allegro...program(gra) sam wyłącza sie po 5 miutach
» 2012-01-16 15:33:11
Napisałem sobie takie tam puzle,
gra działa dobrze ale sama wyłącza się
zawsze w przybliżonym czasie - jak zaczarowana.
Po wyłączeniu się jest taki komunikat:
Proces returned -1073741819 <0xC0000005>  execution time : 309.469 s
Press any key to continue.
W programie nie uruchamiam żadnego zegara  używam tylko funkcji 'rand()'.
Jak sobie z tym poradzić?
 
P-48379
pekfos
» 2012-01-16 15:51:17
Nie wiem/Nie mam pojęcia. Ale jakbyś podał kod..
P-48382
marianekA
Temat założony przez niniejszego użytkownika
» 2012-01-16 16:11:26
zamieszczam kod:
C/C++
#include <allegro.h>
#include <jpgalleg.h>
#include <time.h>
#include <string>
#include <iostream>

BITMAP * obrazek = NULL;
BITMAP * bufor = NULL;
BITMAP * kopia = NULL;
//BITMAP * detale = NULL;
FONT * font_pcx = NULL;
BITMAP * fr = NULL;
SAMPLE * muzyka = load_sample( "muz/snd1.wav" );
SAMPLE * muzyka1 = load_sample( "muz/mx.wav" );

int pp[ 109 ];
int px[ 109 ]; //wspolrzedne poziome pola
int py[ 109 ]; //wspolrzedne pionowe pola
const int a = 90; // stala zmienna - wielkosc pola
int spr;
int mx = 0, my = 0, mb = 0; //zmienne dla myszki
int mz; //zone wskaznika nyszki

void init()
{
    allegro_init();
    jpgalleg_init();
    install_mouse();
    show_mouse( screen );
    install_keyboard();
    set_color_depth( 16 ); // paleta kolorow
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 ); //rozmiar ekranu
    install_sound( DIGI_AUTODETECT, MIDI_AUTODETECT, "" );
    install_timer();
    set_volume( 255, 255 );
    srand( time( NULL ) );
    bufor = create_bitmap( 800, 600 );
    kopia = create_bitmap( 800, 600 );
    clear_to_color( bufor, makecol( 0, 99, 99 ) );
    fr = create_bitmap( a, a );
   
};
void myszka()
{
    if( mx != mouse_x || my != mouse_y || mb != mouse_b )
    {
        mx = mouse_x;
        my = mouse_y;
        mb = mouse_b;
    }
    //--- strefy pol na ktorych jest wskaznik myszki  ---
    if( mx > 40 && mx < 760 && my > 30 && my < 570 ) mz =(( mx - 40 ) / a +( my - 30 ) / a * 8 ) + 1;
    //---------------------------------------------------
};

int szykowanie_tablic()
{
    // --- szykowanie tablic -------------
    int n = 0;
    int x, y;
    for( int j = 0; j < 6; ++j )
    for( int i = 0; i < 8; ++i )
    {
        ++n;
        x = 40 + i * a; // wspolrzedna poziome pola
        y = 30 + j * a; // wspolrzedne pionowe pola
        px[ n ] = x; //  wstawienie do tablicy
        py[ n ] = y; //  wstawienie do tablicy
        pp[ n ] = n; //  sztawienie do tablicy
    }
};
void losowe_wczytanie_obrazka()
{
    std::string plik = "grafika/g"; //pocz. zmiennej 'plik'
    int g = rand() % 18 + 1; // losowanie numeru (nazwy) obrazka
    //---- zamiana zmiennej int na string ----
    std::string tmp;
    itoa( g,( char * ) tmp.c_str(), 10 );
    std::string str = tmp.c_str();
    //------------------------------------------
    plik = plik + str; //dolozenie liczby do zmiennej 'plik'
    plik = plik + ".jpg"; //dokonczenie zmiennej 'plik'
   
    obrazek = load_jpg( plik.c_str(), default_palette );
   
    clear_to_color( bufor, makecol( 0, 99, 99 ) );
    stretch_blit( obrazek, bufor, 0, 0, 800, 600, 40, 30, 720, 540 );
};
int mieszanie()
{
    int p1, p2, nn;
    for( int i = 0; i < 48; ++i )
    {
        //pierwszy element
        p1 = rand() % 48 + 1;
        nn = pp[ p1 ];
        blit( bufor, fr, px[ p1 ], py[ p1 ], 0, 0, a, a );
        //drugi i zamiana
        p2 = rand() % 48 + 1;
        pp[ p1 ] = pp[ p2 ];
        pp[ p2 ] = nn;
        blit( bufor, bufor, px[ p2 ], py[ p2 ], px[ p1 ], py[ p1 ], a, a );
        blit( fr, bufor, 0, 0, px[ p2 ], py[ p2 ], a, a );
        p1 = 0;
    }
    blit( bufor, kopia, 0, 0, 0, 0, 800, 600 );
};
int sprawdzenie()
{
    font_pcx = load_font( "grafika/MSS16.pcx", default_palette, NULL );
    spr = 0;
    for( int i = 0; i < 48; ++i )
         if( pp[ i ] == i ) ++spr;
   
    textprintf_ex( bufor, font_pcx, 40, - 2, makecol( 200, 200, 100 ), 812, "Jeszcze %d ", 48 - spr );
};
int podglond()
{
    if( mb == 2 )
    {
        stretch_sprite( bufor, obrazek, 140, 130, 520, 340 );
        rect( bufor, 140, 130, 140 + 520, 130 + 340, makecol( 0, 155, 0 ) );
        rect( bufor, 141, 131, 140 + 519, 130 + 339, makecol( 0, 255, 0 ) );
    }
    blit( bufor, screen, 0, 0, 0, 0, 800, 600 );
   
};
int plansza_OK()
{
    //---------- plansza OK ------------
    if( spr == 48 )
    {
        play_sample( muzyka1, 255, 127, 1000, 0 );
        for( int i = 0; i < 300; ++i )
        {
            //  obrazek na caly ekran
            blit( obrazek, screen, 0, 300 - i, 0, 300 - i, 800, i * 2 );
            rest( 5 );
        }
        ++spr;
    }
};

int main()
{
    init();
    int p1 = 0; //pierwszy el.do zamiany
    int p2 = 0; //drugi element do zamiany
    int nn = 0;
    szykowanie_tablic();
    while( !key[ KEY_ESC ] )
    {
        losowe_wczytanie_obrazka();
        mieszanie();
        show_mouse( screen );
        //-------------------------------------------------------
        while( !key[ KEY_ESC ] )
        {
            if( spr < 48 )
            {
                blit( kopia, bufor, 0, 0, 0, 0, 800, 600 );
                //rectfill(bufor,0,0,200,25,makecol(0,100,100));
                //=== zamiama dwoch elementow na ekranie i w tablicy pp[] ====
                if( mz > 0 && mb == 1 && nn == 0 )
                {
                    p1 = mz; // pierwszy indeks z tablicy do zamiany
                    nn = pp[ p1 ]; // wartosc tego indeksu
                    mz = 0;
                    blit( bufor, fr, px[ p1 ], py[ p1 ], 0, 0, a, a ); //skopiowanie elementu
                }
                if( mz > 0 && mb == 0 && nn > 0 )
                {
                    p2 = mz; // drugi indeksz tablicy do zamiany
                    pp[ p1 ] = pp[ p2 ]; // wartosc drugiego indeksu do pierwszego
                    pp[ p2 ] = nn; // pierwszego indeksu do drugiego
                    blit( bufor, bufor, px[ p2 ], py[ p2 ], px[ p1 ], py[ p1 ], a, a );
                    blit( fr, bufor, 0, 0, px[ p2 ], py[ p2 ], a, a );
                    if( pp[ p2 ] == mz ) play_sample( muzyka, 255, 127, 1000, 0 );
                   
                    nn = 0;
                    blit( bufor, kopia, 0, 0, 0, 0, 800, 600 );
                }
                sprawdzenie();
                podglond();
                // texty_pomocnicze();
            }
            plansza_OK();
            myszka();
            // -------- od pocz¹tku i nowa gra ---------
            if( spr > 48 && mb == 1 )
            {
                spr = 0;
                break;
            }
        }
    }
    readkey();
    destroy_bitmap( obrazek );
    destroy_bitmap( bufor );
    destroy_bitmap( kopia );
    destroy_bitmap( fr );
    destroy_font( font_pcx );
    destroy_sample( muzyka );
    destroy_sample( muzyka1 );
    allegro_exit();
    return 0;
}
END_OF_MAIN()
P-48383
pekfos
» 2012-01-16 16:17:19
ile razy niszczysz "obrazek" a ile razy wczytujesz?

Btw:
C/C++
#include <cstdio>

int ab( int w ) {
    printf( "funkcja z allegro\n" );
    return w * 64 + 1024;
}

int a = ab( 42 ); //!

int main() {
    printf( "allegro_init" );
};
w ten sposób używasz funkcji allegro przed inicializacją allegro. Mogą być problemy :)
P-48385
marianekA
Temat założony przez niniejszego użytkownika
» 2012-01-16 16:36:35
wczytuję raz na jeden cykl gry zawsze do tej samej bitmapy
a wyłącza się nawet jak wczyta się raz ale upłynie ten czas

P-48387
pekfos
» 2012-01-16 16:40:13
ale niszczysz każdą bitmapę tyle razy ile wczytujesz? Wczytanie nowej nie niszczy starej.
P-48388
marianekA
Temat założony przez niniejszego użytkownika
» 2012-01-16 16:52:34
0, teraz rozumiem, wytłumaczone prosto i jasno,
zaraz poprawiam błędy i dziękuję za pomoc
P-48391
marianekA
Temat założony przez niniejszego użytkownika
» 2012-01-17 00:48:44
pekfos dobrze wypatrzył i doradził...
okazało się że wczytywanie palety z czcionką
miałem w niewłaściwym miejscu i ta operacja powtarzała się.
Problem rozwiązany - temat zamykam.
P-48474
« 1 »
  Strona 1 z 1