Open maro512 opened 7 years ago
Jeśli chodzi o gracza-remis, to zrobiłbym go jakimś globalnym obiektem (finalnym). Wtedy można by go porównywać za pomocą == a nie sprawdzając nazwę. Poza tym obecna wersja getPossibleMoves
się nie kompiluje (niezainicjowane possibilities
)...
może jednak lepiej w game zrobić zmienną boolean draw i ją zmieniać na true, gdy pojawi się remis? poprawię, nie miałem kompilatora pod ręką pisząc ten kod
dobra, game skończone, powinno być ok. użyłem zmiennej boolean do remisu. jeśli uznacie że wszystko jest ok to możecie odhaczyć issue
Problem jest z playerami. Nie można ich ani dodać z zewnątrz, ani nie są tworzeni w Game... Wygląda na to, że tworzysz tablicę Player wypełnioną dwoma nullami i nigdy nie zapisujesz tam prawdziwego obiektu ani nie dajesz nikomu możliwości tego zrobić. Można albo dodać metody setWhite/BlackPlayer albo zmodyfikować konstruktor. O ile Board jest wewnętrzną sprawą Game, to gracze chyba "przychodzą" z interfejsu.
Do Game'a dodałbym metodę wyznaczającą środkowe współrzędne planszy w oparciu o metody getMaxX
, getMinX
, getMaxY
i getMinY
, albo niech opakuje te wartości w jakąś użyteczną strukturę ("prostokąt"?). Na razie można tego używać do umieszczania geometrycznego środka planszy na środku ekranu, a w przyszłości można użyć skrajnych współrzędnych, żeby nie dało się przesunąć ekranu poza planszę.
Poza tym sprawdzanie remisu jest wykonywane tylko w metodzie whoWon
(zmienna draw
jest chyba zupełnie niepotrzebna, a w tej chwili nawet nie spełnia swojego zadania). Może makeMove
powinna zwracać true
gdy gra została rozstrzygnięta, albo dajmy jakąś metodę isFinished
czy coś.
metoda wyznaczająca środkowe współrzędne nie jest potrzebna, a ograniczać planszy chyba też nie będziemy. Najlepiej byłoby gdyby gracz mógł położyć pierwszą płytkę tam gdzie chce, ale jeśli tak się nie da to ustawimy na środku sztywny punkt i jak będzie możliwość przesuwania i powiększania planszy to sobie ustawi jak mu pasuje.
W tej chwili można po prostu zachować globalne przesunięcie współrzędnych (nawet z dokładnością do piksela) powstające przy pierwszym kliknięciu. "Krawędzie planszy" (to tylko skrajne współrzędne dotychczas wyłożonych płytek) są chyba potrzebne, bo jak ktoś przesunie planszę tak, że nie będzie tam ani jednej płytki, to chyba nie będzie dobrze...
Jak w Game jest teraz pole selected
to lepiej go używać w metodzie makeMove
, zamiast pobierać współrzędne w argumentach. Poza tym getCell
to jedna linijka: board.getCell((int) pos.x, (int) pos.y);
...
zmieniłem na selected, getCell poprawie
Połączenie modelu z wyświetlaniem