-
Data: 2009-07-08 09:02:53
Temat: [Allegro] Kolizja myszki z obiektem
Od: krzysztof posłuszny <w...@w...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]W programie mam wczytany obrazek który porusza się losowo po ekranie i jako
kursor myszki wczytany drugi obrazek (celownik). Teraz chciałbym aby po
najechaniu celownikiem na poruszający się obiekt doszło do kolizji i
wyświetlenia napisu np. kolizja. Za cholerę nie mogę sobie dać z tym rady.
Siedzę już nad tym parę dni. Pomoże mi ktoś rozwiązać ten problem? W
załaczeniu przesyłam kod programu.
#include <allegro.h>
#include <cstdlib>
volatile long speed = 0;
void increment_speed()
{
speed++;
}
END_OF_FUNCTION(increment_speed);
LOCK_VARIABLE(speed);
LOCK_FUNCTION(increment_speed);
class Cpostac
{
public:
short int x,y;
short int s,w;
};
Cpostac cel1,kursor1;
bool kolizja(int x1,int y1,int s1,int w1,int x2,int y2,int s2,int w2)
{
if( x2<=x1+s1 && x2>x1 && y2>=y1 && y2<=y1+w1) return true; else
if( x2<=x1+s1 && x2>x1 && y2+w2>=y1 && y2+w2<=y1+w1) return true; else
if( x2+s2<=x1+s1 && x2+s2>x1 && y2>=y1 && y2<=y1+w1) return true; else
if( x2+s2<=x1+s1 && x2+s2>x1 && y2+w2>=y1 && y2+w2<=y1+w1) return true;
else return false;
};
BITMAP *kursor;
void laduj_kursor()
{
kursor = load_bitmap("celownik.bmp",NULL);
if (!kursor)
{
set_gfx_mode(GFX_TEXT,0,0,0,0);
allegro_message("Nie moge zaladowac grafiki ( kursor )");
allegro_exit();
}
};
int mx=0,my=0,mb=0;
void myszka()
{
if( mx != mouse_x || my != mouse_y || mb != mouse_b)
{
mx = mouse_x;
my = mouse_y;
mb = mouse_b;
}
};
int main()
{
allegro_init();
install_keyboard();
set_color_depth(16);
set_gfx_mode(GFX_AUTODETECT_WINDOWED,800,600,0,0);
clear_to_color(screen, makecol(128,128,128));
install_sound(DIGI_AUTODETECT,MIDI_AUTODETECT,"");
install_timer();
install_int_ex(increment_speed, BPS_TO_TIMER(100));
set_volume(255,255);
//Tytuł okienka
set_window_title("GRA DANIELA");
laduj_kursor();
install_mouse();
show_mouse(screen);
set_mouse_sprite(kursor);
unscare_mouse();
SAMPLE *dzwiek = NULL;
BITMAP *daniel = NULL;
BITMAP *celownik=NULL;
BITMAP *bufor = NULL;
BITMAP *cel=NULL;
bufor = create_bitmap(800,600);
// Ładowanie postaci
cel1.x=rand()%500; cel1.y=rand()%500; cel1.s=64; cel1.w=67;
kursor1.x=0; kursor1.y=0; kursor1.s=40; kursor1.w=40;
daniel = load_bmp("daniel.bmp",default_palette);
if (!daniel)
{
set_gfx_mode(GFX_TEXT,0,0,0,0);
allegro_message("nie mogę załadować obrazka Daniel !");
allegro_exit();
return 0;
}
blit( daniel, screen, 0,0, 0,0, daniel->w, daniel->h);
readkey();
dzwiek = load_sample("muzyka.wav");
if (!dzwiek)
{
set_gfx_mode(GFX_TEXT,0,0,0,0);
allegro_message("nie mogę załadować dzwieku !");
allegro_exit();
return 0;
}
play_sample(dzwiek, 255,127,1000,1);
cel = load_bmp("cel.bmp",default_palette);
blit( cel, screen, 0,0, 0,0, cel->w, cel->h);
while (!key[KEY_ESC])
{
//Zdobyte punkty
int licznik=0;
myszka();
while( speed > 0)
{
cel1.x=rand()%500;
cel1.y=rand()%500;
speed--;
}
clear_to_color(bufor, makecol(0,0,0));
masked_blit(cel, bufor, 0,0,cel1.x, cel1.y,cel1.s,cel1.w);
//masked_blit( kursor, bufor, 0,0, kursor1.x, kursor1.y, kursor1.s,
kursor1.w);
// Wyswietlanie napisu jeśli kolizja
if(kolizja( cel1.x,cel1.y,cel1.s, cel1.w, kursor1.x, kursor1.y, kursor1.s,
kursor1.w)==true)
{ textout_ex(bufor,font,"Kolizja !",20,20 ,makecol(255,200,255),-1); }
//Odmierzanie czasu w sekundach
int czas=clock()/1000;
textprintf_ex(bufor,font,20,40,makecol(200,200,200),
-1,"CZAS GRY =
%d",czas,0,0);
textprintf_ex(bufor,font,20,20,makecol(200,200,200),
-1,"ZDOBYTE PUNKTY =
%d",licznik,0,0);
blit( bufor,screen, 0,0,0,0, 800,600);
rest(600);
}
destroy_bitmap(daniel);
destroy_bitmap(bufor);
destroy_bitmap(kursor);
destroy_bitmap(cel);
stop_sample(dzwiek);
allegro_exit();
return 0;
}
END_OF_MAIN();
Następne wpisy z tego wątku
- 08.07.09 09:28 Michoo
- 08.07.09 10:01 Borafu
- 08.07.09 10:14 krzysztof posłuszny
- 08.07.09 11:26 Michal Kleczek
- 11.07.09 17:54 Solaris
- 12.07.09 07:45 Piotr Kulinski
- 12.07.09 17:14 Wojciech Muła
Najnowsze wątki z tej grupy
- Alg. kompresji LZW
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
Najnowsze wątki
- 2025-03-02 Tusk idzie na rekord deportacji po 1989 [Będzie popyt na prawników]
- 2025-03-01 Obywatel telefonuje 112 lub 986
- 2025-03-01 detektyw (?) Rutkowski działał jako prasa
- 2025-03-01 "Policjant został ujęty obywatelsko..."
- 2025-03-01 zatrzymanie zbyszka maja
- 2025-03-01 Warszawa => Expert Recruiter 360 <=
- 2025-03-01 Chrzanów => NodeJS Developer <=
- 2025-03-01 Warszawa => Gen AI Engineer <=
- 2025-03-01 Wrocław => Konsultant wdrożeniowy Comarch XL/Optima (Księgowość i
- 2025-03-01 Kraków => Technical Team Leader (Clojure, Java) <=
- 2025-03-01 Zrobił TV OLED z TV LCD
- 2025-03-01 Gdynia => Sales Executive / KAM <=
- 2025-03-01 Błonie => Sales Specialist <=
- 2025-03-01 Ryga => Konsultant Wdrożeniowy Comarch XL/Optima (Księgowość i Kad
- 2025-03-01 Żerniki => Dyspozytor Międzynarodowy <=