Witam!
Zacząłem pisać grę korzystając z biblioteki allegro. Mam można powiedzieć porządny wstęp aby grę dalej rozwijać. Problem w tym, że jest ona niestabilna. Czasami działa przez kilka minut i nic się nie dzieje, a czasami zawiesza się już po kilku sekundach (ludzik, którym można chodzić staje w miejscu i nie ma mowy nim ruszyć, po chwili komunikat, że program nie odpowiada). Osobiście nie znalazłem, żadnego błędu w kodzie więc proszę was o pomoc.
Jest jeszcze jedno moje podejrzenie, ponieważ już po utworzeniu projektu zmieniłem jego nazwę - nazwę tę zmieniłem w każdym pliku utworzonym przez kompilator więc myślę, że to raczej nie jest rzecz, która powoduje zawieszanie się. Oto kod:
#include <allegro.h>
#include <cstdlib>
#include <ctime>
volatile long speed = 0;
void increment_speed()
{
speed++;
}
END_OF_FUNCTION( increment_speed );
LOCK_VARIABLE( speed );
LOCK_FUNCTION( increment_speed );
void init() {
int depth, res;
allegro_init();
depth = desktop_color_depth();
if (depth == 0) depth = 32;
set_color_depth(depth);
res = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0);
if (res != 0) {
allegro_message(allegro_error);
exit(-1);
}
install_timer();
install_keyboard();
install_mouse();
show_mouse(screen);
unscare_mouse();
install_timer();
install_int_ex(increment_speed, BPS_TO_TIMER(100));
}
int main() {
init();
srand(time(0));
int x = 250, y = 250, fr = 0, zm_pom1 = 0, zm_pom2 = 0;
int mx = 0, my = 0, mb = 0;
int xn, yn, punkty;
BITMAP*bufor = NULL;
bufor = create_bitmap(800,600);
if( !bufor )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować bufora !" );
allegro_exit();
return 0;
}
BITMAP*tlo = NULL;
tlo = load_bmp("tlo.bmp",default_palette);
if( !tlo )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować tlo !" );
allegro_exit();
return 0;
}
BITMAP*l01 = NULL;
l01 = load_bmp("l01.bmp",default_palette);
if( !l01 )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka l01 !" );
allegro_exit();
return 0;
}
BITMAP*l02 = NULL;
l02 = load_bmp("l02.bmp",default_palette);
if( !l02 )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka l02 !" );
allegro_exit();
return 0;
}
BITMAP*l03 = NULL;
l03 = load_bmp("l03.bmp",default_palette);
if( !l03 )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka l03 !" );
allegro_exit();
return 0;
}
BITMAP*l04 = NULL;
l04 = load_bmp("l04.bmp",default_palette);
if( !l04 )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka l04 !" );
allegro_exit();
return 0;
}
BITMAP*l05 = NULL;
l05 = load_bmp("l05.bmp",default_palette);
if( !l05 )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka l05 !" );
allegro_exit();
return 0;
}
BITMAP*l06 = NULL;
l06 = load_bmp("l06.bmp",default_palette);
if( !l06 )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka l06 !" );
allegro_exit();
return 0;
}
BITMAP*l07 = NULL;
l07 = load_bmp("l07.bmp",default_palette);
if( !l07 )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka l07 !" );
allegro_exit();
return 0;
}
BITMAP*l08 = NULL;
l08 = load_bmp("l08.bmp",default_palette);
if( !l08 )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka l08 !" );
allegro_exit();
return 0;
}
BITMAP*l09 = NULL;
l09 = load_bmp("l09.bmp",default_palette);
if( !l09 )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka l09 !" );
allegro_exit();
return 0;
}
BITMAP*l10 = NULL;
l10 = load_bmp("l10.bmp",default_palette);
if( !l10 )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka l10 !" );
allegro_exit();
return 0;
}
BITMAP*l11 = NULL;
l11 = load_bmp("l11.bmp",default_palette);
if( !l11 )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka l11 !" );
allegro_exit();
return 0;
}
BITMAP*l12 = NULL;
l12 = load_bmp("l12.bmp",default_palette);
if( !l12 )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka l12 !" );
allegro_exit();
return 0;
}
BITMAP*l13 = NULL;
l13 = load_bmp("l13.bmp",default_palette);
if( !l13 )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka l13 !" );
allegro_exit();
return 0;
}
BITMAP*l14 = NULL;
l14 = load_bmp("l14.bmp",default_palette);
if( !l14 )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka l14 !" );
allegro_exit();
return 0;
}
BITMAP*l15 = NULL;
l15 = load_bmp("l15.bmp",default_palette);
if( !l15 )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka l15 !" );
allegro_exit();
return 0;
}
BITMAP*l16 = NULL;
l16 = load_bmp("l16.bmp",default_palette);
if( !l16 )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka l16 !" );
allegro_exit();
return 0;
}
BITMAP*l17 = NULL;
l17 = load_bmp("l17.bmp",default_palette);
if( !l17 )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka l17 !" );
allegro_exit();
return 0;
}
BITMAP*l18 = NULL;
l18 = load_bmp("l18.bmp",default_palette);
if( !l18 )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka l18 !" );
allegro_exit();
return 0;
}
BITMAP*l19 = NULL;
l19 = load_bmp("l19.bmp",default_palette);
if( !l19 )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka l19 !" );
allegro_exit();
return 0;
}
BITMAP*l20 = NULL;
l20 = load_bmp("l20.bmp",default_palette);
if( !l20 )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka l20 !" );
allegro_exit();
return 0;
}
while (!key[KEY_ESC]) {
blit(tlo,bufor,0,0,0,0,800,600);
rect(bufor,2,2,797,562,makecol(0,0,200));
mx = mouse_x;
my = mouse_y;
mb = mouse_b;
while (speed > 0) { //sterowanie ludzikiem
if (key[KEY_LEFT]) x--;
if (key[KEY_RIGHT]) x++;
if (key[KEY_UP]) y--;
if (key[KEY_DOWN]) y++;
if (my>y+32 && mb == 1) y++;
if (my<y+32 && mb == 1) y--;
if (mx>x+14 && mb == 1) x++;
if (mx<x+14 && mb == 1) x--;
speed--;
if (key[KEY_LEFT] || key[KEY_RIGHT] || key[KEY_UP] || key[KEY_DOWN] || mb == 1)fr++;
if (fr > 99) fr = 0;
}
if (x<3) x = 3; //ludzik ma nie wychodzić poza ekran
if (x>770) x = 770;
if (y<3) y = 3;
if (y>495) y = 495;
if (zm_pom1 == 0) { //rysowanie punktów do zbierania
xn = rand()%780+10;
yn = rand()%545+10;
zm_pom1 = 1;
}
circlefill(bufor,xn,yn,7,makecol(106,248,255));
circle(bufor,xn,yn,7,makecol(227,255,34));
circle(bufor,xn,yn,6,makecol(227,255,34));
circlefill(bufor,xn,yn,1,makecol(255,0,0));
if (abs(x+13-xn)<=20 && abs(y+33-yn)<=40) zm_pom1 = 0; //zmiana położenia punktu po zebraniu
if (fr<5) draw_sprite(bufor,l01,x,y);
else if (fr>= 5 && fr<10) draw_sprite(bufor,l02,x,y);
else if (fr>= 10 && fr<15) draw_sprite(bufor,l03,x,y);
else if (fr>= 15 && fr<20) draw_sprite(bufor,l04,x,y);
else if (fr>= 20 && fr<25) draw_sprite(bufor,l05,x,y);
else if (fr>= 25 && fr<30) draw_sprite(bufor,l06,x,y);
else if (fr>= 30 && fr<35) draw_sprite(bufor,l07,x,y);
else if (fr>= 35 && fr<40) draw_sprite(bufor,l08,x,y);
else if (fr>= 40 && fr<45) draw_sprite(bufor,l09,x,y);
else if (fr>= 45 && fr<50) draw_sprite(bufor,l10,x,y);
else if (fr>= 50 && fr<55) draw_sprite(bufor,l11,x,y);
else if (fr>= 55 && fr<60) draw_sprite(bufor,l12,x,y);
else if (fr>= 60 && fr<65) draw_sprite(bufor,l13,x,y);
else if (fr>= 65 && fr<70) draw_sprite(bufor,l14,x,y);
else if (fr>= 70 && fr<75) draw_sprite(bufor,l15,x,y);
else if (fr>= 75 && fr<80) draw_sprite(bufor,l16,x,y);
else if (fr>= 80 && fr<85) draw_sprite(bufor,l17,x,y);
else if (fr>= 85 && fr<90) draw_sprite(bufor,l18,x,y);
else if (fr>= 90 && fr<95) draw_sprite(bufor,l19,x,y);
else if (fr>= 95 && fr<100) draw_sprite(bufor,l20,x,y);
blit(bufor,screen,0,0,0,0,800,600);
}
remove_int( increment_speed );
destroy_bitmap(l01);
destroy_bitmap(l02);
destroy_bitmap(l03);
destroy_bitmap(l04);
destroy_bitmap(l05);
destroy_bitmap(l06);
destroy_bitmap(l07);
destroy_bitmap(l08);
destroy_bitmap(l09);
destroy_bitmap(l10);
destroy_bitmap(l11);
destroy_bitmap(l12);
destroy_bitmap(l13);
destroy_bitmap(l14);
destroy_bitmap(l15);
destroy_bitmap(l16);
destroy_bitmap(l17);
destroy_bitmap(l18);
destroy_bitmap(l19);
destroy_bitmap(l20);
destroy_bitmap(bufor);
clear_keybuf();
return 0;
}
END_OF_MAIN()
Z góry dziękuję za odpowiedź.
BITMAP *bitmaps[IloscBitmap]
-> mniej-wiecej tak powinna wygladac.