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

[Allegro 4.x] Odliczanie czasu do jakiegoś zdarzenia

Ostatnio zmodyfikowano 2013-09-23 19:20
Autor Wiadomość
hit
Temat założony przez niniejszego użytkownika
[Allegro 4.x] Odliczanie czasu do jakiegoś zdarzenia
» 2013-09-23 12:58:02
Witam,

Robię grę typu bomberman i chciałem zapytać jak najprościej zrobić, aby po podłożeniu bomby działo się coś po określonym czasie. Próbuję w tej chwili użyć do tego timerów, ale jeśli chodzi o czas kilku sekund to nie jestem pewien czy program się nie zatrzyma. Próbowałem też kombinować z funkcją clock(), ale jeśli użyję tam pętli, która będzie czekać to program stoi. Jak to liczyć 'w tle' ?
P-92525
pekfos
» 2013-09-23 13:55:53
clock().

ale jeśli użyję tam pętli, która będzie czekać to program stoi.
Więc nie używaj.
P-92529
hit
Temat założony przez niniejszego użytkownika
» 2013-09-23 14:00:30
Ale jeśli w momencie podłożenia bomby stworzę zmienną np. int czas = clock(); i następnie jakiegoś if'a, to ten czas będzie się ciągle nadpisywał, jak to ominąć?
P-92530
Wasilek
» 2013-09-23 14:41:35
a)Zadeklaruj zmienną wcześniej.
b)Jak masz kod napisany obiektowo, to zadeklaruj tą zmienną w klasie.
P-92534
hit
Temat założony przez niniejszego użytkownika
» 2013-09-23 14:53:55
Ja mam ją zadeklarowaną wcześniej, ale chodzi o to, że w momencie podstawienia bomby czyli np. wciśnięcia klawisza 'A' przypisze mi do zmiennej aktualną wartość clock(), a jak następnie dam if, który sprawdza czy clock() - zmienna > 3000 to to nie działa poprawnie. Właściwie w ogóle nie działa.
P-92535
pekfos
» 2013-09-23 14:54:37
Pokaż kod.
P-92536
hit
Temat założony przez niniejszego użytkownika
» 2013-09-23 14:59:44
Wkleję funkcje main, pozostałe rzeczy raczej nie są istotne w tym wypadku.
Wyjaśnię jeszcze ten fragment z przyciskiem 'A'. Na razie sobie to testuję jako podmienianie pól na mapie kafelkowej, potem bym próbował jakoś to animować.

