Chciałbym uzyskać od was ocenę mojego projektu szachów oraz propozycje, co można by było w tym poprawić.
Klasa Chessboard tworzy ramkę, zawiera dwuwymiarową tablicę obiektów klasy Pole, obsługuje klikanie w te pola oraz wysyłanie do pól wiadomości o kliknięciu. Pobiera od obiektów klasy Pole kolor i zawartość oraz je rysuje.
Klasa Pole zawiera informację o kolorze pola i pionku (obiekcie klasy Checker), które stoi na danym polu. Wykonuje czynności na podstawie informacji o kliknięciu. Posiada również współrzędne pola na szachownicy
Klasa Checker posiada informacje o wyglądzie pionków. Importuje je z jednego obrazka.
Ten jeden obrazek zawiera wygląd wszystkich pionków, teksturę gry w tle, kolory pól itd. Dzięki temu, każda gotowa do tego osoba może w programie typu GIMP łatwo zmienić wygląd gry.
To jest taki podstawowy projekt, w którym zamieściłem również poruszanie się pionków - a raczej przenoszenie ich w dowolne miejsce. Zastanawiam się nad sposobem zaimplementowania zasad gry i pomyślałem nad klasą Rule i jej metodą isValid(Pole src, Pole dest)
. Metoda sprawdza, czy pionek stojący na polu src może przejść na pole dest. Będzie sprawdzała przede wszystkim, czy pionek z src
należy do gracza wykonującego ruch oraz czy na polu dest
nie stoi przypadkiem pionek tego samego koloru, co z pola src
. Dalej mam dwa pomysły:
#Klasa Rule będzie pobierała z src
typ pionka i na tej podstawie sprawdzała pozostałe ruchy
#Pojawią się klasy dziedziczące po Rule dla każdego typu pionka, w której metoda isValid(Pole src, Pole dest)
wywołuje najpierw super.isValid(Pole src, Pole dest)
i w razie, gdyby zwróciło true, wykonać resztę działań
Według mnie, łatwiej byłoby wykonać drugi przykład, lecz stworzy on sporą ilość klas. Pierwszy przykład może z kolei stworzyć naprawdę rozbudowaną metodę. Które rozwiązanie będzie lepsze? A może macie jakieś swoje?