Mistrzem w programowaniu nie jestem, ale napisałam coś takiego:
#include <allegro.h>
#include <stdlib.h>
#include "gram.h"
int licznik = 0;
void increment_speed_counter()
{
licznik++;
}
END_OF_FUNCTION(increment_speed_counter);
int main()
{
allegro_init();
install_keyboard();
install_timer();
LOCK_VARIABLE(licznik);
LOCK_FUNCTION(increment_speed_counter);
install_int_ex(increment_speed_counter, BPS_TO_TIMER(500));
set_color_depth(32);
set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640,480,0,0);
BITMAP *bufor = create_bitmap(640,480);
/// zaladowanie obrazkow ^^
BITMAP *ludz = load_bitmap("image1.bmp", NULL);
BITMAP *wrog1 = load_bitmap("image2.bmp", NULL);
BITMAP *wrog2 = load_bitmap("image3.bmp", NULL);
BITMAP *wrog3 = load_bitmap("image4.bmp", NULL);
BITMAP *tlo = load_bitmap("tlo.bmp", NULL);
int ludz_x = 310;
int ludz_y = 230;
int wrog1_x = 50;
int wrog1_y = 50;
int wrog2_x = 500;
int wrog2_y = 50;
int wrog3_x = 300;
int wrog3_y = 350;
int ludz_lewa; // pozycja ludzia x
int ludz_gora; // pozycja y ludzia
int ludz_prawa; // (ludz_lewa + ludz->w);
int ludz_dol; // = (ludz_gora + ludz->h);
int wrog1_lewa; // = pozycja x wroga;
int wrog1_gora; // = pozycja y wroga;
int wrog1_prawa;
int wrog1_dol;
int wrog2_lewa;
int wrog2_gora;
int wrog2_prawa;
int wrog2_dol;
int wrog3_lewa;
int wrog3_gora;
int wrog3_prawa;
int wrog3_dol;
int box = false;
int kolizja;
int timer = 0;
int zycie = 10;
int timer_record[3]={0,0,0};
bool zycie2 = false;
bool zycie3 = false;
bool zycie4 = false;
bool ruchx2 = true;
bool ruchy2 = true;
bool ruchx3 = true;
bool ruchy3 = true;
bool ruchx4 = true;
bool ruchy4 = true;
while(!key[KEY_ENTER])
{
draw_sprite(bufor, tlo, 0,0);
textprintf_ex(bufor, font, 245,80, makecol(255,255,255), -1, "UCIEKAJ xD");
textprintf_ex(bufor, font, 280,150, makecol(255,255,255), -1, "Uywaj strzalek ");
textprintf_ex(bufor, font, 255,180, makecol(255,255,255), -1, "aby uciec przed kosmitami");
blit(bufor, screen, 0, 0, 0, 0, 640, 480);
}
while(!key[KEY_ESC])
{
blit(tlo, bufor, 0,0,0,0,640,480);
// sprawdzaj kiedy gra skonczona
if (zycie > 0)
{
while(licznik > 0)
{
if(key[KEY_LEFT])
if(ludz_lewa > 0)
ludz_x --;
if(key[KEY_RIGHT])
if(ludz_prawa < 639)
ludz_x ++;
if(key[KEY_DOWN])
if(ludz_dol < 479)
ludz_y ++;
if(key[KEY_UP])
if(ludz_gora > 0)
ludz_y --;
if(ruchx2)
wrog1_x ++;
else
wrog1_x--;
if(ruchy2)
wrog1_y ++;
else
wrog1_y --;
if(ruchx3)
wrog2_x ++;
else
wrog2_x --;
if(ruchy3)
wrog2_y ++;
else
wrog2_y --;
if(ruchx4)
wrog3_x ++;
else
wrog3_x --;
if(ruchy4)
wrog3_y ++;
else
wrog3_y --;
if(key[KEY_SPACE])
box = true;
else
box = false;
ludz_lewa = ludz_x;
ludz_gora = ludz_y;
ludz_prawa = (ludz_lewa + ludz->w);
ludz_dol = (ludz_gora + ludz->h);
wrog1_lewa = wrog1_x;
wrog1_gora = wrog1_y;
wrog1_prawa = (wrog1_lewa + wrog1->w);
wrog1_dol = (wrog1_gora + wrog1->h);
wrog2_lewa = wrog2_x;
wrog2_gora = wrog2_y;
wrog2_prawa = (wrog2_lewa + wrog2->w);
wrog2_dol = (wrog2_gora + wrog2->h);
wrog3_lewa = wrog3_x;
wrog3_gora = wrog3_y;
wrog3_prawa = (wrog3_lewa + wrog3->w);
wrog3_dol = (wrog3_gora + wrog3->h);
if(wrog1_prawa == 639 || wrog1_lewa == 0)
ruchx2 = !ruchx2;
if(wrog2_prawa == 639 || wrog2_lewa == 0)
ruchx3 = !ruchx3;
if(wrog3_prawa == 639 || wrog3_lewa == 0)
ruchx4 = !ruchx4;
if(wrog1_dol == 479 || wrog1_gora == 0)
ruchy2 = !ruchy2;
if(wrog2_dol == 479 || wrog2_gora == 0)
ruchy3 = !ruchy3;
if(wrog3_dol == 479 || wrog3_gora == 0)
ruchy4 = !ruchy4;
kolizja = true;
if(ludz_dol< wrog1_gora)
{
kolizja = FALSE;
}
else if(ludz_gora > wrog1_dol)
{
kolizja = FALSE;
}
else if(ludz_prawa < wrog1_lewa)
{
kolizja = FALSE;
}
else if(ludz_lewa > wrog1_prawa)
{
kolizja = FALSE;
}
if (kolizja)
{
rectfill(bufor, 0, 0, 640, 480, makecol(200,10,0));
textprintf_ex(bufor,font, 250,205, makecol(255,255,255), -1, "TRZASK TRZASK");
if(zycie2 == true)
{
zycie = zycie - 1;
zycie2 = false;
}
}
else
{
zycie2 = true;
}
kolizja = true;
if(ludz_dol < wrog2_gora)
{
kolizja = FALSE;
}
else if(ludz_gora > wrog2_dol)
{
kolizja = FALSE;
}
else if(ludz_prawa < wrog2_lewa)
{
kolizja = FALSE;
}
else if(ludz_lewa > wrog2_prawa)
{
kolizja = FALSE;
}
if (kolizja)
{
rectfill(bufor, 0, 0, 640, 480, makecol(200,0,0));
textprintf_ex(bufor,font, 305,205, makecol(255,255,255), -1, "TRZASK");
if(zycie3 == true)
{
zycie = zycie - 1;
zycie3 = false;
}
}
else
{
zycie3 = true;
}
kolizja = true;
if(ludz_dol< wrog3_gora)
{
kolizja = FALSE;
}
else if(ludz_gora > wrog3_dol)
{
kolizja = FALSE;
}
else if(ludz_prawa < wrog3_lewa)
{
kolizja = FALSE;
}
else if(ludz_lewa > wrog3_prawa)
{
kolizja = FALSE;
}
if (kolizja)
{
rectfill(bufor, 0, 0, 640, 480, makecol(0,0,0));
textprintf_ex(bufor,font, 305,205, makecol(255,255,255), -1, "TRZASK");
if(zycie4 == true)
{
zycie = zycie - 1;
zycie4 = false;
}
}
else
{
zycie4 = true;
}
licznik --;
}
rect(bufor, 0, 0, 639, 479, makecol(255,255,255));
draw_sprite(bufor, wrog1, wrog1_x, wrog1_y);
draw_sprite(bufor, wrog2, wrog2_x, wrog2_y);
draw_sprite(bufor, wrog3, wrog3_x, wrog3_y);
draw_sprite(bufor, ludz, ludz_x, ludz_y);
if(zycie!=0)
textprintf_ex(bufor,font, 5,35, makecol(255,255,255), -1, "%d",timer);
if(zycie > 0)
{
timer = timer + 1;
textprintf_ex(bufor,font, 5,35, makecol(255,255,255), -1, "%d",timer);
}
if(box == true)
{
rect(bufor, ludz_lewa, ludz_gora, ludz_prawa, ludz_dol, makecol(255,0,0));
rect(bufor, wrog1_lewa, wrog1_gora, wrog1_prawa, wrog1_dol, makecol(255,0,0));
rect(bufor, wrog2_lewa, wrog2_gora, wrog2_prawa, wrog2_dol, makecol(255,0,0));
rect(bufor, wrog3_lewa, wrog3_gora, wrog3_prawa, wrog3_dol, makecol(255,0,0));
}
if (timer > timer_record[0])
{
timer_record[2]=timer_record[1];
timer_record[1]=timer_record[0];
timer_record[0]=timer;
}
else if (timer > timer_record[1])
{
timer_record[2]=timer_record[1];
timer_record[1]=timer;
}
else if (timer > timer_record[2])
{
timer_record[2]=timer;
}
textprintf_ex(bufor, font, 5,5, makecol(255,255,255), -1,"ZYCIA:");
textprintf_ex(bufor, font, 5,15, makecol(255,255,255), -1,"%d",zycie);
textprintf_ex(bufor, font, 5,25, makecol(255,255,255), -1,"WYNIK:");
blit(bufor, screen, 0, 0, 0, 0, 640, 480);
clear_bitmap(bufor);
}
else
{
blit(tlo, bufor, 0,0,0,0,640,480);
textprintf_ex(bufor, font, 250,5, makecol(255,255,255), -1,"KONIEC GRY");
textprintf_ex(bufor, font, 250,15, makecol(255,255,255), -1,"TWÓJ WYNIK:");
textprintf_ex(bufor, font, 250,25, makecol(255,255,255), -1,"%d", timer);
if(key[KEY_ENTER])
{
zycie = 10;
timer = 0;
}
blit(bufor, screen, 0, 0, 0, 0, 640, 480);
clear_bitmap(bufor);
}
}
destroy_bitmap(bufor);
destroy_bitmap(ludz);
destroy_bitmap(wrog1);
destroy_bitmap(wrog2);
destroy_bitmap(wrog3);
destroy_bitmap(tlo);
return 0;
}
END_OF_MAIN()
jak to cholerstwo podzielić na części żeby działało, przy moich ostatnich próbach przeniesienia funkcji ruchu, gracz przestaje się poruszać ;/