Gra w stylu Monopoly

0

Witam! Mam zamiar stworzyć grę Monopol na zajęcia z informatyki i pomyślałem, żeby dziedziczenie klas zrobić w sposób następujący pole -> do_kupienia -> ulica. (Muszę użyć dziedziczenia, więc nie mogę się go pozbyć). Pole to np. start, losowanie karty itd., każda ulica jest do_kupienia, ale są również inne rzeczy do_kupienia, które ulicami nie są, np. kolej. Problem zaczyna się wtedy, gdy mam już te klasy gotowe i w mainie chcę zaraz po uruchomieniu programu stworzyć tych kilkadziesiąt pól. Zamierzałem zrobić to przy pomocy tablicy i operatora new - stworzyć odpowiednią ilość pól, a później odnosić się do nich przy pomocy indeksu. Niestety, musiałbym przy tworzeniu tablicy uznać, że każde pole jest tej samej klasy, czyli zamiast trzech klas i dziedziczenia, użyć tylko jednej klasy, w której niektóre pola by się marnowały (np. niepotrzebna byłaby dla pola start zmienna zawierająca cenę hotelu, ponieważ na starcie nie można niczego budować). Czyli - albo używam tablicy albo dziedziczenia. Jak można pogodzić te dwie rzeczy ze sobą? Zależy mi zarówno na dziedziczeniu, żeby niepotrzebnie nie marnować zmiennych dla pól, które ich nie potrzebują (a poza tym nauczyciel ode mnie wymaga użycia dziedziczenia), jak i na indeksowaniu elementów (w celu łatwego dostępu do nich - tj. gracz znajduje się na polu zmienna1, wyrzucił zmienna2 oczek, więc teraz znajduje się na polu zmienna1+=zmienna2). Pozdrawiam.

0

Polimorfizm?
Tworzysz klasę nadrzędną np. Pole, które zawiera tylko te składowe i funkcje wspólne dla wszystich pól. A w mainie tworzysz sobie

Pole** plansza = new Pole*; //tablica na pola
//tutaj tworzysz odpowiednie pola na zasadzie:
plansza[i] = new PoleUlica;
plansza[j]= new PoleKolej;

Problemu nie będzie jeśli dobrze będziesz operował funkcjami wirtualnymi.
np. będzie funkcja wirtualna w klasie DoKupienia

virtual void kup();

I jeśli operujesz wskaźnikami do klasy nadrzednej to mozesz wywołać spokojnie

plansza[i]->kup();

I zostanie wybrana dobra funkcja (z odpowiedniej klasy ;) )

0

Zapomnieliście jeszcze o innych ważnych polach, które funkcjonują inaczej co ma duży wpływ na projekt klas:
rogi: START, PARKING, WIĘZIENIE, PRZESTĘPSTWO; oraz PRZYPADEK LOSOWY.
Czyli pole wg mnie powinno mieć metodę: wejdzNaPole(gracz* g);
kup będzie jedynie dla miast/ulic, transportu, elektrowni.

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