#szachy #diagonalchess #przekatneszachy #programowanie #csharp Jak zapowiadałem w tym wpisie, wpadłem na pomysł stworzenia szachów ze spersonalizowanymi ruchami. Na początek ruchy gońca i królowej będą się odbijać od ścian. Od razu zabrałem się do roboty i mam już pierwsze efekty pracy.
Wszytko robię sam od zera, silnik szachów, programowanie ruchów. Udało mi się do tej pory zaprogramować ruchy pionków i gońca. Wrzucam screen jak w tej chwili to wygląda.
Cały kod źródłowy udostępniam. Jeśli macie czas i ochotę, jestem otwarty na sugestie dotyczące struktury i zastosowanych algorytmów programu. Robię to bez wcześniejszego zaprojektowania więc rozwiązanie nie jest idealne i nie spełnia wielu norm dobrego programowania. Jak macie uwagi, zapraszam do dyskusji a nawet mogę dać dostęp developera, żeby wspólnie nad tym pracować.
@marios160: Tak na pierwszy rzut oka to strasznie mnie bolą konstrukcje "if (warunek) return true; else return false;". Przecież można napisać "return warunek", np.:
public bool IsOccupied(int row, int col) { if (ChessBoard.Pieces.Where(p => p.Row == row && p.Column == col && p.Type != ChessPieceTypes.Dot).Count()
@EmcePomidor2 tu jest tak fajnie zrobione że jest bindowanie danych. Jest kolekcja figur i jak zmieniam im właściwości np. Row i column to one zmieniają miejsce na szachownicy.
Problem z zapisaniem ruchu jest taki że w tej wersji szachów goniec się odbija od ściany i to może być trochę problem.
Spróbuję trochę to pozmieniać jak mówisz i zobaczymy co z tego wyjdzie. Ale lista ruchów to w sumie bardzo dobry pomysł.
@marios160: chodzi o to że robisz osobny namespace Logic/ i tam są wszystkie reguły i nie ma nic współnego z klikaniem i wyświetlaniem ale jest tip tom
i osobny namespace View/ czy jak to tam nazwiesz i tam można nasrać i tam tez są figury dokładnie tak jak teraz masz ale pytają się Logic/ o wszystko
@EmcePomidor2 no tak, rozumiem o co chodzi ale cały czas się zastanawiam jak zdefiniować ruch figury. Że skoczek może się ruszać po literze L. Lista punktów? 0,1;0,2;1,2; coś takiego?
@EmcePomidor2 powiem Ci ze mi ćwieka zabiłeś tym pomysłem. Nie umiem ruszyć z miejsca bo nie wiem jak w klasie figury zdefiniować jaki ruch może wykonać. Tak żeby arbiter podawał punkt a i b i figura by zwracała czy może tam się ruszyć.
Ruch skoczka łatwo zapisać np. +2, - 1, ale ruch gońca który odbija się od ścian? Bo jak by się nie odbijał to 1,1;2,2 i tak do 7,
Jak zapowiadałem w tym wpisie, wpadłem na pomysł stworzenia szachów ze spersonalizowanymi ruchami. Na początek ruchy gońca i królowej będą się odbijać od ścian. Od razu zabrałem się do roboty i mam już pierwsze efekty pracy.
Wszytko robię sam od zera, silnik szachów, programowanie ruchów. Udało mi się do tej pory zaprogramować ruchy pionków i gońca. Wrzucam screen jak w tej chwili to wygląda.
Cały kod źródłowy udostępniam. Jeśli macie czas i ochotę, jestem otwarty na sugestie dotyczące struktury i zastosowanych algorytmów programu. Robię to bez wcześniejszego zaprojektowania więc rozwiązanie nie jest idealne i nie spełnia wielu norm dobrego programowania. Jak macie uwagi, zapraszam do dyskusji a nawet mogę dać dostęp developera, żeby wspólnie nad tym pracować.
Link do źródła: https://github.com/marios160/diagonalchess
źródło: comment_1642617270GEVJMXHQx0BUGDmi5orUse.jpg
Pobierzja bym na start podpatrzył jakieś projekty i poodgapial rozwiązania
Tu np. https://github.com/marios160/diagonalchess/blob/main/Pieces/PawnWhite.cs
Robisz jakieś if-owanie a wg mnie figura powinna tylko mówić tylko jak się porusza a tu już zawierasz logikę
https://github.com/marios160/diagonalchess/blob/main/Pieces/Bishop.cs
Przecież każda figura będzie musiała spojrzeć czy nie wychodzi z planszy, więc zduplikujesz kod
Figury wiedzą tylko o sobie i co potrafią robić
Plansza wie tylko co i gdzie na niej leży
"Arbiter" wie o planszy i o figurach i wie jakie ruchy są prawidłowe
Tak na pierwszy rzut oka to strasznie mnie bolą konstrukcje "if (warunek) return true; else return false;". Przecież można napisać "return warunek", np.:
public bool IsOccupied(int row, int col)
{
if (ChessBoard.Pieces.Where(p => p.Row == row && p.Column == col && p.Type != ChessPieceTypes.Dot).Count()
"Na a1 da radę pójść?" Nie.
"Na a2 da radę pójść?"
@EmcePomidor2: a jak byś zapisał ruch, tzn. Jak wygląda jej ruch?
Nie znam C# ale zrobiłbym kolekcje ruchów
Problem z zapisaniem ruchu jest taki że w tej wersji szachów goniec się odbija od ściany i to może być trochę problem.
Spróbuję trochę to pozmieniać jak mówisz i zobaczymy co z tego wyjdzie. Ale lista ruchów to w sumie bardzo dobry pomysł.
i osobny namespace View/ czy jak to tam nazwiesz i tam można nasrać i tam tez są figury dokładnie tak jak teraz masz ale pytają się Logic/ o wszystko
i żadnych liczb typu "7" nie ma tam być. to "Arbiter" niech patrzy czy potencjalny ruch jest poza planszą
tu będzie jakaś matematyka ale sam się na to pisałeś ( ͡° ͜ʖ ͡°) w
Move
{
piece: ChesssPiece,
Ruch skoczka łatwo zapisać np. +2, - 1, ale ruch gońca który odbija się od ścian? Bo jak by się nie odbijał to 1,1;2,2 i tak do 7,