Programowanie obiektowe - różne możliwości rozplanowania

0

Załóżmy, że jest do napisania gra platformowa, gdzie jest sobie ludek którym gramy, ma kilka broni ze sobą i różnych przeciwników np. kosmici i wampiry. Można zbierać na planszy po drodze bonusy np. dodające punkty lub kolejne życie. Dodatkowo na planszy są aktywne przeszkadzajki jak kolce które wychodzą z ziemi i chowają się, i tak bez przerwy.

Co prawda mam to wszystko na myśli w kontekście Javascript, ale to bez większego znaczenia i pomijam oficjalny brak klas abstrakcyjnych. Klasycznie stworzyłoby się prawdopodobnie klasy takie jak: Broń, klasa abstrakcyjna Przeciwnicy i "przydzielone" jej klasy Kosmici oraz Wampiry. Stworzyłoby się także klasę abstrakcyjną Bonusy, a przydzielonymi jej klasami byłyby typy bonusów np. klasa "(Bonus) Więcej Życia", podobnie podchodzimy do przeszkadzajek, które byłby wstępnie klasą abstrakcyjną. Ludek nie miałby klasy, pozostałby obiektem bezklasowym, ponieważ tworzymy go tylko raz, wydaje się, że bez wyjątku.

Jak Wy rozplanowalibyście podział na klasy i obiekty? Może zrobilibyście to inaczej? Czy może lepiej obiekt Ludek czy tam Gracz tworzyć z klasy, czy może miałby to być "suchy" obiekt, zakładając pewność, że nie wdrożymy np. Multiplayera? Czy właściwości opisujące wygląd można traktować jak obiekt danego obiektu np. kosmita.wyglad.kolor: zielony? "wygląd" jako tako nie byłoby przecież obiektem, bo jak wygląd może być obiektem? Byłby to raczej zbiornik na właściwości i czy odpowiednie jest tu zastosowanie obiektu? Wiem, że tak się robi.

Chciałbym poznać Wasze zdanie i wizje odnośnie takiej mini-gierki. Być może lepiej się rozeznam i ugruntuje swoją wiedzę.

0

Możesz wykorzystać Entity component system. Szczególnie w przypadku gier skomplikowane hierarchie klas się nie sprawdzają, bo na 99% narobi się ogromnego bałaganu w skomplikowanych drzewach. Przykładowo: zarówno postać, jak i przeciwnicy/neutrealne stworki potrafią się poruszać, mają jakieś punkty życia itd. Ważną rzeczą jest, że te komponenty to tylko dane.

0

Podałeś przykład powtarzania się atrybutów. Ponieważ jestem w praktyce początkującym, średnio orientuje się, czy dobrze myślę: można stworzyć, być może abstrakcyjną - klasę Ruch, z której dziedziczyłyby pozostałe klasy które mają zaimplementowany ruch?

1

Nie, to ma być kompozycja, a nie dziedziczenie. To znaczy, że np. potworek zawiera pozycję na mapie, albo zawiera punkty zdrowia, a nie jest pozycją albo punktami zdrowia (jaki by to miało sens? ;p).

0

Hehe, no tak :D Niedopatrzenie polega na tym, że chodzi o utworzenie obiektu z klasy życie (a nie dziedziczenie po niej) w klasach kosmici, ludek czy wampiry? Coś w tym stylu: http://pl.wikipedia.org/wiki/Agregacja_(programowanie_obiektowe) ? Coś czytałem już o tym, niezbyt jednak utkwiło mi w pamięci.

2

Kurcze, w pierwszym poście miał być link do artykułów, w których masz chyba dobrze to wytłumaczone. Łap: http://www.reddit.com/r/gamedev/comments/1f83c5/3_articles_about_component_entity_systems/

0

Z tego co rozumiem, kompozycja oparta na komponentach :) Najpierw napiszę klasycznie obiektowo, potem dopiero będę się bawić inaczej już w kolejnym projekcie. Czuję, że muszę utrwalić jedno, potem dopiero brać się za drugie. Poza tym mało mam praktyki, za to sporo czytam teorii. Dzięki za przydatny materiał!

1 użytkowników online, w tym zalogowanych: 0, gości: 1