• 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

Object Storage Arubacloud
0 głosów
298 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ź 193 wizyt
pytanie zadane 11 listopada 2018 w C i C++ przez XezolPL Obywatel (1,530 p.)
0 głosów
2 odpowiedzi 139 wizyt
+1 głos
0 odpowiedzi 222 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...