Aktywne Wpisy
![Rasteris](https://wykop.pl/cdn/c3397992/Rasteris_MUC591uhoT,q60.jpg)
Rasteris +302
I kolejna tropikalna noc za nami. W Warszawie temperatura spadła do 24 stopni, a za nic tropikalna uznaje się taką gdy nie spada poniżej 20. I kilka następnych dni też ma być takich. A średnio takich nocy w roku było 3 na zachodzie kraju, i poniżej 1 na wschodzie. Ale od kilku lat to dobija nawet do kilkunastu. Temperaturowe to jesteśmy tam gdzie w latach 80 była Bułgaria czy pólnocna Grecja.
I
I
![Wrrronika](https://wykop.pl/cdn/c0834752/4d898645ed63ead441fc6ad0b5edf99788d124e7281e54b66931322712e7d7af,q60.png)
Wrrronika +246
Śmiechu warte
Baba nigdy nie leciała samolotem i na 1 wycieczkę wybrała Sri Lankę xD
Oszczędzała trochę i jedzie na 10 dni sama.
Więc
Baba nigdy nie leciała samolotem i na 1 wycieczkę wybrała Sri Lankę xD
Oszczędzała trochę i jedzie na 10 dni sama.
Więc
![Wrrronika - Śmiechu warte
Baba nigdy nie leciała samolotem i na 1 wycieczkę wybrała ...](https://wykop.pl/cdn/c3201142/9bd666592f34194df6801d164a28278aa9c345ccbe0979055be834b98eb87d62,w150.jpg)
źródło: 1000028859
Pobierz
Klasa Game ma pole Piece[] board, oraz jest klasa Piece która ma pola PieceType (enumy 'K', 'Q' itd) oraz Color oraz Square (pole na jakim stoi)
Teraz zastanawiam się czy implementować szczegółowe klasy figur i czy sprawdzanie ich możliwych ruchów powinno odbywać się w silniku czy nie, rozpatruję następujące opcje
1. Klasa Game sprawdza czy ruch dla Piece jest możliwy, typ Piece jest stosowany jest dla wszystkich figur (ponieważ każda ma pole type i color a to co je odróżnia jest robione w silniku Game)
2. Piece jest abstrakcyjna, tworzę podklasy Knight, Queen itd. Konkretne klasy miałyby np. metodę
availableSquares()
która zwraca dostępne pola na jakie może się ruszyć z pola na którym stoia)
availableSquares()
zwraca dostępne pola, ale przy założeniu, jakby ta figura stała samotnie na szachownicy a silnik Game ogranicza te ruchy zależnie od stanu boardb) do konkretnych klas Knight, Queen itd. wstrzykuje board, by mogły one orientować się jaka jest pozycja i same uwzględnić na jakie pola mogą iść w metodzie
availableSquares()
(uwzględniając inne figury stojące na drodze itd)Wydaje mi się, ze opcja 2a jest okej, wygląda logicznie, ale jest więcej roboty bo najpierw w klasie Piece liczę dostępne pola a mógłbym od razu dostępne pola przy uwzględnieniu innych figur na szachownicy (potem silnik i tak ogranicza te pola i musi on "symulować" linię po jakiej idzie figura przy sprawdzić czy stoi coś na linii)
#szachy #naukaprogramowania #java
Później zamierzam dodać gracza komputerowego , czyli po prostu klasę która będzie analizowała dostępne ruchy (dostanie z metody obecnego kontrolera, klasy Game), będzie miała swoją funkcję oceniającą, drzewo min-max itd. (wtedy to będzie silnik stricte szachowy, coś jak Stockfish)
Aktualnie nie wiem czy sprawdzanie czy ruch jest poprawny robić w kontrolerze (klasa Game) czy hierarchię klas Piece-> KonkretneFigury i KonkretneFigury aby ocenić czy ruch jest możliwy musiałyby znać stan gry (Game musiałby wstrzykiwać do "modelu" stan szachownicy). Druga opcja to KonkretneFigury pokazują tylko możliwe ruchy figury (jakby nie stało nic innego na planszy) a kontroler analizuje (tylko tak naprawdę podczas analizy i tak kontroler rozróżnia czy analizuje dla pionka czy skoczka, dlatego nie wiem czy jest sens robić klasę KonkretneFigury, czy dać ogólną Piece która ma tylko pole name które mówi co to za figura, ale o jej możliwe ruchy dba
Czołem, możesz sobie zobaczyć jak ja to w Ruby ogarnąłem, bo o ile rozumiem to właśnie to samo robisz :)
https://github.com/visualitypl/bchess/
piece.rb gdzie jest metoda clearpath która potrzebuje board (czyli to ogólna klasa figur sprawdza czy inne figury z szachownicy nie przeszkadzają w wykonaniu ruchu).
Zastanawiam się czy dobrze jest jak piece zna stan szachownicy.
bo już konkretniejsze klasy typu bishop.rb mają canmovetofield gdzie tak naprawdę jak dobrze rozumiem korzystają z metody nadklasy oraz swojej specyfiki ruchu.
Sam board.rb jak widze rozpoznaje sytuacje "specjalne" (bicie w przelocie, ruch podczas szacha, promocja,
Sorry, nie mam chwilowo czasu by usiąść i zrozumieć (a też przypominać sobie jak i po co to robiłem), jutro spróbuję w pracy (w końcu tę bibliotekę robiłem też w ramach pracy :P)
W sumie powiem to co mówisz nie różni się tak bardzo od tego, co ja zrobiłem - ja te metody z klasy Piece przeniosłem z Boarda bardziej w celach organizacyjnych:
z
A masz jakis pomysł jak sprawdzać czy wykonanie ruchu ustawia naszego króla pod szacha?
Bo mam Piece[][] board i chętnie zrobiłbym ruch, sprawdził czy nie dostaje po nim szacha.
Tylko wykonanie ruchu to: przesunięcie figur i usunięcie innych (np po biciu), cofanie takiego ruchu musiałoby pamiętać co zostało zbite, co się ruszło, przy promocji pionka pamiętać by pionka odmienić