• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wiele postaci, jeden wybor. Czyli lepsze rozwiazanie i zycie zmiennej

0 głosów
737 wizyt
pytanie zadane 9 listopada 2017 w C i C++ przez DragonCoder Nałogowiec (36,500 p.)
edycja 9 listopada 2017 przez DragonCoder

Witam,

Zastanawiam sie jak moge rozwiazac problem wybrania 1 postaci z 5 mozliwych.

1) Uzycie bazy danych, pobieram wybor gracza i laduje statystyki, eq itd z bazy danych, i pozwalam mu grac

2) Bez uzycia bazy danych, wybieramy postac i gramy nia, tylko, ze tu pojawia sie problem. Jezeli gracz wybierze ta postac, to musze wybrac ten scenariusz gry, to znaczy. Gdy gracz wscisnie w to zmieniam dla danej klasy wapolrzedne, ale zostaja mi jeszcze 4 ify.

Pytanie:

Jak mozna to rozwiazac, zeby ominac te 4 ify? Czyli wybieram postac i gram nia, ale nie musze pisac ifow dla pozostalych 4 postaci. 

Pseudokod:

std::cin>>komenda;
 If (komenda=="w"||komenda=="W"){
If(postac==1){
//I tu zwiekszamy x w klasie postaci 1
}else if (postac==2){
//I tu to samo ale w klasie postaci 2
}

I tu pojawia inny problem, a mianowicie jak uniknac zmiennych globalnych, przy rozbijaniu projektu na pliki, bo przeciez musze przchowywac wybor postaci przez zycie "calego" projektu?

Pozdrawiam i zycze milego wieczoru DC

EDIT::

Jezeli, ktos czegos nie zrozumial, to prosze napisac sprobuje opisac ten problem inaczej

2 odpowiedzi

+1 głos
odpowiedź 9 listopada 2017 przez Jakub Nowacki Początkujący (470 p.)
A nie możesz zrobić jednej klasy dla postaci i zależnie od wyboru załadować odpowiednie wartości opisujące postać i cały czas z nich korzystać?
komentarz 9 listopada 2017 przez DragonCoder Nałogowiec (36,500 p.)
Czyli 1 klasa postaci i w zaleznosci od tego jaka user wybierze, zaladowac odpowoedni konstruktor? Albo po prostu objekt tej klasy?

Postac.rycerz ();
1
komentarz 9 listopada 2017 przez Jakub Nowacki Początkujący (470 p.)

Obejrzyj sobie ten odcinek na temat polimorfizmu. Wiele tutaj zostało wyjaśnione. Powinno co nieco pomóc ;)

https://www.youtube.com/watch?v=9hGPe6BnTY4

+1 głos
odpowiedź 9 listopada 2017 przez Aisekai Nałogowiec (42,190 p.)
Śmierdzi mi tu polimorfizmem na kilometr. Wtedy dla każdej klasy, byś wywoływał inne funkcje.

EDIT Mówiąc inne funkcje, mam na myśli funkcje o tej samej nazwie lecz o innej implementacji
komentarz 9 listopada 2017 przez DragonCoder Nałogowiec (36,500 p.)
No bo tak to wyglada :D mam 5 klas, i duzo wspolnych funkcji, ktore roznia sie tylko klasami. Chodzenie jest takie samo, a funkcja rozni sie tym, ze na koncu ma nazwe postaci niczym wiecej. Wiadomo sa skille itd, ale to bedzoe pozniej
komentarz 9 listopada 2017 przez Aisekai Nałogowiec (42,190 p.)
To zrób jedną klasę (bodajże wirtualna, w javie jest abstrakcyjna), po której dziedziczy te pięć innych klas. I twórz zmienne tak:

NazwaKlasyWirtualnej nazwa obiektu = new NazwaKlasyJakiegosTypuBohatera();(przynajmniej w javie tak się tworzy)

Najpierw tylko deklarujesz obiekt, a potem w zależności od tego jaką klasę ktoś wybierze, tworzysz obiekt tej klasy. Będziesz mógł tak wywoływać metody które masz zadeklarowane w klasie wirtualnej z wybraną implementacją.
komentarz 9 listopada 2017 przez DragonCoder Nałogowiec (36,500 p.)
Czyli zwykle dziedziczenie z klasy bazowej do innych, przy czym w klasach tworze dodatkowe funkcje, ktorych nie ma klasa glowna i sa rozne dla kazdej innej
komentarz 9 listopada 2017 przez Aisekai Nałogowiec (42,190 p.)
Tutaj może być problem, bo tworząc obiekty w taki sposób jak w/w nie jest zbyt łatwy wywoływanie metod klas które nie są zadeklatowane w klasie nadrzednej. Tzn jakbyś w klasie np. Paladyn dodał metodę uleczSie() to nie mógłbyś wywołać jej w sposób nazwaObiektu.uleczSie();. To nie jest takie zwykłe dziedziczenie.

W czymś takim bardziej chodzi o to, żeby klasy różniły się głównie implementacją metod.
komentarz 9 listopada 2017 przez DragonCoder Nałogowiec (36,500 p.)
I wlasnie tp jest problem poliformizmu. Zastanawialem sie jak robia to tworcy gier mmorpg, bo zasada dzialanoa jest zblizona do tej, ktora chce uzyskac
komentarz 9 listopada 2017 przez Aisekai Nałogowiec (42,190 p.)
W jakim sensie? Co jak robią twórcy gier mmorpg? Każda postać praktycznie jest taka sama, tylko różni się mechaniką, wyglądem skilli itd.
komentarz 9 listopada 2017 przez DragonCoder Nałogowiec (36,500 p.)
No wlasnie, ten wybor postaci o to mi tylko chodzi. Bo cala reszta jest tala sama
komentarz 9 listopada 2017 przez Aisekai Nałogowiec (42,190 p.)
No to mówię, że wszystkie klasy w grze dziedzicza pewnie po jakiejś klasie Hero, która dostarcza (deklaruje) wszystkie metody, które przeslaniaja pozostałe klasy.

Edit: a to jakie zostaną wywołane zależy tylko od tego jaki obiekt (rozszerzajacy klasę wirtualna) zostanie przypisany do klasy i jaką ma implementacje
komentarz 9 listopada 2017 przez Aisekai Nałogowiec (42,190 p.)
Np.

Hero hero;

if(jakisWarunek) hero = new Assasin();

else hero = new Priest();

hero.attack();

I tutaj w zależności od tego czy warunek zostanie spełniony czy nie będzie wywołana odpowiednia implementacja metody attack. Tutaj w zależności od tego jaki, gdzie, itd ten warunek stworzysz.
komentarz 9 listopada 2017 przez DragonCoder Nałogowiec (36,500 p.)
No tak to mam, myslalem ze sa inne,.lepsze metody. No dobra dziekuje berdzo :)

Podobne pytania

0 głosów
1 odpowiedź 255 wizyt
pytanie zadane 11 listopada 2018 w C i C++ przez XezolPL Obywatel (1,530 p.)
0 głosów
2 odpowiedzi 211 wizyt
+1 głos
0 odpowiedzi 288 wizyt

93,503 zapytań

142,441 odpowiedzi

322,789 komentarzy

62,941 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...