Warcaby - reprezentacja planszy i pionków

0

Witajcie.

Mam pewien problem, otóż nie wiem czy reprezentacja planszy i pionków jaką chcę zastosować w pisanych przeze mnie w Qt warcabach dla dwóch graczy jest dobra. W chwili obecnej mam klasę główną aplikacji zawierającą instancję klasy Plansza dziedziczącą z QGraphicsScene, która to z kolei zawiera jednowymiarową tablicę 32 obiektów typu Pole (klasa pochodna QGraphicsItem) i tablicę 24 obiektów typu Pionek (również klasa pochodna z QGraphicsItem). Nie wiem jednak, czy to jest dobre rozwiązanie i czy np. to nie klasa główna gry powinna zawierać pionki.

Idea jest taka, że klasa Pionek będzie zawierała pola identyfikujące jego kolor, typ (pionek/damka), wskaźnik na planszę i zajmowaną pozycję na planszy (wskaźnik na zajmowane pole lub numer pola) i metody odpowiedzialne za ruch pionka, jego promocję do damki i śmierć (usunięcie go z pamięci). Klasa Pole miałaby natomiast zawierać numer pola, wskaźnik na planszę i wskaźnik na stojącego na nim pionka (0 jeśli puste). Klasa Plansza zawierałaby metody umożliwiające "wyłuskanie" poszczególnych pól i pionków na nich stojących.

Powiem szczerze, że to pierwsza "poważniejsza" aplikacja jaką tworzę i czuję się trochę zagubiony - ciężko mi wymyślić odpowiednie rozwiązanie tego problemu - każde ma jakieś wady. Dodatkowo zastanawiam się, czy dobrze robię wiążąc tak bardzo warstwę logiki gry z jej graficzną prezentacją. Zależy mi na rozwiązaniu dość łatwym w implementacji - jako początkujący nie chcę się porywać na jakieś skomplikowane wzorce projektowe, a jedynie zrobić by to działało i kod był w miarę logiczny. Bardzo proszę o jakieś podpowiedzi/rady.

0

Chyba za dużo tych struktur, pisałem warcaby i z tego co pamiętam do reprezentacji pionków użyłem tylko jednej tablicy intow 2d. 0 - brak pionka 1-czarny 2-bialy 3-krolowa biala 4 - czarna. Wydaje mi się, że nie ma co kombinować ze wskaźnikami. Tablica ta byla umieszczona w klasie "plansza". W tej klasie było umieszczone jeszcze to czyj jest ruch. I to było chyba wszystko.

Aha, jeszcze jedno, ta Twoja metoda z jednowymiarową tablicą jest problematyczna, bo ciężej Ci będzie oprogramować zbijanie, ruchy itd. niż u mnie.

0

pierwszy raz widzę warcaby na tylu polach, ale może po tylu latach rządzenia PO się zmieniło ;P

0

Chciałem to zrobić w podobny sposób, a mianowicie za pomocą bitplanszy (3 tablice zawierające po 32 zmienne typu bool interpretowane tak: czy pionek jest czarny, czy pionek jest biały, czy pionek jest damką). Wtedy operując na bitach mógłbym wydobyć bardzo szybko wszystkie potrzebne do ruchu informacje. Spodziewałem się jednak problemów z późniejszym graficznym przedstawieniem planszy. W aplikacji konsolowej dałoby się to ładnie zrobić, jednak w warcabach z GUI i drag&drop'em pionków trzeba by się sporo nakombinować/przerysowywać planszę etc. Dlatego pomyślałem o wykorzystaniu standardowych klas Qt odpowiedzialnych za rysowanie, czyli QGraphicsScene i obiektów (kwadratów i elips), które by były umieszczone na tej scenie. No ale to rozwiązanie też okazało się nie takie dobre. Czy więc warto rezygnować z tego pomysłu i spróbować to zrobić na tych mapach? Problem jest tego typu, że poznałem już w miarę te powyższe Qt'owskie mechanizmy, a na zagłębianie się w jakieś inne metody rysowania planszy i pionków nie za wiele czasu mi zostało.

0

Czemu chcesz odejść od dobrego rozwiązania,jakim jest użycie QGraphicsFrameworka?
Co do podpowiedzi,to dopisz sobie kod pozycjonera,który w zależności od indeksu pionka w tabeli wyliczy odpowiednio koordynaty QGraphicsPixmapItemu na scenie.A potem przesunięcie pionka to robisz poprzez banalne QGraphicsItem::setPos(calculatedQPointF)
Jeśli idzie o zrzucanie pionków na pola,to użyteczne może być QGraphicsItem::collidesWithItem()

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