Cześć,
Mam problem ze zrozumieniem idei programowania obiektowego, który jak dla mnie ładnie wygląda tylko w teorii.
Załóżmy że mamy grę, w której:
- obiekt [silnik_turbinowy] to obiekt klasy [silnik], który jest częścią:
- obiektu [niszczyciel] który jest obiektem klasy [okręt], który jest częścią:
- obiektu [grupa_uderzeniowa_6], który jest obiektem klasy [flota], który jest reprezentowany przez ikonę statku na ekranie.
Załóżmy że chcę określić prędkość, która będzie limitowana przez najwolniejszy silnik we flocie. Muszę znać więc: nazwę obiektu [flota], nazwy obiektów stanowiących jej część (np. [niszczyciel_Sommers]) i w końcu jaki silnik został użyty dla niszczyciela [silnik turbinowy] aby odczytać jego prędkość maksymalną. Jak mam to na papierze, to wiem skąd i jak pobierać dane.
Ale skąd ten bidny C++ ma wiedzieć że klikając w miejscu X,Y na pulpicie chcę znać nazwę tego obiektu, obiektów składowych i w końcu nazwę silnika aby pobrać te konkretnie akurat dane?
Inaczej mówiąc: jak zrobić, aby klikając w ikonę statku dokopać się do danych składowych tego obiektu, nie znając przecież wcześniej jego nazwy (bo przecież program nie wie, o dane jakiego obiektu będę pytał).
Najbardziej prymitywne dla mnie rozwiązanie to przechowywać listę utworzonych obiektów w tablicy zewnętrznej name[] = {flota_obronna, zespol_1, zespol_3, grupa uderzeniowa_6, ...}
sprawdzić lokalizacje w oparciu o mys: czy X_mouse = x.name[4](),
//ustalam nazwę obiektu
for(int q=1;...
if (X_mouse = x.name[q]) // odczytuje lokalizacje x przegladajac cala tablice obiektow zgromadzaną w tablicy name[];
//ustalam ilość okrętów we flocie // moze byc rowna, 1 okret to tez flota
ile = ships_in_fleet.fleet(); <<zmienna fleet jako nazwa wywołanego obiektu?
//dla kazdego z "ile" sprawdzam jaki typ okretu
for (int k=1...
typ_okretu = type_ile.fleet(); << łączenie stringów jako type_ + IntToStr(ile) daje kolejną zmianną: nazwę typu okrętu
//dla kazdej klasy sprawdzam jaki silnik
typ = silnik.typ_okretu();
//finalnie sprawdzam predkosc silnika
predkosc = speed.typ();
Za każdym razem muszę użyć zmiennej do odczytania nazwy obiektu - bez sensu...
Ale może właśnie tak ma być i tak to ma działać? Chyba że akurat w powyższym przypadku programowanie obiektowe nie ma zastosowania...