C/C++
int main()
{
    allegro_init();
    install_keyboard();
    set_color_depth( 16 );
    install_timer();
    install_int_ex( increment_speed, BPS_TO_TIMER( 160 ) );
   
    int start_time = clock();
    int czas = 0;
   
   
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0 );
    set_window_title( "Bombermanek" );
    clear_to_color( screen, makecol( 49, 113, 0 ) );
   
    BITMAP * bomber = load_bmp( "songo.bmp", default_palette );
    bufor = create_bitmap( 640, 480 );
    teren = load_bmp( "mapa.bmp", default_palette );
    int bomber_wys = 36;
   
    BITMAP * potwor = load_bmp( "potwor.bmp", default_palette );
   
   
    //=========DŹWIĘK========================================
    install_sound( DIGI_AUTODETECT, MIDI_AUTODETECT, "" );
    int volume_x = 0, volume_y = 0;
    set_volume( volume_x, volume_y ); // 255,255 
    SAMPLE * muzyka = load_sample( "muzyka.wav" );
    play_sample( muzyka, 255, 127, 1000, 1 );
   
    //blit( bomber, screen, 0, 0, 40, 40, bomber->w, bomber->h );
    int bomber_x = 120, bomber_y = 40;
    int potwor_x = 560, potwor_y = 40;
    int frame = 0;
   
    while( !key[ KEY_ESC ] )
    {
       
        while( speed > 0 )
        {
            if( bomber_y <- 40 ) bomber_y = 479;
           
            if( bomber_y > 480 ) bomber_y =- 39;
           
            if( bomber_x <- 30 ) bomber_x = 631;
           
            if( bomber_x > 632 ) bomber_x =- 29;
           
            if( key[ KEY_LEFT ] && mapa[( bomber_y ) / 40 ][( bomber_x - 1 ) / 40 ] < 3 && mapa[( bomber_y + bomber_wys ) / 40 ][( bomber_x - 1 ) / 40 ] < 3 )
                 bomber_x--;
           
            if( key[ KEY_RIGHT ] && mapa[( bomber_y ) / 40 ][( bomber_x + bomber_wys ) / 40 ] < 3 && mapa[( bomber_y + bomber_wys ) / 40 ][( bomber_x + bomber_wys + 1 ) / 40 ] < 3 )
                 bomber_x++;
           
            if( key[ KEY_UP ] && mapa[( bomber_y - 1 ) / 40 ][( bomber_x ) / 40 ] < 3 && mapa[( bomber_y - 1 ) / 40 ][( bomber_x + bomber_wys ) / 40 ] < 3 )
                 bomber_y--;
           
            if( key[ KEY_DOWN ] && mapa[( bomber_y + bomber_wys + 1 ) / 40 ][( bomber_x ) / 40 ] < 3 && mapa[( bomber_y + bomber_wys + 1 ) / 40 ][( bomber_x + bomber_wys ) / 40 ] < 3 )
                 bomber_y++;
           
            if( key[ KEY_SPACE ] ) bomber_x = 360, bomber_y = 120;
           
            if( key[ KEY_A ] ) {
                mapa[ bomber_y / 40 ][ bomber_x / 40 ] = 2;
                czas = clock(); {
                    if( clock() - czas > 3000 )
                    {
                        mapa[ bomber_y / 40 ][ bomber_x / 40 ] = 3;
                    }
                }
               
               
            }
            if( key[ KEY_Z ] ) { bomber_y++;; }
           
            speed--;
            frame++;
            if( frame > 160 ) frame = 0;
           
        }
        //==================Prymitywny ruch potworka=========================
        if( bomber_x - 1 > potwor_x && mapa[( potwor_y ) / 40 ][( potwor_x + bomber_wys ) / 40 ] < 3 && mapa[( potwor_y + bomber_wys ) / 40 ][( potwor_x + bomber_wys + 1 ) / 40 ] < 3 )
             potwor_x++;
       
        if( bomber_x + 1 < potwor_x && mapa[( potwor_y ) / 40 ][( potwor_x - 1 ) / 40 ] < 3 && mapa[( potwor_y + bomber_wys ) / 40 ][( potwor_x - 1 ) / 40 ] < 3 )
             potwor_x--;
       
        if( bomber_y - 1 > potwor_y && mapa[( potwor_y + bomber_wys + 1 ) / 40 ][( potwor_x ) / 40 ] < 3 && mapa[( potwor_y + bomber_wys + 1 ) / 40 ][( potwor_x + bomber_wys ) / 40 ] < 3 )
             potwor_y++;
       
        if( bomber_y + 1 < potwor_y && mapa[( potwor_y - 1 ) / 40 ][( potwor_x ) / 40 ] < 3 && mapa[( potwor_y - 1 ) / 40 ][( potwor_x + bomber_wys ) / 40 ] < 3 )
             potwor_y--;
        //===================================
        if(( clock() - start_time < 5000 ) ) {
           
            blit( potwor, screen, 0, 0, 40, 40, potwor->w, potwor->h );
        }
       
       
        clear_to_color( bufor, makecol( 49, 113, 0 ) );
        wys_mape();
        textprintf_ex( bufor, font, 10, 10, makecol( 99, 0, 33 ), - 1, "Czas gry: %d s",( clock() - start_time ) / 1000 );
       
       
        // masked_blit( bomber, bufor, 70, 0, bomber_x, bomber_y, 36, 36 );
        //masked_blit( potwor, bufor, 0, 0, potwor_x, potwor_y, potwor->w, potwor->h);
        //======================ANIMACJA POSTACI==========================================
        animacja( frame, bomber, bomber_x, bomber_y );
        blit( bufor, screen, 0, 0, 0, 0, 640, 480 );
    }
   
    //=====ZWALNIANIE PAMIĘCI============
    remove_int( increment_speed );
    stop_sample( muzyka );
    destroy_sample( muzyka );
   
    destroy_bitmap( potwor );
    destroy_bitmap( bufor );
    destroy_bitmap( bomber );
    readkey();
   
    return 0;
}

END_OF_MAIN();
P-92537
pekfos
» 2013-09-23 15:03:54
CLOCKS_PER_SEC.
P-92538
« 1 » 2 3
  Strona 1 z 3 Następna strona