pavlakk Temat założony przez niniejszego użytkownika |
[allegro] Program mi się zacina » 2013-07-10 18:25:45 #include <allegro.h> #include <time.h> #include <fstream>
volatile long speed = 0; void increment_speed() { speed++; } END_OF_FUNCTION( increment_speed ); LOCK_VARIABLE( speed ); LOCK_FUNCTION( increment_speed );
class game { int jabko_x, jabko_y; int dlugosc, predkosc, punkty; int n, a; char wynik[ 15 ]; BITMAP * bufor; BITMAP * jabko; BITMAP * wonsz; BITMAP * gra; BITMAP * najlepsi; FONT * czcionka; std::string rekord; public: bool p; int x[ 60 ], y[ 60 ]; int przegrana(); void ustaw(); void steruj(); void rysuj(); void dane(); void usun(); };
void game::ustaw() { jabko_x = 260; jabko_y = 240; dlugosc = 3; predkosc = 3; punkty = 0; x[ 0 ] = 120; y[ 0 ] = 240; n = 1; BITMAP * bufor = NULL; BITMAP * jabko = NULL; BITMAP * wonsz = NULL; BITMAP * gra = NULL; BITMAP * najlepsi = NULL; FONT * czcionka = NULL; gra = load_bmp( "gra.bmp", default_palette ); wonsz = load_bmp( "wonsz.bmp", default_palette ); jabko = load_bmp( "jabko.bmp", default_palette ); najlepsi = load_bmp( "najlepsi.bmp", default_palette ); czcionka = load_font( "CZ.PCX", NULL, NULL ); bufor = create_bitmap( 600, 600 ); std::fstream plik; plik.open( "rekordy.txt" ); std::getline( plik, rekord ); };
void game::steruj() { if( key[ KEY_RIGHT ] ) { n--; if( n ==- 1 ) n = 3; } else if( key[ KEY_LEFT ] ) { n++; if( n == 4 ) n = 0; } if( n == 0 ) x[ 0 ] -= 20; else if( n == 1 ) y[ 0 ] += 20; else if( n == 2 ) x[ 0 ] += 20; else if( n == 3 ) y[ 0 ] -= 20; };
void game::rysuj() { masked_blit( gra, bufor, 0, 0, 0, 0, 600, 600 ); masked_blit( jabko, bufor, 0, 0, jabko_x, jabko_y, 600, 600 ); for( a = 0; a <= dlugosc; a++ ) masked_blit( wonsz, bufor, 0, 0, x[ a ], y[ a ], 20, 20 ); textout_ex( bufor, czcionka, rekord.c_str(), 200, 83, makecol( 255, 255, 140 ), - 1 ); textout_ex( bufor, czcionka, itoa( punkty, wynik, 10 ), 200, 22, makecol( 255, 255, 140 ), - 1 ); blit( bufor, screen, 0, 0, 0, 0, 600, 600 ); };
void game::dane() { p = false; for( a = 3; a <= dlugosc; a++ ) if( x[ 0 ] == x[ a ] && y[ 0 ] == y[ a ] ) p = true; else if( x[ 0 ] == jabko_x && y[ 0 ] == jabko_y ) { dlugosc++; predkosc++; punkty += 50; jabko_x = 20 *(( rand() % 24 ) + 1 ); jabko_y = 20 *(( rand() % 20 ) + 9 ); install_int_ex( increment_speed, BPS_TO_TIMER( predkosc ) ); } for( a = dlugosc + 1; a > 0; a-- ) { x[ a ] = x[ a - 1 ]; y[ a ] = y[ a - 1 ]; } clear_to_color( bufor, makecol( 150, 150, 150 ) ); }
int game::przegrana() { bool z = true; BITMAP * koniec_tak = NULL; BITMAP * koniec_nie = NULL; koniec_tak = load_bmp( "tak.bmp", default_palette ); koniec_nie = load_bmp( "nie.bmp", default_palette ); masked_blit( koniec_tak, bufor, 0, 0, 115, 200, 600, 600 ); blit( bufor, screen, 0, 0, 0, 0, 600, 600 ); install_int_ex( increment_speed, BPS_TO_TIMER( 10 ) ); while( z == false || !key[ KEY_ENTER ] ) { while( speed > 0 ) { if( key[ KEY_LEFT ] || key[ KEY_RIGHT ] ) { if( z == true ) { masked_blit( koniec_nie, bufor, 0, 0, 115, 200, 600, 600 ); blit( bufor, screen, 0, 0, 0, 0, 600, 600 ); z = false; } else { masked_blit( koniec_tak, bufor, 0, 0, 115, 200, 600, 600 ); blit( bufor, screen, 0, 0, 0, 0, 600, 600 ); z = true; } } else if( key[ KEY_ENTER ] && z == false ) return 0; speed--; } } speed = 1; x[ 0 ] = 120; y[ 0 ] = 240; dlugosc = 3; predkosc = 3; n = 1; punkty = 0; jabko_x = 260, jabko_y = 240; install_int_ex( increment_speed, BPS_TO_TIMER( predkosc ) ); };
void game::usun() { destroy_bitmap( jabko ); destroy_bitmap( gra ); destroy_bitmap( bufor ); destroy_bitmap( wonsz ); destroy_bitmap( najlepsi ); }
int main() { allegro_init(); install_keyboard(); set_color_depth( 16 ); set_gfx_mode( GFX_AUTODETECT_WINDOWED, 600, 600, 0, 0 ); set_palette( default_palette ); BITMAP * rysuj = NULL; BITMAP * wyjdz = NULL; int i = 3; rysuj = load_bmp( "rysuj.bmp", default_palette ); wyjdz = load_bmp( "wyjdz.bmp", default_palette ); blit( rysuj, screen, 0, 0, 0, 0, 600, 600 ); install_timer(); install_int_ex( increment_speed, BPS_TO_TIMER( 10 ) ); while( !key[ KEY_ENTER ] || i % 2 == 0 ) { while( speed > 0 ) { if( key[ KEY_DOWN ] || key[ KEY_UP ] ) { i++; if( i % 2 == 1 ) blit( rysuj, screen, 0, 0, 0, 0, 600, 600 ); else if( i % 2 == 0 ) blit( wyjdz, screen, 0, 0, 0, 0, 600, 600 ); } else if( key[ KEY_ENTER ] && i % 2 == 0 ) return 0; else if( key[ KEY_ESC ] ) return 0; speed--; } } remove_int( increment_speed ); destroy_bitmap( rysuj ); destroy_bitmap( wyjdz ); int a; game g; g.ustaw(); install_timer(); install_int_ex( increment_speed, BPS_TO_TIMER( 3 ) ); while( !key[ KEY_ESC ] ) { while( speed > 0 ) { g.rysuj(); speed--; } } g.usun(); remove_int( increment_speed ); allegro_exit(); return 0; }
END_OF_MAIN();
Program działał wcześniej prawidłowo, ale cały kod miałem w mainie i jak dodałem klasę i funkcję program zacina się po przejściu z menu do gry. Nie mam kompletnie pomysłu, czemu tak się dzieje. |