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' ? |
|
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. |
|
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ąć? |
|
Wasilek |
» 2013-09-23 14:41:35 a)Zadeklaruj zmienną wcześniej. b)Jak masz kod napisany obiektowo, to zadeklaruj tą zmienną w klasie.
|
|
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. |
|
pekfos |
» 2013-09-23 14:54:37 Pokaż kod. |
|
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ć. 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 ); install_sound( DIGI_AUTODETECT, MIDI_AUTODETECT, "" ); int volume_x = 0, volume_y = 0; set_volume( volume_x, volume_y ); SAMPLE * muzyka = load_sample( "muzyka.wav" ); play_sample( muzyka, 255, 127, 1000, 1 ); 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; } 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 ); animacja( frame, bomber, bomber_x, bomber_y ); blit( bufor, screen, 0, 0, 0, 0, 640, 480 ); } 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();
|
|
pekfos |
» 2013-09-23 15:03:54 CLOCKS_PER_SEC. |
|
« 1 » 2 3 |