Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML 2] System przedmiotów i ekwipunku

Ostatnio zmodyfikowano 2015-10-02 11:05
Autor Wiadomość
Piastlis
» 2015-09-16 01:22:11
Mówimy o dość dużej ilości przedmiotów.Przydałoby się sklecić prosty edytor który połączył by nazwę przedmiotu z jego cechami, lokacjami i grafiką.W przypadku kilku wystarczy zdefiniowanie stałych.
P-137553
Elaine
» 2015-09-16 06:16:37
Nie jestem ekspertem, ale jak bym dostał od ciebie taki kod ew. pomysł z przykładami to bym się bardzo zdenerwował próbując rozszyfrować jak działa ten twój system i co oznacza jakaś konkretna liczba.
Dlatego wymyślono stałe i funkcje.
P-137554
RazzorFlame
» 2015-09-16 12:10:28
Dlatego wymyślono stałe i funkcje.
Wymyślono też klasy. OOP to w tym przypadku najbardziej zalecana metoda. No ale jak kto woli.
P-137558
Elaine
» 2015-09-16 13:16:20
Ale przecież OOP nie wyklucza stosowania funkcji i stałych. W przypadku funkcji nawet wymaga.
P-137559
RazzorFlame
» 2015-09-16 13:40:20
Racja
P-137563
Piastlis
» 2015-09-16 21:44:51
@RazzorFlame czy kiedykowiek współpracowałeś z grafikiem i z projektantem gier?Jak nie to nie masz pojęcia co to jest "system".
P-137579
RazzorFlame
» 2015-09-17 14:54:53
@RazzorFlame czy kiedykowiek współpracowałeś z grafikiem i z projektantem gier?
Niejednokrotnie. Poza tym pokazałeś, że sam nie do końca wiesz co to system.
P-137593
DejaVu
» 2015-09-17 17:27:24
Proszę starać się udzielać odpowiedzi na pytanie postawione w pierwszym poście, a nie krytykować to co zostało napisane przez kogoś w celu udzielenia jakiejś użytecznej informacji.

Co do tematu - sugerowałbym utworzyć klasę np Items:
C/C++
class Items
{
public:
    Items();
    virtual ~Items();
   
    // Zwraca true, jeżeli obiekt został poprawnie obsłużony.
    // Zwraca false, jeżeli obiekt nie posiada obsługi tej metody.
    virtual bool useItem() { return false; }
   
    // Zwraca przez referencję ilość HP.
    // Zwraca false, jeżeli przedmiot nie implementuje obsługi HP.
    // Wartość przekazana poprzez argument nie będzie zmodyfikowana jeżeli metoda zwróci wartość false.
    virtual bool getMaxHP( int & _outHP ) { return false; }
};
Wszystkie Twoje przedmioty niech dziedziczą po tej klasie i implementują wybrane metody wirtualne. Jeżeli masz klasy, które mają różne interfejsy to proponuję Ci, aby klasa Items posiadała wszystkie możliwe metody wirtualne jakie posiadają różne przedmioty. Te przedmioty, które czegoś nie będą obsługiwały będą zwracały wartość false. Przykład masz dla metody getMaxHP.

Takie podejście zapewni Ci bardzo łatwą obsługę przedmiotów, np.
C/C++
int maxHP = hero->getMaxHP();
int maxMana = hero->getMaxMana();
for( auto & item: m_vItems )
{
    item->render();
    int value;
    if( item->getMaxHP( value ) )
         maxHP += value;
   
    if( item->getMaxMana( value ) )
         maxMana += value;
   
} //for
std::cout << "MaxHP = " << maxHP << std::endl;
std::cout << "MaxMana = " << maxMana << std::endl;
P-137597
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona