Szablon do gry w statki - problem teoretyczny

0

Witajcie,

mam mały problem natury projektowej. Mam do zrobienia zadanie polegające na stworzeniu gry w statki na planszy 10x10. Ma to byc zrobione przy wykorzystaniu szablonów c++. Mam stworzyć klasę, której obiektem będą statki oraz szablon, przy wykorzystaniu którego będzie możliwe otrzymanie klas

    • której obiektem będzie plansza statków
    • której obiektem będzie plansza zawierająca oddane strzały
      Próbowałem to zaprojektować na kilka sposobów, ale nie wiem przede wszystkim jakimi typami konkretyzować ten szablon, żeby otrzymać powyższe 2 klasy (domyślam się, że jednym z nich będzie statek, chociaż pewności nie mam, bo może to być też pole planszy albo trafienie) - jest to dla mnie problem, ponieważ w zależności od typu konkretyzującego będzie on miał różną budowę, a więc zawierał różne pola. Nie potrafię tego rozgryźć, dlatego będę wdzięczny za wszelkie sugestie.

Pozdrawiam
lukusm

0

Nie za bardzo rozumiem, chcesz utworzyć coś na wzór Plansza<Statek> (na tej planszy są statki) i Plansza<bool> (tutaj są tylko wartości bool - strzelono w dane pole, albo nie)?

0
Azrael_Valedhel napisał(a)

Nie za bardzo rozumiem, chcesz utworzyć coś na wzór Plansza<Statek> (na tej planszy są statki) i Plansza<bool> (tutaj są tylko wartości bool - strzelono w dane pole, albo nie)?

Dokładnie na tej zasadzie ma być stworzony szablon. Z tym, że zakładając, że typy konkretyzujące (w tym przypadku statek i bool) mogą mieć różne pola i metody, każda z klas stworzonych po konkretyzacji szablonu też powinna mieć różne metody (inne mogą być dla planszy statków a inne dla planszy strzałów). No i nie wiem, czy na tym etapie popełniam błąd projektowy, czy może jest sposób, aby do jednego szablonu nie wrzucać wszystkiego (czyli jeśli np.w "ciele" obiektu klasy plansza statków mamy mieć metody pokaż statek, zatop, ustrzel itd., a w "ciele" planszy strzalow beda metody pokaz strzaly, zaznacz strzal, czyTrafiony itd. to mam to wrzucać wszystko do szablonu?). No bo z jednych metod może korzystać dana klasa po konkretyzacji a z innych już nie... :(

0

IMO powinieneś z tego korzystać np. tak:

Plansza<bool> strzelone;
strzelone.Pole(2, 3) = true; // strzelono w pole 2, 3
Plansza<Statek> statki;
statki.Pole(2, 3).ustrzel(); // wywołanie metody statku

Czyli inaczej mówiąc dostajesz się do obiektu na x, y przez metodę

T& Plansza::Pole(int x, int y);

Która będzie zwracać bool dla szablonu booli albo Statek dla szablonu statków

0

Ok, to już mi sporo rozjaśniło. Ale po rozrysowaniu sobie tego wszystkiego na kartce pojawił się nowy problem - a mianowicie przechowywanie danych w polach klasy plansza. Dla klasy skonkretyzowanej typem bool dla strzałów nie ma problemu: robie Pole** pola (gdzie Pole jest klasa obrazujaca pojedyncze pole) oraz T** tab (jako tablica trafien) - w momencie strzalu wypelniam tab a potem przenosze to do tablicy pól z informacją o znaku rysowanym (x dla trafienia, - dla pustego pola). Natomiast dla klasy skonkretyzowanej typem statek nie wiem jak zrobic strukture pól takiej klasy. Bo samo Pole** pola nie wystarczy (jeśli np mamy statek długości >1, to musimy jakoś przechowywać też info o statkach zanim je przerysujemy na planszę). No i wymyśliłem sobie coś analogicznego do planszy trafień - tworzę Pole** pola oraz T* statki, i w konstruktorze na podstawie tabeli statków wypełniam tabelę pól. Aczkolwiek nie wiem czy to jest poprawne podejście merytoryczne. Dlatego proszę o konstruktywną krytykę w razie czego i poprawienie ewentualnych błędów w analizie rozwiązania...

To jest to, co sobie rozplanowałem:
klasa plansza (10x10 - int x int) - jako szablon
- int wymiar, Pole** pola, T* tab;(tablica trafien lub statkow)
klasa pole
- int x, int y, char znak;
klasa statek
- dlugosc, plaszczyzna, pole poczatkowe (jesli poziom, to w prawo, jesli pion to w dol od pola poczatkowego), int* trafienia;(? czy tutaj wkladac trafienia czy
tylko na planszy trafien zaznaczac - ewentualnie do wywalenia)
klasa trafienie
- int dl, int szer, bool stan
klasa gracz
- string imie, plansza<statek> statki, plansza<trafienie> trafienia, int pozostaloDoZestrzelenia;

0

Witam, ja rownięż mam do napisanie gre w statki gdzie bedzie mozliwosc grania z komputerem... na razie zastanawiam sie jak narywsowac ta plansze 10x10 za pomoca klas... Moze jakas mała podpowiedz?

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