kuba1817 Temat założony przez niniejszego użytkownika |
[Allegro]Gra wyłącza się » 2010-01-02 17:33:33 Cześć ponownie... A więc tak: wszystko działało dobrze, a tu nagle, po uruchomieniu gry wyłącza się ona... Włącza i wyłącza... Czasami chwile działa, ale potem nagle zgon...;/ Oto kod: #include <allegro.h> #include <conio.h> #include <iostream>
enum CHODZENIE { lewo, prawo, gora, dol, stoi, eq }; bool pokaz_ekwipunek = false; int pomocnicza_eq = 0; int wspol_x, wspol_y; short int level = 1; short int czy_eq_tak = 0;
class CGlownyBohater { private: bool kolizja( char kierunek ); int edward_x; int edward_y; int frame; public: void idz_w_lewo(); void idz_w_prawo(); void stoi(); void idz_w_dol(); void idz_w_gore(); void pokaz_eq(); CGlownyBohater(); };
void lvl1(); void lvl2(); void lvl3();
void NowaGra();
int mapa[ 16 ][ 32 ] = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 2, 0, 0, 3, 3, 3, 3, 0, 0, 0, 3, 2, 3, 3, 3, 3, 1, 3, 2, 3, 2, 3, 3, 2, 2, 3, 3, 2, 2, 3, 3, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 1, 2, 2, 2, 3, 3, 3, 1, 2, 3, 3, 3, 3, 2, 1, 3, 3, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 2, 3, 3, 2, 3, 3, 2, 1, 2, 3, 3, 3, 1, 1, 1, 3, 3, 3, 3, 2, 3, 3, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, 1, 2, 3, 3, 3, 3, 3, 3, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3, 2, 3, 3, 1, 3, 2, 3, 3, 3, 2, 3, 1, 3, 1, 3, 3, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 1, 1, 1, 3, 3, 2, 3, 3, 3, 2, 1, 3, 3, 3, 3, 3, 2, 3, 3, 2, 3, 3, 3, 3, 1, 3, 3, 2, 3, 3, 3, 3, 1, 3, 3, 2, 3, 3, 2, 3, 3, 3, 1, 3, 3, 3, 2, 3, 1, 3, 1, 3, 3, 3, 2, 3, 3, 2, 3, 2, 1, 3, 1, 3, 3, 1, 3, 3, 3, 3, 1, 3, 2, 3, 2, 2, 3, 3, 3, 3, 2, 3, 1, 3, 3, 3, 3, 1, 3, 3, 3, 2, 3, };
int mapa_x = 0, mapa_y = 0;
volatile long speed = 0;
BITMAP * bufor = NULL; BITMAP * teren = NULL; BITMAP * edward = NULL; BITMAP * edward_krok_1 = NULL; BITMAP * edward_krok_2 = NULL; BITMAP * edward_prawo = NULL; BITMAP * edward_prawo_krok_1 = NULL; BITMAP * edward_prawo_krok_2 = NULL; BITMAP * edward_krok_12 = NULL; BITMAP * edward_krok_prawo_12 = NULL; BITMAP * ekwipunek = NULL;
void wys_mape();
void increment_speed() { speed++; } END_OF_FUNCTION( increment_speed );
LOCK_VARIABLE( speed ); LOCK_FUNCTION( increment_speed );
CHODZENIE chodzenie; CGlownyBohater CEdward;
int main()
{ allegro_init(); install_keyboard(); set_color_depth( 16 ); set_gfx_mode( GFX_AUTODETECT, 1024, 768, 0, 0 ); clear_to_color( screen, makecol( 128, 128, 128 ) ); install_timer(); install_int_ex( increment_speed, BPS_TO_TIMER( 90 ) ); install_mouse(); show_mouse( screen ); unscare_mouse(); bufor = create_bitmap( 1024, 768 ); if( !bufor ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Nie mogę utworzyć bufora!" ); allegro_exit(); return 0; } teren = load_bmp( "teren.bmp", default_palette ); if( !teren ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Wystapil problem podczas ladowania obrazka!" ); allegro_exit(); return 0; } edward = load_bmp( "edward.bmp", default_palette ); if( !edward ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Wystapil problem podczas ladowania obrazka!" ); allegro_exit(); return 0; } edward_krok_1 = load_bmp( "edward_krok_1.bmp", default_palette ); if( !edward_krok_1 ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Wystapil problem podczas ladowania obrazka!" ); allegro_exit(); return 0; } edward_krok_2 = load_bmp( "edward_krok_2.bmp", default_palette ); if( !edward_krok_2 ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Wystapil problem podczas ladowania obrazka!" ); allegro_exit(); return 0; } edward_prawo = load_bmp( "edward_prawo.bmp", default_palette ); if( !edward_prawo ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Wystapil problem podczas ladowania obrazka!" ); allegro_exit(); return 0; } edward_prawo_krok_1 = load_bmp( "edward_prawo_krok_1.bmp", default_palette ); if( !edward_prawo_krok_1 ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Wystapil problem podczas ladowania obrazka!" ); allegro_exit(); return 0; } edward_prawo_krok_2 = load_bmp( "edward_prawo_krok_2.bmp", default_palette ); if( !edward_prawo_krok_2 ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Wystapil problem podczas ladowania obrazka!" ); allegro_exit(); return 0; } edward_krok_12 = load_bmp( "edward_krok_12.bmp", default_palette ); if( !edward_krok_12 ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Wystapil problem podczas ladowania obrazka!" ); allegro_exit(); return 0; } edward_krok_prawo_12 = load_bmp( "edward_krok_prawo12.bmp", default_palette ); if( !edward_krok_prawo_12 ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Wystapil problem podczas ladowania obrazka!" ); allegro_exit(); return 0; } ekwipunek = load_bmp( "ekwipunek.bmp", default_palette ); if( !ekwipunek ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Wystapil problem podczas ladowania obrazka!" ); allegro_exit(); return 0; } NowaGra(); remove_int( increment_speed ); destroy_bitmap( teren ); destroy_bitmap( bufor ); destroy_bitmap( edward ); destroy_bitmap( edward_krok_1 ); destroy_bitmap( edward_krok_2 ); destroy_bitmap( edward_prawo ); destroy_bitmap( edward_prawo_krok_1 ); destroy_bitmap( edward_prawo_krok_2 ); destroy_bitmap( edward_krok_12 ); destroy_bitmap( edward_krok_prawo_12 ); destroy_bitmap( ekwipunek ); allegro_exit(); return 0; }
END_OF_MAIN();
void CGlownyBohater::idz_w_lewo() { if( CEdward.kolizja( 'l' ) == false ) { if( edward_x > 0 ) edward_x--; frame++; if( frame > 90 ) frame = 0; if( frame < 30 ) { masked_blit( edward_krok_1, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); } else if( frame >= 30 && frame < 60 ) { masked_blit( edward_krok_12, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); } else if( frame >= 60 && frame <= 90 ) { masked_blit( edward_krok_2, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); } if( edward_x == 1 & mapa_x != 0 ) { mapa_x -= 8; edward_x = 880; } } else CEdward.stoi(); };
void CGlownyBohater::idz_w_prawo() { if( CEdward.kolizja( 'p' ) == false ) { if( edward_x < 900 ) edward_x++; frame++; if( frame > 90 ) frame = 0; if( frame < 30 ) { masked_blit( edward_prawo_krok_1, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); } else if( frame >= 30 && frame < 60 ) { masked_blit( edward_krok_prawo_12, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); } else if( frame >= 60 && frame <= 90 ) { masked_blit( edward_prawo_krok_2, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); } if( edward_x == 899 & mapa_x != 24 ) { mapa_x += 8; edward_x = 10; } } else CEdward.stoi(); };
void CGlownyBohater::stoi() { draw_sprite( bufor, edward, edward_x, edward_y ); };
void CGlownyBohater::idz_w_dol() { if( CEdward.kolizja( 'd' ) == false ) { if( edward_y < 650 ) edward_y++; frame++; if( frame > 90 ) frame = 0; if( frame < 30 ) { masked_blit( edward_prawo_krok_1, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); } else if( frame >= 30 && frame < 60 ) { masked_blit( edward_krok_prawo_12, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); } else if( frame >= 60 && frame <= 90 ) { masked_blit( edward_prawo_krok_2, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); } if( edward_y == 649 & mapa_y != 12 ) { mapa_y += 4; edward_y = 1; } } else CEdward.stoi(); };
void CGlownyBohater::idz_w_gore() { if( CEdward.kolizja( 'g' ) == false ) { if( edward_y > 0 ) edward_y--; frame++; if( frame > 90 ) frame = 0; if( frame < 30 ) { masked_blit( edward_prawo_krok_1, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); } else if( frame >= 30 && frame < 60 ) { masked_blit( edward_krok_prawo_12, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); } else if( frame >= 60 && frame <= 90 ) { masked_blit( edward_prawo_krok_2, bufor, 0, 0, edward_x, edward_y, edward->w, edward->h ); } if( edward_y == 1 & mapa_y != 0 ) { mapa_y -= 4; edward_y = 649; } } else CEdward.stoi(); };
CGlownyBohater::CGlownyBohater() { edward_x = 0; edward_y = 0; frame = 0; };
void wys_mape() { int licznik_x, licznik_y; for( licznik_x = 0; licznik_x < 32; licznik_x++ ) { for( licznik_y = 0; licznik_y < 16; licznik_y++ ) { masked_blit( teren, bufor, ( mapa[ licznik_y + mapa_y ][ licznik_x + mapa_x ] % 2 ) * 128, ( mapa[ licznik_y + mapa_y ][ licznik_x + mapa_x ] / 2 ) * 192, licznik_x * 128, licznik_y * 192, 128, 192 ); } } };
void lvl1() { while( speed > 0 ) { chodzenie = stoi; if( key[ KEY_ESC ] ) speed =- 1; if( key[ KEY_RIGHT ] ) chodzenie = prawo; if( key[ KEY_LEFT ] ) chodzenie = lewo; if( key[ KEY_DOWN ] ) chodzenie = dol; if( key[ KEY_UP ] ) chodzenie = gora; if( key[ KEY_E ] ) pokaz_ekwipunek =!pokaz_ekwipunek; speed--; clear_to_color( bufor, makecol( 150, 150, 150 ) ); wys_mape(); if( chodzenie == stoi ) CEdward.stoi(); if( chodzenie == lewo ) CEdward.idz_w_lewo(); if( chodzenie == prawo ) CEdward.idz_w_prawo(); if( chodzenie == dol ) CEdward.idz_w_dol(); if( chodzenie == gora ) CEdward.idz_w_gore(); if( pokaz_ekwipunek == true ) CEdward.pokaz_eq(); blit( bufor, screen, 0, 0, 0, 0, 1024, 768 ); }; };
void lvl2() { };
void lvl3() { };
void NowaGra() { switch( level ) { case 1: lvl1(); break; case 2: lvl2(); break; case 3: lvl3(); break; }; };
bool CGlownyBohater::kolizja( char kierunek ) { switch( kierunek ) { case 'g': for( int i = 0; i < 32; i++ ) { if( getpixel( bufor, edward_x + 23 + i, edward_y + 18 ) == makecol( 114, 47, 11 ) || getpixel( bufor, edward_x + 23 + i, edward_y + 18 ) == makecol( 39, 141, 8 ) ) return true; } return false; case 'd': for( int i = 0; i < 32; i++ ) { if( getpixel( bufor, edward_x + 23 + i, edward_y + 107 ) == makecol( 39, 141, 8 ) || getpixel( bufor, edward_x + 23 + i, edward_y + 107 ) == makecol( 66, 150, 89 ) ) return true; } return false; case 'l': for( int i = 0; i < 72; i++ ) { if( getpixel( bufor, edward_x + 23, edward_y + 18 + i ) == makecol( 39, 141, 8 ) || getpixel( bufor, edward_x + 23, edward_y + 18 + i ) == makecol( 66, 150, 89 ) || getpixel( bufor, edward_x + 23, edward_y + 18 + i ) == makecol( 114, 47, 11 ) ) return true; } return false; case 'p': for( int i = 0; i < 72; i++ ) { if( getpixel( bufor, edward_x + 77, edward_y + 18 + i ) == makecol( 39, 141, 8 ) || getpixel( bufor, edward_x + 77, edward_y + 18 + i ) == makecol( 66, 150, 89 ) || getpixel( bufor, edward_x + 77, edward_y + 18 + i ) == makecol( 114, 47, 11 ) ) return true; } return false; } return false; };
void CGlownyBohater::pokaz_eq() { masked_blit( ekwipunek, bufor, 0, 0, 774, 369, ekwipunek->w, ekwipunek->h ); };
Dzięki z góry...:) |