Untitled
raw download clone
TEXT
views 29
,
size 4204 b
#include <iostream>
using namespace std;

class Statek {
 public:
  int gruboscKadluba;
  Statek(const string &nazwa, int liczbaArmat, double wspolczynnikSkutecznosciUzbrojenia, int gruboscKadluba)
      : nazwa(nazwa), liczbaArmat(liczbaArmat), wspolSkutecznosciUzbrojenia(wspolczynnikSkutecznosciUzbrojenia),
        gruboscKadluba(gruboscKadluba) {}

  Statek() : nazwa("Domyślna Nazwa Statku"), liczbaArmat(10), wspolSkutecznosciUzbrojenia(0.1), gruboscKadluba(20) {}

  string getNazwa() const {
    return nazwa;
  }
  int getLiczbaArmat() const {
    return liczbaArmat;
  }
  double getWspolSkutUzbrojenia() const {
    return wspolSkutecznosciUzbrojenia;
  }
  int getGruboscKadluba() const {
    return gruboscKadluba;
  }

  virtual bool obrona(double silaUderzenia) {}

  virtual void wyswietl() const {}

 private:
  string nazwa;
  int liczbaArmat;
  double wspolSkutecznosciUzbrojenia;
};

class StatekKrolewski: public Statek {

 public:

  StatekKrolewski() : liczbaMarynarzy(50), maxLiczbaMarynarzy(200) {}
  StatekKrolewski(const string &nazwa,
                  int liczbaArmat,
                  double wspolczynnikSkutecznosciUzbrojenia,
                  int gruboscKadluba,
                  int liczbaMarynarzy,
                  int maxLiczbaMarynarzy)
      : Statek(nazwa, liczbaArmat, wspolczynnikSkutecznosciUzbrojenia, gruboscKadluba), liczbaMarynarzy(liczbaMarynarzy),
        maxLiczbaMarynarzy(maxLiczbaMarynarzy) {}

  void naprawKadlub(int grubosc) {
    gruboscKadluba += grubosc;
  }

  bool obrona(double silaUderzenia) override {
    double silaObronyStatku = getWspolSkutUzbrojenia() * getLiczbaArmat() * liczbaMarynarzy / maxLiczbaMarynarzy + getGruboscKadluba();
    return silaObronyStatku > silaUderzenia;
  }

  void wyswietl() const override {
    cout << "\nNazwa: " << Statek::getNazwa()
         << "\nLiczba Armat: " << Statek::getLiczbaArmat()
         << "\nWspolczynnik Skutecznosci Uzbrojenia: " << Statek::getWspolSkutUzbrojenia()
         << "\nGrubosc Kadluba: " << Statek::getGruboscKadluba()
         << "\nLiczba Marynarzy: " << liczbaMarynarzy
         << "\nMaksymalna Liczba Marynarzy: " << maxLiczbaMarynarzy
         << endl;
  }

 private:
  int liczbaMarynarzy;
  int maxLiczbaMarynarzy;
};

class StatekPiratow: public Statek {
 public:
  StatekPiratow() : liczbaPiratow(25), maxLiczbaPiratow(150) {}
  StatekPiratow(const string &nazwa,
                int liczbaArmat,
                double wspolczynnikSkutecznosciUzbrojenia,
                int gruboscKadluba,
                int liczbaPiratow,
                int maxLiczbaPiratow)
      : Statek(nazwa, liczbaArmat, wspolczynnikSkutecznosciUzbrojenia, gruboscKadluba), liczbaPiratow(liczbaPiratow),
        maxLiczbaPiratow(maxLiczbaPiratow) {}

  void naprawKadlub(int grubosc) {
    gruboscKadluba += grubosc;
  }

  bool obrona(double silaUderzenia) override {
    double silaObronyStatku = getWspolSkutUzbrojenia() * getLiczbaArmat() * liczbaPiratow / maxLiczbaPiratow + getGruboscKadluba();
    return silaObronyStatku > silaUderzenia;
  }

  void wyswietl() const override {
    cout << "\nNazwa: " << Statek::getNazwa()
         << "\nLiczba Armat: " << Statek::getLiczbaArmat()
         << "\nWspolczynnik Skutecznosci Uzbrojenia: " << Statek::getWspolSkutUzbrojenia()
         << "\nGrubosc Kadluba: " << Statek::getGruboscKadluba()
         << "\nLiczba Piratow: " << liczbaPiratow
         << "\nMaksymalna Liczba Piratow: " << maxLiczbaPiratow
         << endl;
  }
 private:
  int liczbaPiratow;
  int maxLiczbaPiratow;
};

int main() {

  StatekPiratow statekPiratow = StatekPiratow("Statek Piratów", 16, 0.5, 80, 40, 120);
  StatekKrolewski *wskStatekKrolewski = new StatekKrolewski("Statek Królewski", 24, 0.6, 90, 50, 150);

  Statek &refStatekPiratow = statekPiratow;

  refStatekPiratow.wyswietl();
  wskStatekKrolewski->wyswietl();

  cout << "\nOpis: \n0 (false) - nie obroni sie \n1 (true) - obroni sie.\n" << endl;
  cout << refStatekPiratow.obrona(90.0) << endl;
  cout << wskStatekKrolewski->obrona(90.0) << endl;
  return 0;
}
close fullscreen
Login or Register to edit or fork this paste. It's free.