Dziedziczenie - źle zaprojektowana aplikacja

0

Od jakiegoś czasu próbuje pojąć obiektowość. Postanowiłem zrobić minigierke na której użyje w praktyce wszystkiego tego co się do tej pory nauczyłem.
Gra miała troche przypominać tomagachi tyle że kierujemy żulem.

Zrobiłem klase bzową żul i 3 klasy dziedziczące
-jajko
-junior
-senior

Chciałem aby postać rozwijała się w trakcie gry... po jakimś czasie się wykluła i z jajka zrobił się junior a potem senior.
No i właśnie mam z tym problem.. Na samym początku myślałem że zrobie po prostu coś w tym stylu


c_zul zul = new c_jajko();
//
//potem po tym jak sie jajko wykluje
zul = c_junior;
// i na następnym stadium ewolucji
zul = c_senior;

Chciałem ciągle korzystać z jednego obiektu "zul" ale niestety nie wiedziałem (ale laik ze mnie xD ) że w ten sposób nie będe miał dostępu do metod z klas dziedziczących. Np gdy zul jest juniorem chciałem aby dodatkowo mógł okradnąć babcie.

Nie mam teraz zielonego pojęcia jak program dalej pociągnąć..

link do całego kodu
http://chomikuj.pl/Mine-craft/zulek.rar

0

Jaka jest zawartość tych klas?Bo sam typ żula to najprościej załatwisz enumem

enum TypZula
{
    jajko=0,
    junior,
    senior
}

Klasa Zul wyglądałaby wtedy tak

class Zul
{
    TypZula typ=jajko;

    public Zul()
    {}
};
0

klasa wygląda tak

 
abstract class c_zul //klasa bazowa zula
    {
        public string imie;
        public int wiek; // w dniach
        public int kasa;

        public int energia; //spanie itp. max 10 000
        public int kac;
        public int glod_alkocholowy; // max 10 000
        public int faza; //jak bardzo jest pijany
        public int zadowolenie; // max 10 000

        //=============================================== metody ===================================================

        
        public bool spij()                       // zulek spi. poprostu
        {


            return true;
        }
        public bool kup_cos_na_kaca()           // kupuje 2kc na kaca
        {


            return true;
        }
        public int licz_zadowolenie()
        {
            return (energia + faza) / 2 - (glod_alkocholowy + kac);
        }        //liczy zadowolenie wedlog wzoru

        public void czas_leci()                  // po jakims czasie wszystkie statystyki zula ida w dół. spadają. 
        {
            energia -= 10;
            if (energia < 0) energia = 0;       // dla bezpieczenstwa..
            if (energia > 10000) energia = 10000; // to tez

            kac -= 10;
            if (kac < 0) kac = 0;
            if (kac > 10000) kac = 10000;

            faza -= 10;
            if (faza < 0) faza = 0;
            if (faza > 10000) faza = 10000;

            glod_alkocholowy += 10;
            if (kac < 0) kac = 0;
            if (kac > 10000) kac = 10000;

            zadowolenie = licz_zadowolenie();

        }

        // konstruktor
        public c_zul()
        {
            this.imie = plik.imie();
            this.wiek = plik.wiek();
            this.kasa = plik.kasa();
            this.energia = plik.energia();
            this.kac = plik.kac();
            this.glod_alkocholowy = plik.glod_alkocholowy();
            this.faza = plik.faza();
            this.zadowolenie = licz_zadowolenie();

        }
    }

    class c_jajko : c_zul
    {
        public void wysiaduj()                  //wysiaduje jajko i podnosi wszystkie statystyki o jakis tam stopien
        {
            this.energia += 2000;
            this.kac = 0;
            this.glod_alkocholowy = 0;
            this.faza = 10000;
            this.zadowolenie = licz_zadowolenie();
        }
        public bool sprobuj_sie_wykluc()        //probujemy sie wykluc. jesli jajo moze sie wykluc zwraca true. jesli nie false
        {
            if (licz_zadowolenie() > 6000) return true;
            else return false;
        }


        //konstruktor
        public c_jajko()
            : base()
        {

        }
    }
    class c_junior : c_zul
    {
        public bool okradnij_babcie()       //nasz juniorek okrada babcie. Jesli mu sie to uda to dostanie troche kasy jesli nie to wpada do paki i obnizaja mu sie statystyki. true - udalo mu sie okrasc babcie false - nie udało
        {
            Random gen = new Random();
            int x = gen.Next(1, 5);
            if (x != 3) return true;
            else
            {
                kasa = 0;
                energia = 1000;
                kac = 0;
                faza = 0;
                glod_alkocholowy = 9000;
                zadowolenie = licz_zadowolenie();

                return false;
            }    
        }


         //konstruktor
        public c_junior()
            : base()
        {

        }
    }
    class c_senior : c_zul
    {
        int skill_sepienie;
        int skill_taniec;

        public bool sep_na_wino()           //true- wysepil na wino       false- nie wysepil na wino
        {
            Random gen = new Random();      //losowanie. czy mu sie uda wysępic czy nie.
            int x = gen.Next(1, 5);
            if (x != 3)
            {
                energia -= 1000;
                kasa += skill_sepienie;
                zadowolenie = licz_zadowolenie();
                return true;
            }
            else
            {
                kasa = 0;
                energia = 100;
                zadowolenie = licz_zadowolenie();
                return false;
            } 


        }
        public bool tancz_na_ulicy()        //true - zatanczyl i dostal flote false- zostal pobity
        {
            Random gen = new Random();      //losowanie. czy mu sie uda wysępic czy nie.
            int x = gen.Next(1, 10);
            if (x != 5)
            {
                energia -= 3000;
                kasa += skill_taniec;
                if (x == 1) skill_taniec += 1;//podnosimy co jakis czas mu skilla
                zadowolenie = licz_zadowolenie();
                return true;
            }
            else
            {
                energia = 100;
                kasa = 0;
                zadowolenie = licz_zadowolenie();
                return false;
            }
        }

          //konstruktor
        public c_senior()
            : base()
        {
            skill_sepienie = plik.skill_sepienia();
            skill_taniec = plik.skill_tanczenia();
        }
    }
1
  1. Wywal te c_ sprzed klas i pisz je z dużej litery.
  2. Właściwości klas też z dużych liter. Dodaj także gettery i settery;
0

Twoja klasa abstrakcyjna nie ma ani jednego składnika abstrakcyjnego...

1 użytkowników online, w tym zalogowanych: 0, gości: 1