Diagram UML szachy zależność: Jednostka - Plansza

0

Witam,
jak wiadomo jednym z wyników stosowania OOPu jest jak najbliższe odzwierciedlenie rzeczywistości. W grze szachy mamy pola, które tworzą nam plansze. Po tych polach poruszają się jednostki. Starając się stworzyć diagram UML do tej gry napotkałem problem. Mianowicie chodzi o sprawdzanie pól poprzez jednostki, np. czy to pole nie jest szachowane. Najlepszy rozwiązaniem, które znalazłem jest usunięcie klasy Pola i stworzenie Planszy za pomocą Unitów, ale to wypacza rzeczywistość. Czy macie jakieś rozwiązania, które pozwalają zachować rzeczywistość i jednocześnie dające frajde z późniejszego kodzenia? :)

Diagram w załączniku, metoda checking załatwia wszystko, ale niestety nie mamy dostępu boarda.

0

Pomyśl jak byś to wykonał w rzeczywistości. Ktoś stawia pionka na jakimś polu i mówi Ci szach (przesuwając pionka, dajesz znać, że na planszy jest zaszachowany król). Próbując uciec królem sprawdzasz pole na które przesuwasz króla względem tej figury która Cię szachuje, wyłączając pola, które są pilnowane przez inne figury. Pola powinny więc mieć zmienne które mówią czy pole jest pilnowane czy wolne. Jeśli jest pilnowane, to tylko król na to pole nie może się ruszyć. W momencie wykonania ruchu, powinno nastąpić sprawdzenie czy król już nie jest szachowany (czyli po raz drugi zaznaczasz pilnowane pola, bo może wyskoczyć pion w połowie pola widzenia gońca i wtedy pola pilnowane są tylko do piona reszta już jest dla króla wolna).

0

Powiem ci, że wiedziałem o tych warunkach, ale zakładałem że za to wszystko odpowiedzialne są jednostki. Dzięki tobie uświadomiłem sobie, że to gracz porusza jednostkami i sprawdza czy dana jednostka może się ruszyć na to pole, a nie same jednostki wiedzą nie wiadomo skąd, czy mogą się ruszyć czy nie. Wniosek jest taki, że należy metodę która będzie sprawdzać czy dana jednostka może w tym momencie wykonać ruch (możliwe, że król jest szachowany) i czy ten ruch został wykonany na poprawne pole itd. należy przenieść z unita do playera (metoda checking). Problem jaki teraz się pojawia jest następujący: metoda checking będzie kolosalna. Po pierwsze będzie musiała sprawdzać jaką jednostkę wybraliśmy, potem czy pole zostało wybrane poprawnie, czy król nie jest szachowany itd. Ja chciałbym uniknąć tworzenia jednej ogromnej metody i zrzucić trochę roboty właśnie na pionki. Mam nadzieje, że napisałem to w miarę zrozumiale i jasno ;) Co do tych wszystkich przypadków które przytoczyłeś, wiem o nich i widzę ich miejsce właśnie w klasach dziedziczących po unicie(ew. player), tylko muszę mieć dostęp z unita do boarda i to jest nadal problem.

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