• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tworzę grę karcianą - jak zaimplementować własności kart?

Object Storage Arubacloud
+1 głos
1,050 wizyt
pytanie zadane 18 kwietnia 2019 w Java przez Kierkegaard Nowicjusz (160 p.)
W ramach ćwiczeń, tworzę grę karcianą w Javie w konsoli. Żeby było bardziej ciekawie, zamierzałem zrobić system kart a'la Hearthstone.

Zaimplementowałem już rzeczy typu tasowanie kart, dobieranie, rękę, itp. Ale mam wątpliwości, jak zrobić to z kartami.

W moim zamiarze, każda karta posiadałaby: atak, obronę oraz koszt. Idealnie byłoby dodać jakieś umiejętności czy czary, ale z tym było by już za dużo zabawy.

I myślałem, żeby to tak zrobić:

Najpierw, żeby zrobić klasę zawierającą spis wszystkich możliwych kart. Potem, na początku gry, przed stworzeniem talii, sczytać z pliku tagi ID kart, a potem stworzyć tabelę zawierającą Id wszystkich kart, utworzyć na podstawie tego obiekty (i wtedy to jakoś przetasować)

Co o tym sądzicie? Czy miałby ktoś lepszy pomysł?

2 odpowiedzi

+5 głosów
odpowiedź 18 kwietnia 2019 przez jankustosz1 Nałogowiec (35,880 p.)
Możesz to zrobić na tysiące sposobów. Najlepiej obiektowo np. w taki sposób

Card - klasa abstrakcyjna posiadająca listę czarów (ISpell), życie, atak, koszt, obrazek itp..

ISpell - interfejs który zawiera metodą canExecute i execute, jeszcze jakieś dodatkowe np. czy ma się wykonywać automatycznie, itp.

I jak robisz nowy rodzaj karty to ustawiasz w konstruktorze odpowiednie spele jakie ta karta powinna mieć itp.

Jeszcze mógłbyś zrobić dodatkowe warstwy abstrakcji, aby np. karty łowcy dziedziczyły po klasie Hunter itd.

Dodatkowo przyda się klasa Hand która zawiera zbiór kart. Ogólnie to tych klas w praktyce okaże się że potrzeba 3x więcej, to tak tylko z grubsza.
komentarz 18 kwietnia 2019 przez Kierkegaard Nowicjusz (160 p.)
To świetny pomysł. Dzięki wielkie :)
+3 głosów
odpowiedź 18 kwietnia 2019 przez miro Pasjonat (23,870 p.)
Przy kartach typu minion zastosowałbym decorator pattern - dobrze sprawdziłby się do buffowania jednostki.
Do kart typu spell fajnie zastosować stragety pattern. W sumie jankustosz1 opisał ten wzorzec na przykładzie Card który posiada obiekt typu ISpell.

Po części można rozwiązać tury przez ten wzorzec - np. Card posiada IAttack. Możesz wtedy wywołać po kolei metody z obiektów które implementują ten interfejs. Minion z szarżą będzie wtedy mieć inny atak niż normalny. Zamrożona karta będzie w takim razie wywoływać pustą metodę z klasy NoAttack.

Staraj uniknąć się wysokiego drzewka dziedziczenia, lepiej zstępować go kompozycją.

Podobne pytania

+2 głosów
0 odpowiedzi 267 wizyt
0 głosów
3 odpowiedzi 241 wizyt
0 głosów
2 odpowiedzi 522 wizyt
pytanie zadane 6 marca 2021 w C# przez Angry1 Początkujący (260 p.)

92,563 zapytań

141,413 odpowiedzi

319,590 komentarzy

61,948 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...