Quantcast
Viewing all articles
Browse latest Browse all 21942

Jak działać na obiektach wielu klas naraz

Witam. Zastanawia mnie, jaki jest najlepszy/prawidłowy sposób na używanie obiektów, gdy operuję na wielu klasach. Mam na myśli, gdy posiadam wiele klas i w wielu przypadkach zależą od siebie.

Mam kilka klas, poukładanych jak na rysunku: Image may be NSFW.
Clik here to view.

W funkcji na samym końcu chciałbym narysować informacje o ilości surowca. Planeta posiada surowce, a Imperium posiada Planety.

Mógłbym np. do funkcji draw przekazać obiekt GameEngine utworzony w main i obiekt Empire, który jest w klasie PlayState. Jednak wtedy funkcja wyglądała by tak: (Używam Allegro 5)

al_draw_text(game->get_font(), al_map_rgb(255,255,255, x, y, 0, Empire->Planets[0].Resource[0].get_resource_name()); 

Do tego problemy z modyfikatorami dostępu. Wydaje mi się to przekombinowaniem.

Mógłbym też w klasie PlayState trzymać wskaźniki na aktualny surowiec i aktualną planetę.

Jeszcze nie próbowałem, ale może dobrym pomysłem byłoby, gdyby klasa Resource była zagnieżdżoną klasą Planet, a ta Empire...

Czyli w skrócie: Szukam prawidłowego sposobu, żeby nie wyszedł Spaghetti Code. Gdzie tworzyć obiekty, jak je przekazywać? Z góry dziękuję za pomoc.

 

Dodatek, gdyby trzeba było wyjaśnić rysunek:

Pierwsza klasa wirtualna GameState, to odpowiednio Menu Początkowe Gry i "Gra właściwa". Gdy przechodzimy do PlayState, to otwiera się window1 z widokiem planety. Jak klikniemy produkcja, to wyświetla się window2. Różnica jest taka, że czas płynie niezależnie od window1 czy window2, a MenuState i PlayState to jakby dwie różne "gry".


Viewing all articles
Browse latest Browse all 21942