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:
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".