[ROZWIĄZANY]
Witam. Mam problem. Postanowiłem napisać program, który podsumowywałby całą moją wiedzę z obiektowego C++. Program miał za zadanie być łatwo modyfikowalną areną, gdzie dwa obiekty różnych typów (np. Wilk i Niedźwiedź) walczyłyby ze sobą. Obie klasy dziedziczą z klasy abstrakcyjnej "Postać". Z zapisem nie mam problemu, jednak schody zaczynają się wtedy, gdy jeden obiekt ma zadać obrażenia drugiemu. Każda klasa dysponuje kilkoma argumentami:
hp - zdrowie,
ap - siła ataku,
fp - punkty ucieczki (wpływają na prawdopodobieństwa ucieczki z trudnej walki)
Jak mam zapisać sytuację, gdy obiekt klasy Niedźwiedź zadaje obrażenia obiektowi klasy wilk? Chciałbym, aby atrybuty obu klas pozostały prywatne, a żeby "wymiana ciosów" odbywała się poprzez publiczne metody tychże klas. Z góry dziękuję za pomoc, wklejam kod:
#include <iostream>
#include <math.h>
#include <windows.h>
#include <cstdlib>
#include <time.h>
#include "rng.h"
using namespace std;
class Postac
{
public:
friend int rng(int,int); // Moja własna funkcja do losowania liczb. Nieistotne.
virtual void atakuj()=0;
virtual void uderzony()=0;
virtual void uciekaj()=0;
};
class Niedzwiedz :public Postac
{
string nazwa;
int hp; // 1 - 100: Zdrowie
int ap; // 1 - 100: Sila
int fp; // 1 - 10: Szansa na ucieczke
public:
friend int rng(int,int);
Niedzwiedz(string Niedzwiedz, int health=100, int attack=25, int flee=4)
{
hp=health;
ap=attack;
fp=flee;
}
virtual void atakuj()
{
// ???
}
virtual void uderzony()
{
// ???
}
virtual void uciekaj()
{
if(rng(1,10)<=rng(fp-1,3))
{
system("cls");
cout<<"Obiekt "<<nazwa<<" uciekl pomyslnie!"<<endl;
Sleep(2000);
exit(0);
}
else
{
system("cls");
cout<<"Ucieczka nieudana! (-"<<(10-fp)*5<<" HP)!"<<endl;
hp-=(10-fp)*5;
Sleep(2000);
}
}
};
int main()
{
srand(time(NULL));
// jakiś kod... co dalej?
return 0;
}