Mechanika skili

0

Pisze prosty symulator walki w ramach ćwiczeń i chciałbym was prosić o pomoc/pomysł/ocenę

Otóż, jak mam reprezentować umiejętności.
Przykładowe
prowokacja: rzut kośćmi w oparciu o charyzmę przeciwnika efekt-zmniejszenie stopni przeciwnika
drugi atak: 2 ataki na torę
manewr: opuszczenie ataku w celu zwiększenia wydajności ataku następnego

Mój pomysł jest taki żeby stworzyć główną klasę "umiejetnosc" umieścić w niej podstawowe informacje powtarzające się w każdej umiejętności + metodę use(); następnie tworzyć klasy pochodne (po jednej dla każdej umiejętności i przeciążać metodę use() dla każdej z nich)i przechowywać je w tablicy wskaźników na "umiejetnosc" ale wydaje mi się ze tworzenie osobnych klas dla każdej umiejętności to nie najlepszy pomysł

inny pomysł to dla każdej umiejętności napisać osobną funkcje globalna którą mogę wykorzystać w każdej chwili.
i przy użyciu pobrać nazwę umiejętności i w zależności od nazwy inną funkcję użyć.

Prosiłbym o waszą opinię i/lub ewentualny lepszy pomysł.

0

Zacznij moze od czegoś łatwiejszego -> na przykład od gry planszowej gdzie masz pola o różnych właściwościach ;)
Ogólnie opcja 1 - hierarchia klas jest w porządku, o ile zrobisz to z głową.

0

Nie jestem całkiem początkującym. Temat jaki sobie wybrałem raczej dam rade wykonać i przy nim będę się trzymał chciałbym tylko o pomysł na poostrzy sposób zarządzania umiejętnościami. Jeśli żaden się nie znajdzie wykorzystam jeden z wymienionych (dlatego chciałbym tez opinie na ich temat).

Wpadłem na kolejny podobny do opisanego jako drugi:

umiejętności ponumerowane każda postać ma ich liste np nr 1, 3, 14, 28
każda umiejętność to osobna funkcja
jedna ogólna funkcja umiejętność z argumentem int:
void umiejetnosc(int u)
{
switch (u)
{
case 1:
umiejetnosc1();
break;

case 2:
umiejetnosc2();
break;
.
.
.
itd
}
}

0

Bez sensu. Jak będzie 1000 skilli to też tak zrobisz, takie drabinki ifów? Takie rzeczy powinien za ciebie załatwiać polimorfizm.

0

czyli jednak 1 opcja?

0

Ale to jest dobry pomysł żeby dla każdego skial robić osobna klasę? będzie z 30-50 klas na same skile ;/

0

A czemu nie? Jak dobrze to rozplanować to wbrew pozorom nie będzie takie straszne.

0

No i co z tego? To będą małe klasy.
Zainteresuj się wzorcem projektowym "template method" bo będzie tu miał zastosowanie. Tak samo ze "strategy".

0

W takim razie jeszcze o jedno muszę spytać
przykładowy skill (będący elementem w klasie postac) powinien mieć stopień = poziomowi skila + zręczności postaci(inny element w tej klasie)

poziom świeżo tworzonego skila będzie 1
czyli
konstruktor:
{
poziom=1;
stopien=poziom+x.zrecznosc();
}

gdzie x to klasa postaci do której należy dany skill a zrecznosc() zwraca zręczność tej postaci

jak w miejsce x wstawić klasę postać do której (w przyszłości) będzie należał ten talent?
jedyne co mi przychodzi na myśl to w konstruktor dać argument przyjmujący własnie te postać, czyli

konstruktor(postac p)
{
poziom=1;
stopien=poziom+p.zrecznosc();
}

ale nie da się tego zrobić inaczej? zwarzywszy na to ze szukamy wartości należącej do klasy tej samej co dany skill?

0

Inaczej się nie da jeśli faktycznie musisz takie powiązanie mieć.

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