Oto moje wypociny zawarte w funkcji odpowiadającej za wroga easy.
W funkcji jest wyswietlenie wroga i jego pocisku, a także wszystkie możliwe kolizje.
Kolizja pociskow z każdej broni z wrogiem, kolizja pocisku wroga z robocikiem,
kolizja robocika z wrogiem i kolizja pocisku flamethrower z pociskiem wroga czyli możliwość obrony dla robota przed pociskami.
Przy każdym wywołaniu kolizji "coś się dzieje". Albo uruchamiamy funkcje odpowiedzialne za LOSOWE wypadanie bonusów, tracimy życia, wypada amunicja, zabijamy wroga
Użyłem Cwrog_easy enemy_e[5]; czyli stowrzyłem 6-elementową tablicę obietków klasy enemy_easy. 6 wrogow tej klasy wystarczy. Liczba wrogich statków uzależniona jest od void etapy() (poprzednie posty).W funkcji jest wyswietlenie wroga i jego pocisku, a także wszystkie możliwe kolizje.
Kolizja pociskow z każdej broni z wrogiem, kolizja pocisku wroga z robocikiem,
kolizja robocika z wrogiem i kolizja pocisku flamethrower z pociskiem wroga czyli możliwość obrony dla robota przed pociskami.
Przy każdym wywołaniu kolizji "coś się dzieje". Albo uruchamiamy funkcje odpowiedzialne za LOSOWE wypadanie bonusów, tracimy życia, wypada amunicja, zabijamy wroga
Napisałem Ostatni post przed wersją demo bo miało być obiektowo, a nie jest do końca. Zastanawiam się aby te kolizje jeszcze upchnąć do klas bo za dużo tu tego ...
Oto kod:
for(int e=0; e<max_easy; e++) //easy
{
if( (frame>=0) && (frame<=80) )
{
draw_sprite(bufor, wrog, enemy_e[e].pozwro_x, enemy_e [e].pozwro_y);
draw_sprite(bufor, pociskwroga, enemy_e[e].pozpocwro_x, enemy_e[e].pozpocwro_y);
}
if( kolizja(enemy_e[e].pozwro_x,enemy_e[e].pozwro_y,wrog->w,wrog->h,strzal_bazooka.pozpoc_x,strzal_bazooka.pozpoc_y,pocisk->w,pocisk->h) )
{
enemy_e[e].odejm_zycia(2);
strzal_bazooka.pozpoc_y=-40;
bazooka_dodaj.bazooka(enemy_e[e].pozwro_x,enemy_e[e].pozwro_y);
zycie_dodaj.aid();
przyspiesz_dodaj.przyspiesz();
}
else if( kolizja(enemy_e[e].pozwro_x,enemy_e[e].pozwro_y,wrog->w,wrog->h,strzal_machinegun.pozpoc_x,strzal_machinegun.pozpoc_y,mach_gun->w,mach_gun->h) )
{
enemy_e[e].odejm_zycia(1);
strzal_machinegun.pozpoc_y=-30;
bazooka_dodaj.bazooka(enemy_e[e].pozwro_x,enemy_e[e].pozwro_y);
zycie_dodaj.aid();
przyspiesz_dodaj.przyspiesz();
}
else if( kolizja(enemy_e[e].pozwro_x,enemy_e[e].pozwro_y,wrog->w,wrog->h,strzal_laser.pozpoc_x,strzal_laser.pozpoc_y,laser->w,laser->h) )
{
enemy_e[e].odejm_zycia(3);
bazooka_dodaj.bazooka(enemy_e[e].pozwro_x,enemy_e[e].pozwro_y);
zycie_dodaj.aid();
przyspiesz_dodaj.przyspiesz();
}
else if( kolizja(enemy_e[e].pozwro_x,enemy_e[e].pozwro_y,wrog->w,wrog->h,strzal_flamethrower.pozpoc_x,strzal_flamethrower.pozpoc_y,flame->w,flame->h) )
{
enemy_e[e].odejm_zycia(5);
enemy_e[e].czest_poc=enemy_e[e].czest_poc-20;
strzal_flamethrower.pozpoc_y=-30;
bazooka_dodaj.bazooka(enemy_e[e].pozwro_x,enemy_e[e].pozwro_y);
zycie_dodaj.aid();
przyspiesz_dodaj.przyspiesz();
}
//kolizja pocisku enemy_e z ludkiem
if( kolizja(ludek.pozs_x,ludek.pozs_y,statek->w,statek->h,enemy_e[e].pozpocwro_x,enemy_e[e].pozpocwro_y,pociskwroga->w,pociskwroga->h) )
{
enemy_e[e].pozpocwro_x=0;
enemy_e[e].pozpocwro_y=700;
zycia=zycia-2;
}
//kolizja enemy_e z ludkiem
if( kolizja(ludek.pozs_x,ludek.pozs_y,statek->w,statek->h,enemy_e[e].pozwro_x,enemy_e[e].pozwro_y,wrog->w,wrog->h) )
{
enemy_e[e].pozwro_x=rand()%550;
enemy_e[e].pozwro_y=0;
zycia=zycia-4;
}
//kolizja pocisku enemy_e z pociskiem ludka
if( kolizja (strzal_flamethrower.pozpoc_x,strzal_flamethrower.pozpoc_y, flame->w, flame->h,enemy_e[e].pozpocwro_x,enemy_e[e].pozpocwro_y,pociskwroga->w,pociskwroga->h) )
{
enemy_e[e].pozpocwro_y=700;
}
enemy_e[e].strzelanie_wroga();
enemy_e[e].poruszanie_wroga();
}
Jestem przygotowany na krytykę i otwarty na pomysły co do zmian w kodzie :)
Pewnie trochę potrwa (w weekend studia) zanim zrobię kolizje dla innych wrogów ale przy następnym poście dodam kod w code.google.
Brak komentarzy:
Prześlij komentarz