-
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mail
From: krzysztof posłuszny <w...@w...pl>
Newsgroups: pl.comp.programming
Subject: [Allegro] Kolizja myszki z obiektem
Date: Wed, 8 Jul 2009 11:02:53 +0200
Organization: http://onet.pl
Lines: 149
Message-ID: <h31nbt$klg$1@news.onet.pl>
NNTP-Posting-Host: 80.54.93.2
Mime-Version: 1.0
Content-Type: text/plain; format=flowed; charset="iso-8859-2"; reply-type=original
Content-Transfer-Encoding: 8bit
X-Trace: news.onet.pl 1247043773 21168 80.54.93.2 (8 Jul 2009 09:02:53 GMT)
X-Complaints-To: n...@o...pl
NNTP-Posting-Date: Wed, 8 Jul 2009 09:02:53 +0000 (UTC)
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2900.5512
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579
X-Antivirus: avast! (VPS 090707-0, 2009-07-07), Outbound message
X-Antivirus-Status: Clean
Xref: news-archive.icm.edu.pl pl.comp.programming:182630
[ ukryj 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-12 Ryga => Konsultant Wdrożeniowy Comarch XL/Optima (Księgowość i Kad
- 2025-03-12 Poznań => Konsultant wdrożeniowy Comarch XL/Optima (Księgowość i
- 2025-03-12 Warszawa => Programista C <=
- 2025-03-12 Chrzanów => Spedytor Międzynarodowy (handel ładunkami/prowadzenie f
- 2025-03-12 64 proc. kierowców zrobi dodatkowo maks. 500 m, aby przy okazji zatankować pojazd
- 2025-03-12 Warszawa => Generative AI Engineer <=
- 2025-03-12 Dęblin => Node.js / Fullstack Developer <=
- 2025-03-12 Warszawa => Gen AI Engineer <=
- 2025-03-12 Warszawa => Data Engineer (Tech Lead) <=
- 2025-03-12 Gdańsk => PHP Developer <=
- 2025-03-12 China-Kraków => Production Coordinator / Representant Product Dev <=
- 2025-03-12 Warszawa => JavaScript / Node / Fullstack Developer <=
- 2025-03-12 China-Kraków => Key Account Manager IT <=
- 2025-03-12 Warszawa => Java Developer <=
- 2025-03-12 Warszawa => Junior Digital Product Manager <=