Przyszedł czas na rozmyślenia jak zrobić w grze etapy. Myślałem nad tym trochę i wymyśliłem taką funkcję, która przyjmuje globalną zmienną zawierającą liczbę punktów zdobytych przez gracza. Wcześniej w jakimś poście wspomiałem o zmiennej punktacja i teraz o niej pomówimy. Liczba punktów będzie odpowiadała poszczególnym etapom.
Gra oczywiście zaczyna się z 0-wym dorobkiem punktów. Po zestrzeleniu "odpowiedniego" wroga dostaniemy "odpowiednią" ilość punktów zależnie od poziomu trudności wroga.
np: Cwrog_easy
if(zycia<=0)
{
punktacja++;
}
dostajemy 1 pkt
Cwrog_medium
if(zycia<=0)
{
punktacja=punktacja+2;
}
dostajemy 2 pkt
itd... Jak wyjdzie demo to wtedy zmodyfikuje się odpowiednie wartości co do życ wroga i punktacji za zabicie go.
Teraz opiszę funkcję etapy.
Pierwszej części nie będę opisywał bo wszystko widać...
Do switcha przesyłamy argument etap zawierający liczbę, która jest równa etapowi. i w case przypisujemy do zmiennych wartości np:
case 1:
max_easy=3; - tylu wrogów Cwrog_easy wystąpi w 1 etapie czyli 3
max_medium=0; - tylu wrogów Cwrog_medium wystąpi w 1 etapie czyli 0
max_hard=0; - tylu wrogów Cwrog_hard wystąpi w 1 etapie
max_vhard=0; - tylu wrogów Cwrog_vhard wystąpi w 1 etapie (narazie go nie ma ale trwwaja prace nad wymyśleniem ruchów dla niego)
max_b1=0; - tylu bossów Cboss1 wystąpi w 1 etapie
void etapy(int pkt)
{
if(pkt<=35) { etap=1; }
else if( (pkt>36) && (pkt<=60) ) { etap=2; }
else if( (pkt>61) && (pkt<=120) ) { etap=3; }
else if( (pkt>121) && (pkt<180) ) { etap=4; }
else if( (pkt>181) && (pkt<280) ) { etap=5; }
else if( (pkt>281) && (pkt<400) ) { etap=6; }
else if( (pkt>441) && (pkt<590) ) { etap=7; }
else if( (pkt>591) && (pkt<740) ) { etap=8; }
else if( (pkt>741) && (pkt<890) ) { etap=9; }
else if( (pkt>891) && (pkt<991) ) { etap=10; }
else if( (pkt>991) && (pkt<1100) ) { etap=11; }
switch(etap)
{
case 1:
max_easy=3;
max_medium=0;
max_hard=0;
max_vhard=0;
max_b1=0;
break;
case 2:
max_easy=1;
max_medium=2;
max_hard=0;
max_vhard=0;
max_b1=0;
break;
case 3:
max_easy=1;
max_medium=1;
max_hard=1;
max_vhard=0;
max_b1=0;
break;
case 4:
max_easy=2;
max_medium=1;
max_hard=1;
max_vhard=0;
max_b1=0;
break;
// itd
case 10:
max_easy=0;
max_medium=0;
max_hard=0;
max_vhard=0;
max_b1=1;
break;
}
}
Od jakiegoś czasu nie piszę o kodzie w main() bo przyjdzie na to czas, więc pokażę co zrobimy z taką zmienną w głównej pętli gry:
for(int e=0; e<max_easy; e++)
{}
for(int m=0; m<max_medium; m++)
{}
Taka pętla wykona się tyle razy ilu mamy wrogów w poszczególnym etapie (funkcja etapy i instrukcja case). Zawarte w niej będą funkcje sprawdzające kolizję z różnymi obiektami i inne ciekawe rzeczy ale o tym w następnym poście :) Myślę, że w ciągu 2 tyg powstanie "wczesna" wersja beta
P.S. Jeżeli znacie strony z bitmapami o tematyce kosmicznej to dajcie link, bardzo mi pomożecie :)
Brak komentarzy:
Prześlij komentarz