Czas przebudować klasę wroga, pisałem o niej na początku bloga. Mam zamiar stworzyć bazową klasę wroga, z której będą dziedziczyły inne klasy. Zatem będzie można zmienić kilka wartości w klasach pochodnych aby pochodne "obiekty" różniły się poziomem wystrzymałości, strzelaniem, itp.
class Cwrog_easy
{
private:
int zycia;
public:
int pozwro_x, pozwro_y;
int pozpocwro_x, pozpocwro_y;
int czest_poc;
void poruszanie_wroga();
void strzelanie_wroga();
void odejm_zycia(int);
Cwrog_easy::Cwrog_easy()
{
pozwro_x=rand()%550;
pozwro_y=0;
czest_poc=0;
zycia=3;
}
};
void Cwrog_easy::poruszanie_wroga()
{
pozwro_y++;
if( (pozwro_y>430) || (pozwro_y==0) || (zycia<=0) )
{
zycia=3;
pozwro_x=rand()%740;
pozwro_y=0;
}
}
void Cwrog_easy::strzelanie_wroga()
{
if ( (pozpocwro_y>460) || (pozpocwro_y==0) )
{
if (pozpocwro_y>460)
{
pozpocwro_y=800;
}
if (czest_poc>=200)
{
pozpocwro_x=pozwro_x+7;
pozpocwro_y=pozwro_y+25;
}
}
if(czest_poc==200)
{
czest_poc=0;
}
pozpocwro_y=pozpocwro_y+3;
czest_poc++;
}
void Cwrog_easy::odejm_zycia(int minus)
{
zycia=zycia-minus;
}
Dodałem:
-poziom żyć wroga
-poprawione strzelanie wroga tzn, jeżeli pocisk wystrzelony przez wroga trafi szybko w cel to następny tak szybko nie wyleci służy temu instrukcja i zmienne
if (czest_poc>=200).
- metoda odejm_zycia(int minus) będzie wywoływana w main() w momencie trafienia wroga pociskiem wystrzelonym z robocika. Wartość przesyłana do tej funkcji będzie zależała od rodzaju broni, którą trafiliśmy wroga.
np. dla karabinu maszynowego pocisk będzie tracił wrogowi 1 życie
enemy.odejm_zycia(1);
Narazie to jest kawałek kodu, który testuję, zmieniam i NAPEWNO jeszcze zmienię jak większość kodu, który trzeba przebudować. Zamieszczam go tutaj bo chcę się podzielić swoim pomysłem :P
Widzę, że gierka się rozwija = Super ! :D Cieszę się, że masz spore postępy w produkcji, bo u mnie na razie wszystko ustało, tzn kończę gui... ale nie o tym :)
OdpowiedzUsuńWrzucę tutaj parę swoich rad, mogą być nie do końca trafne, ale warte przemyślenia wg mnie.
O większości pisałem już w ostatnim komentarzu (pod postem podanym w treści wpisu).
START :P
1.
---------------------------------------------------
Po pierwsze if... ;) Co prawda jeden i już mówię, że miejscem do poprawienia powinno być :
if ( (pozpocwro_y>460) || (pozpocwro_y==0) )
{
if (pozpocwro_y>460)
{
pozpocwro_y=800;
}
Na początku sprawdzasz czy pozpocwro_y>460 LUB pozpocwro_y ==0, jeśli robisz LUB, nie ma sensu pod głównym ifem jeszcze raz sprawdzać (pozpocwro_y>460)
--------------------------------------------------
2.
--------------------------------------------------
Zachęcałbym do stworzenia klasy bazowej baseWROG, a po niej utworzyć WROG_EASY : baseWROG, czemu ? :>
- Bo niektóre metody w każdym wrogu będą się powtarzać, nieważne czy easy,hard,medium metoda OdejmijZycia(), pozycja_x, pozycja_y, Metoda StrzelanieWroga() którą dzięki słówku virual będziemy mogli modyfikować w klasach późniejszych -- naprawdę warto , poczytaj o tym :)
- Mniejsza ilość kodu to tylko jedna z zalet, drugą wg mnie większą zaletą jest możliwość pisania metody dla wszystkich wrogów. O czym myślę ? (od razu wspomnę, że nie wiem jak u Ciebie to wygląda, ale wydaje mi się , że będzie OK)
Przypuścmy, że mamy funkcję do obliczania kolizji, zapewne jest ona wykonywana tak, że odczytuje położenie pocisku i przelatuje pętlą przez wszystkich wrogów, sprawdza w nich pozycję i robi odpowiednią rzecz. Aby ułatwić sobie pracę i aby nie obchodziło nas czy dany obiekt to : WrogEasy, WrogMedium, WrogHard, możemy funkcję, która jako parametr przyjmie klasę bazową czyli baseWrog i wywoła odpowiednią metodę.
Przykład :
public void KolizjaPociskuZeStatkiem(baseWrog wrog, int silaPocisku)
{
wrog.OdejmiZycia(silaPocisku);
}
kod Main()
...
sprawdzenie kolizji i wyłapanie z którym statkiem ta kolizja następuje i przekazanie statku do powyższej metody
KolizjaPociskuZeStatkiem(MediumStatek1,3);
--------------------------------------------------
3. To dodawanie i odejmowanie wartości, każdy woli jak lubi i możliwe, że dla Ciebie jest tak czytelniej ale ja zdecydowanie wolę zapis :
jakas_liczba += 5;
niz
jakas_liczba = jakas_liczba + 5;
-------------------------------------------------
To tyle w ramach pytań, pisać ;)
No faktycznie za dużo tych ifów :P
OdpowiedzUsuńBędę musiał poczytać o funkcjach wirtualnych i się trochę douczyć... dzięki za radę :)