marcin49 Temat założony przez niniejszego użytkownika |
Alllegro - ciekawy problem » 2009-12-31 11:04:03 Witam, jestem nowy użytkownikiem, więc prosiłbym o wyrozumiałość. Otóż piszę grę w allegro i mam dość ciekawy problem Otóż chce zrobić walkę z przeciwnikiem, i zrobiłem coś takiego że jak zbliżysz się postacią do przeciwnika to uruchamia się walka i zabiera mi życia. I niby wszystko powinno być ok, ale jak poczekam kilka sekund w miejscu i podejdziesz potem do gościa to nagle robi się mało życia. Oto kod: #include <allegro.h>
volatile long speed = 0;
void increment_speed() { speed++; } END_OF_FUNCTION( increment_speed );
LOCK_VARIABLE( speed ); LOCK_FUNCTION( increment_speed );
volatile long walka = 0;
void increment_walka() { walka++; } END_OF_FUNCTION( increment_walka );
LOCK_VARIABLE( walka ); LOCK_FUNCTION( increment_walka );
int main() { allegro_init(); install_keyboard(); set_color_depth( 16 ); set_gfx_mode( GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0 ); install_timer(); install_int_ex( increment_speed, BPS_TO_TIMER( 70 ) ); install_int_ex( increment_walka, BPS_TO_TIMER( 5 ) ); BITMAP * ludek = NULL; BITMAP * przeciwnik = NULL; BITMAP * bufor = NULL; ludek = load_bitmap( "ludek.bmp", default_palette ); przeciwnik = load_bmp( "przeciwnik.bmp", default_palette ); bufor = create_bitmap( 640, 480 ); int ludek_x = 300, ludek_y = 300; int przeciwnik_x = 500, przeciwnik_y = 300; int zycie = 50; int zycie1 = 30; bool bitwa = false; while( !key[ KEY_ESC ] ) { if( przeciwnik_x - ludek_x < 30 ) bitwa = true; if( przeciwnik_x - ludek_x > 30 ) bitwa = false; while( speed > 0 ) { if( key[ KEY_LEFT ] ) ludek_x--; if( key[ KEY_RIGHT ] ) ludek_x++; if( key[ KEY_UP ] ) ludek_y--; if( key[ KEY_DOWN ] ) ludek_y++; speed--; } if( bitwa == true ) { while( walka > 0 ) { if( bitwa == true ) zycie--; walka--; } } clear_to_color( bufor, makecol( 150, 150, 150 ) ); textprintf_ex( bufor, font, ludek_x, ludek_y - 10, makecol( 0, 0, 0 ), - 1, "%d", zycie ); textprintf_ex( bufor, font, przeciwnik_x, przeciwnik_y - 10, makecol( 0, 0, 0 ), - 1, "%d", zycie1 ); masked_blit( ludek, bufor, 0, 0, ludek_x, ludek_y, ludek->w, ludek->h ); masked_blit( przeciwnik, bufor, 0, 0, przeciwnik_x, przeciwnik_y, przeciwnik->w, przeciwnik->h ); blit( bufor, screen, 0, 0, 0, 0, 640, 480 ); } remove_int( increment_speed ); remove_int( increment_walka ); destroy_bitmap( ludek ); destroy_bitmap( bufor ); allegro_exit(); return 0; } END_OF_MAIN();
A tu plik .exe : http://uploading.com/files/7aa4343d/Przyk%25C5%2582ad.exe/Proszę o pomoc. |