Lubisz grać w szachy? Podobał ci się chess.com lub lichess? W takim razie pokochasz KoksSzachy! heart
Project description
KoksSzachy
chess.com pls don't sue us, it's for fun
Jak to działa?
Silnik KoksSzachów działa na bardzo prostej zasadzie:
-
Pobranie pozycji chessboard.js za pomocą wpisywania w url FEN stringów.
-
Rekreacja pozycji w bibliotece python-chess, która umożliwia stworzenie listy możliwych ruchów i wiele innych, które przydadzą się w algorytmie Minimax.
-
Ewaluacja materiału. Działa ona na podstawie zliczania wartości wszystkich bierek na planszy. Wartości te są przedstawione w słowniku
values
. -
Ewaluacja pozycji odtworzonej przez wspomnianą wcześniej bibliotekę przy pomocy FEN stringa. Jest ona robiona na podstawie słownika
positions
.-
Jak to działa? To bardzo proste - w słowniku dla każdej figury isnieje odpowiadający jej dwuwymiarowy array z liczbami całkowitymi. Array odpowiada prawdziwym rozmiarom szachownicy czyli 8x8. Weźmy dla przykładu array poświęcony gońcowi. Specjalnie zaznaczona została notacja szachowa dla ułatwienia wizualicaji.
{chess.BISHOP: [ -50, -40, -30, -30, -30, -30, -40, -50, # 8 -40, -20, 0, 0, 0, 0, -20, -40, # 7 -30, 0, 10, 15, 15, 10, 0, -30, # 6 -30, 5, 15, 20, 20, 15, 5, -30, # 5 -30, 0, 15, 20, 20, 15, 0, -30, # 4 -30, 5, 10, 15, 15, 10, 5, -30, # 3 -40, -20, 0, 5, 5, 0, -20, -40, # 2 -50, -40, -30, -30, -30, -30, -40, -50, # 1 # a b c d e f g h ]}
Łatwo zauważyć, że każdy z narożników szachownicy ma bardzo niskie wartości. To dlatego, że goniec stając na nich traci możliwość poruszania się po dwóch przekątnych tylko do jednej.
Zagłębiając się w wartości tej czy innych figur można dostrzec wiele innych wariantów.Arraye są przedstawione z perspektywy pierwszej osoby.
-
-
Gdy białe - gracz, wykonają ruch, czarne - czyli komputer analizują pozycje i materiał zapisując obecną wartość ogólną. Po tym procesie uruchamiany jest algorytm Minimax, który analizuje przyszłe i możliwe posunięcia przeciwnika po wykonanym ruchu. W ten sposób algorytm ocenia, który ruch jest dla niego najlepszy. To na ile posunięć do przodu liczy jest kontrolowane przez zmienną
depth+1
. -
Obliczone ruchy są zapisywane w odpowiedniej kolejności
-
Komputer wybiera pierwszy ruch z listy i go wykonuje.
-
Wszystko działa dopóki są możliwe ruchy. Nie działa to na podstawie pętli.
Minimax
Minimax w KoksSzachach jest zooptymlizowany poprzez alpha-beta pruning oraz iterative deepening.
Ciekawe artykuły i źródła na temat tych algorytmów:
- https://www.cs.cornell.edu/courses/cs312/2002sp/lectures/rec21.htm
- https://www.cs.tau.ac.il/~wolf/papers/deepchess.pdf
- https://en.wikipedia.org/wiki/Evaluation_function#In_chess
- https://www.youtube.com/watch?v=JnXKZYFmGOg
- https://www.freecodecamp.org/news/simple-chess-ai-step-by-step-1d55a9266977/
- https://towardsdatascience.com/how-a-chess-playing-computer-thinks-about-its-next-move-8f028bd0e7b1
- https://pl.wikipedia.org/wiki/Algorytm_alfa-beta
- https://www.chessprogramming.org/Iterative_Deepening
Instalacja
Jak zagrać?
Do odpalenia KoksSzachów potrzeba bibliotek zawartych w pliku requirements.txt
git clone https://github.com/a1eaiactaest/KoksSzachy.git
cd KoksSzachy
# UNIX
pip3 install -r requirements.txt
./play.py
# Windows
pip install -r requirements.txt
python play.py
# webserver na localhost:5000 (127.0.0.1:5000)
TODO
- Narysować boarda na stronie.
- Podpiąć chessboardjs pod python-chessa.
- Bardzo podstawowe działanie takie jak ograniczenie tylko do legalnych ruchów.
- Troche bardziej rozwinięte działanie.
- Promocja
- En passant
- Roszada
- Ewaluacja dla poszczególnych bierek.
- Minimax
- Alpha-beta
- Javascriptowe funkcje
- takeBack()
- implementacja
- guziczek
- newGame()
- implementacja
- guziczek
- takeBack()
- Ktoś może sportować javascripta z index.html do oddzielnego pliku.
- Frontend
- Analysis Button, czyli klikamy zapisujemy notacje PGN i przekierowywyuje nas w new tabie do API Lichessa z możliwością analizy naszej gry na podstawie PGN.
- Kto wygrywa, aka wartość zbitych pionów z obu stron.
- favicon i logo jakies do readme
- wybór promocji, tzn. na jaką figurę chcemy wypromować piona
- wypisywanie pgn-u do textarea
Zgodność
- Windows
- Linux
- MacOS
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for KoksSzachy-0.6.9-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2d5c2f444f19f3094b32d01a9fcd5205e7ee5bdbd63a11e6f40a15d32ee51486 |
|
MD5 | 0230662d66506b19722dab30c57887ee |
|
BLAKE2b-256 | 43a8d2f73ed11fa24262c6a395c18e16ba4f87c08f1719e4df283dca7822927f |