piszę prostą grę z wykorzystaniem allegro
oto kod:
/*
zlo destructor
autor: major
e-mail: [email protected]
*/
bool kolizja(int x1,int y1 , int x2,int y2,int s2,int w2)
{
if ( x1>=x2 && x1<=x2+s2 && y1>=y2 && y1<=y2+w2) return true;
else return false;
};
#include <allegro.h>
int main()
{
int opcja = 1;
int czy_enter = 5;
int kre_y = 710;
allegro_init();
install_keyboard();
set_color_depth(32);
set_gfx_mode(GFX_AUTODETECT,1280,1024,0,0);
clear_to_color(screen, makecol(128,128,128));
BITMAP *lu1 = NULL;
BITMAP *lu3 = NULL;
BITMAP *lu5 = NULL;
BITMAP *tlo = NULL;
BITMAP *title = NULL;
BITMAP *tlo2 = NULL;
BITMAP *bufor = NULL;
BITMAP *kursor =NULL;
BITMAP *goo = NULL;
bufor = create_bitmap(1280,1024);
lu1 = load_bmp("1.bmp",default_palette);
lu3 = load_bmp("2.bmp",default_palette);
lu5 = load_bmp("3.bmp",default_palette);
tlo= load_bmp("tlo.bmp",default_palette);
tlo2= load_bmp("tlo2.bmp",default_palette);
title= load_bmp("title.bmp",default_palette);
kursor = load_bitmap("kursor.bmp",NULL);
goo= load_bmp("goo.bmp",default_palette);
if (!lu1 && !lu3 && !lu5 && !tlo && !title && !tlo2 && !kursor && !goo )
{
set_gfx_mode(GFX_TEXT,0,0,0,0);
allegro_message("nie mogę załadować obrazka krótejś grafiki!");
allegro_exit();
return 0;
}
blit( tlo, bufor, 0,0,0,0 , tlo->w, tlo->h);
masked_blit( lu1, bufor, 0,0, 80,700, lu1->w, lu1->h);
masked_blit( lu3, bufor, 0,0, 80,800, lu3->w, lu3->h);
masked_blit( lu5, bufor, 0,0, 80,900, lu5->w, lu5->h);
masked_blit( title, bufor, 0,0, 300,100, title->w, title->h);
blit( bufor, screen, 0,0,0,0, 1280,1024);
install_mouse();
show_mouse(screen);
while(1)
{
rest(1);
if( kolizja( mouse_x,mouse_y,80, 700, lu1->w, lu1->h)==true)
{
if(mouse_b == 1)
{
remove_mouse();
install_mouse();
int ilosc_goo = 5;
int goo_vis[] = {1,1,1,1,1};
int score = 0;
while(!key[KEY_ESC])
{
rest(10);
clear_to_color(bufor, makecol(150,150,150));
blit( tlo2, bufor, 0,0,0,0 , tlo2->w, tlo2->h);
if(goo_vis[0] == 1) { masked_blit( goo, bufor, 0,0,300,800 , goo->w, goo->h); }
if(goo_vis[1] == 1) { masked_blit( goo, bufor, 0,0,700,700 , goo->w, goo->h); }
if(goo_vis[2] == 1) { masked_blit( goo, bufor, 0,0,900,700 , goo->w, goo->h); }
if(goo_vis[3] == 1) { masked_blit( goo, bufor, 0,0,100,900 , goo->w, goo->h); }
textprintf_ex(bufor,font,20,200,makecol(0,0,0),-1,"Myszka x = %d, y = %d, klawisz = %d ! , mouse_z = %d", mouse_x,mouse_y,mouse_b,mouse_z);
textprintf_ex(bufor,font,20,100,makecol(0,0,0),-1,"score = %d", score);
if(goo_vis[0] ==1)
{
if( kolizja( mouse_x+22,mouse_y+22,300, 800, goo->h, goo->w)==true)
{
textout_ex(bufor,font,"Kolizja !",20,20 ,makecol(0,0,0),-1);
if(mouse_b == 1)
{
goo_vis[0] = 0;
score ++;
}
}
}
if(goo_vis[1] ==1)
{
if( kolizja( mouse_x+22,mouse_y+22,700, 700, goo->h, goo->w)==true)
{
textout_ex(bufor,font,"Kolizja !",20,20 ,makecol(0,0,0),-1);
if(mouse_b == 1)
{
goo_vis[1] = 0;
score ++;
}
}
}
if(goo_vis[2] ==1)
{
if( kolizja( mouse_x+22,mouse_y+22,900, 700, goo->h, goo->w)==true)
{
textout_ex(bufor,font,"Kolizja !",20,20 ,makecol(0,0,0),-1);
if(mouse_b == 1)
{
goo_vis[2] = 0;
score ++;
}
}
}
if(goo_vis[3] ==1)
{
if( kolizja( mouse_x+22,mouse_y+22,100, 900, goo->h, goo->w)==true)
{
textout_ex(bufor,font,"Kolizja !",20,20 ,makecol(0,0,0),-1);
if(mouse_b == 1)
{
goo_vis[3] = 0;
score ++;
}
}
}
masked_blit( kursor, bufor, 0,0,mouse_x,mouse_y , kursor->w, kursor->h);
blit( bufor, screen, 0,0,0,0, 1280,1024);
}
}
}
if( kolizja( mouse_x,mouse_y,80, 800, lu1->w, lu1->h)==true)
{
if(mouse_b == 1)
{
while(!key[KEY_ESC])
{
clear_to_color(bufor, makecol(150,150,150));
blit( tlo, bufor, 0,0,0,0 , tlo->w, tlo->h);
masked_blit( title, bufor, 0,0, 300, 100, title->w, title->h);
blit( bufor, screen, 0,0,0,0, 1280,1024);
show_mouse(screen);
}
}
}
if( kolizja( mouse_x,mouse_y,80, 900, lu5->w, lu5->h)==true)
{
if(mouse_b == 1)
{
break;
}
}
else
{
blit( tlo, bufor, 0,0,0,0 , tlo->w, tlo->h);
masked_blit( lu1, bufor, 0,0, 80,700, lu1->w, lu1->h);
masked_blit( lu3, bufor, 0,0, 80,800, lu3->w, lu3->h);
masked_blit( lu5, bufor, 0,0, 80,900, lu5->w, lu5->h);
masked_blit( title, bufor, 0,0, 300, 100, title->w, title->h);
blit( bufor, screen, 0,0,0,0, 1280,1024);
show_mouse(screen);
}
}
//---------------------------------------------#############
allegro_exit();
return 0;
}
END_OF_MAIN();
i pętla, która sprawdza, czy został naciśnięty klawisz nad przyciskiem zajmuje cały czas procesora, próbowałem to rozwiązać przez rest(); , tylko że te funkcja także zużywa cały czas cpu...
w jaki inny sposób moge sprawdzić czy przycisk został naciśnięty ?