kamilall234 Temat założony przez niniejszego użytkownika |
[C++] Gra typu Monopoly, problem ze stworzeniem planszy » 2014-05-22 21:36:43 Witam. Od kilku dni piszę grę, narazie w konsoli potem musze przełożyć ją na grafike 2D razem z kolegą, żeby oddać na uczelni. Mam teraz pytanie odnośnie tworzenia planszy, poniżej wrzucam zdjęcie i relacje klas. Są one przykładowe ponieważ w trakcie pisania i tak bardzo dużo funkcji mi dochodzi jeszcze. Prosze tylko o podpowiedź, jak tworzyć plansze ? Założyłem że w clasie Plansza będę miał vector < Pole > pola i w nim będę tworzył plansze, a potem będę się przesuwał graczami po tym vectorze. Otóż pytanie gdzie mam tworzyć pola typu miasto, załóżmy. Raczej nie robić tego w konstruktorze prawda ? Przypomne jeszcze, że będę odczytywał pola z pliku tekstowego. Zatem jak najlepiej to zrobić? W klasie plansza mam stworzyć funkcję, która będzie wywoływać konstruktory Miasto i odczytywać po kolei z pliku ? Albo zrobić w clasie Plansza, dodatkowo wektory do Miast i innych kart do kupienia, wczytać je razem z danymi ich z pliku, a potem polosować z innymi kartami w wektorze Pola ? tylko czy nie strace dostepu do niektórych atrybutów ? Bo klasa pole to najwyższa klasa :? Prosze o pomysł jak tworzyć Plansze, za pomocą obiektu plansza. |
|
michal11 |
» 2014-05-22 22:16:48 1. Jeżeli chcesz docelowo stworzyć grę 2D to rób to od razu, takie zmienianie z konsoli na 2D nie będzie później przyjemne. 2. Z tego co zrozumiałem to chcesz stworzyć planszę z różnymi polami. Masz klasę Pole, z której dziedziczą różne typy pól. I klasę Plansza, która jest złożona z Pól. W takim przypadku wystarczy jako składową Planszy dać vector < * Pole > pola . Następnie w konstruktorze Planszy tworzysz sobie dynamicznie różne pola np. { pola.push_back( new Misto( arugmentyKonstruktoraMisto ) ); pola.push_back( new START( arugmentyKonstruktoraSTART ) ); pola.push_back( new KartaSzansy( arugmentyKonstruktoraKartaSzansy ) ); }
oczywiście, teraz wystarczy tylko dodać mechanizm odczytywania z pliku i odpowiedniego dopasowania konstruktorów oraz w destruktorze dodać w pętli delete pola[ i ] żeby nie było wycieków pamięci. |
|
kamilall234 Temat założony przez niniejszego użytkownika |
» 2014-05-22 22:44:32 Dzięki wielkie ! Tego właśnie potrzebowalem ! Właśnie już walcze z odpowiednim przypisywaniem!
Edit: michal11 jaką biblioteke do 2D polecasz ? Qt czy SFML ? W tej grze nie ma prawie ruchu, dodam jeszcze że muszę dorobić połączenie internetowe na samym końcu.
Nie znam żadnej biblioteki do 2D dlatego chce najpierw w konsoli zobaczyć jak ma ta gra działać, potem natomiast przerobić to na 2D. |
|
michal11 |
» 2014-05-23 01:11:52 Zdecydowanie SFMl, szczególnie, że jest tam moduł sieciowy. |
|
kamilall234 Temat założony przez niniejszego użytkownika |
» 2014-05-23 01:43:41 Dobra, teraz kolejne pytanie. Do tego co mi podałeś z tymi vectorami. Wszystko działa itd. Ale trwie nad jedną sprawą już dobrą godzine. Robie tak jak napisałeś: vector < Pole *> pola odczytuje potem z pliku odpowiednią sekwencję, wszystko gra itd, tylko problem jest że u mnie o mieście wyświetla wszystko funkcja z klasy Miasto, jak teraz odwołać się do funkcji void wyswietl_info() skoro nasze pole[ i ] jest vectorem Pole* ? Przypomne że vecotr Pole* tworzymy w klasie Plansza, a Plansza komunikuje się z Pole, którego Miasto jest klasa pochodną 2 rzędu. Próbue już sekwencji : pola[ i ]->Miasto::wyswietl(); Ale to daje Miasto is not base of Pole Poniżej zamieszczam uproszczony kod : class Pole { private: string nazwa; string kolor; int nr; int rodzaj_pola; public: Pole( string, string, int, int ); virtual void kup(); virtual ~Pole() { }; };
class Pole_Do_Kupienia : public Pole { private: int cena; int hipoteka; int przynaleznosc; public: Pole_Do_Kupienia( int, int, int, string, string, int, int ); virtual void kup(); virtual void sprzedaj(); virtual void zastaw(); virtual int kara_za_postoj(); ~Pole_Do_Kupienia() { }; };
class Miasto : public Pole_Do_Kupienia { private: string panstwo; int cena_za_dom; int cena_za_hotel; int numer_miata; int ilosc_domow; public: Miasto( string, int, int, int, int, int, int, string, string, int, int ); void postaw_dom( int ) { }; void zburz_dom( int ) { }; void wyswietl(); void sprzedaj() { }; void zastaw() { }; int kara_za_postoj() { }; ~Miasto() { }; };
class Plansza { private: int ilosc_pol = 40; int ilosc_panstw = 8; int ilosc_dworcow = 4; int ilosc_szans = 6; int wod_i_el = 2; int ilosc_wiezien = 2; int ilosc_parkingow = 2; vector < Pole *> pola; public: Plansza(); ~Plansza(); void wyswietl(); };
|
|
Moorfox |
» 2014-05-23 02:07:17 Rozumiem ze chcesz wywolac metode klasy pochodnej poprzez obiekt klasy bazowej ? Jesli tak to sie nie da, da sie jedynie na odwrot tzn obiekt klasy pochodnej wywoluje metode klasy bazowej miedzy innymi dlatego nazywa sie to dziedziczenie Jest ojciec co umie rzecz a i Jest dziecko ktore odziedziczylo umiejetnosc a i dodatkowo nauczylo sie b Ale nie slyszalem o Ojcu ktory dziedziczy po dziecku... Czy ta gra to nie troche za duze wyzwanie dla ciebie ? |
|
kamilall234 Temat założony przez niniejszego użytkownika |
» 2014-05-23 02:11:52 No ok. Ja to wiem. Tylko jak teraz tym wektorem vector, mam wyświetlić te dane o Mieście ? Ta gra jest pisana na zaliczenie, nic nie poradze musze nad nią siedzieć Edit: Chyba wiem jak to rozwiążę. Mogę zrobić dwa vectory ? vector < Miasto *> miasteczka; vector < Karta Szansy *> szanse; vector < Inne_kart *> inne_karty;
oraz stworzyć pomieszany : vector < Pole *> pola który będzie mieszał podstawowe dane z tamtych vectorów (z bazowej clasy Pole) tzn nazwe, panstwo, kolor i tworzył z nich plansze ? |
|
Moorfox |
» 2014-05-23 02:46:29 Sorry ze tak dlugo male problemy;/ Ale kapuje juz o co chodzi ci dodajesz dynamiczne utworzone obiekty klas pochodnych virtual void wyswietl() = 0;
Dodaj taka funkcje publiczna do klasy Pole |
|
« 1 » 2 |