Program napsaný v Javě, který umožňuje dvěma hráčům u jednoho počítače hrát šachy s možností přepnout libovolného hráče na počítač. Vytvořeno jako semestrální práce na KIV/UPG.
Go to file
2023-05-08 00:09:26 +02:00
.idea Added game end dialogs & statistics 2023-05-05 00:34:52 +02:00
assets Added all pieces 2023-03-07 14:59:58 +01:00
lib Added game end dialogs & statistics 2023-05-05 00:34:52 +02:00
src README update 2023-05-08 00:09:26 +02:00
.gitignore Added scripts 2023-03-21 13:59:45 +01:00
build.sh Final updates 2023-05-07 21:07:15 +02:00
Chess.iml Added game end dialogs & statistics 2023-05-05 00:34:52 +02:00
makedocs.sh Final updates 2023-05-07 21:07:15 +02:00
README.md README update 2023-05-08 00:09:26 +02:00
run.sh Final updates 2023-05-07 21:07:15 +02:00

Šachy

Program umožňuje hrát šachy dvěma hráčům u jednoho počítače s možností přepnout libovolného hráče na počítač. V programu jsou implementována pravidla pohybu kamenů včetně braní mimochodem, rošády a proměny v dámu. Kromě hraní šachů je v programu také možné si vybrat jedno ze čtyř barevných provedení šachovnice i kamenů, exportovat vektorově či rastrově aktuální šachovnici nebo si pomocí dalších možností přizpůsobit herní zážitek.

Popis implementace

Hra je naprogramována v programovacím jazyce Java za použití grafické knihovny Swing pro vykreslování šachovnice a kamenů, JFreeSVG pro vektorový export šachovnice a JFreeChart pro vykreslení sloupcového grafu. Hlavní třídou programu je Chess, která vytváří a nastavuje okno programu, vytváří hlavní nabídku pod horním okrajem okna a pokračuje s vytvořením šachovnice.

Šachovnice je v programu reprezentována třídou Chessboard, která vykresluje jednotlivá políčka, uchovává dvourozměrné pole kamenů na ní umístěných a řeší další problémy které s ní souvisejí. Všechny kameny jsou tvořeny třídami podle jejich anglického názvu a implementují jejich vykreslování a možné pohyby. Třídy kamenů dědí od abstraktní třídy APiece, která implementuje společné chování kamenů.

Třída ChessboardMouseAdapter umožňuje přesouvat jednotlivé kameny na šachovnici klikáním či tažením myší. Tato třída zaznamenává kliknutí tlačítka myši, pohyb myší a uvolnění tlačítka, a na základě těchto událostí provádí přesun kamenů. Třída kromě toho také při zvednutí kamenu nechá zobrazit všechny jeho možné pohyby, které jsou v souladu s pravidly.

Kromě těchto hlavních tříd se v programu nacházejí i další pomocné třídy. Třída Player reprezentuje hráče, jeho kameny a operace s ním související. Je možné nastavit, aby za hráče hrál počítač, přičemž je možné využít režimu náhodných možných pohybů či chytrého módu, ve kterém za hráče hraje šachový engine Stockfish, který je v programu reprezentován třídou Stockfish.

V programu je využita také třída PiecePosition, která umožňuje konvertovat a uchovávat pozici na šachovnici, výčet PieceColor, který uchovává barvu hráče a výčet StartPosition, který označuje hráčovu startovní pozici. Výčet Theme uchovává 4 barevné módy šachovnice i kamenů.

Funkce programu

Po spuštění se program automaticky pokusí zjistit barevné schéma a rozložení prvků operačního systému a pokusí se mu přizpůsobit. Ihned po spuštění programu se spustí nová hra, takže je možné začít ihned hrát. Horní část okna programu obsahuje hlavní nabídku, ve které je možné nastavit jeho chování. Níže najdete podrobný popis jednotlivých položek nabídky.

  • Hra

    • Start new game - začne novou hru
    • Load from FEN - začne novou hru s načtenou pozicí podle zadané Forsyth-Edwardsovy notace
    • Get current FEN - vypíše aktuální stav pomocí Forsyth-Edwardsovy notace
    • Statistics- otevře nové okno s grafem znázorňujícím dobu jednotlivých tahů obou hráčů
    • Blind mode - aktivuje slepý mód, po jehož zapnutí jsou vidět pouze kameny hráče na tahu
  • Vzhled

    • tato položka obsahuje 4 barevné varianty: klasickou (classic), zelenou (green), žlutou (yellow) a červenou (red)
  • CPU

    • Disabled - nastaví, aby za hráče nehrál počítač
    • Automatic random - nastaví, aby za hráče hrál počítač náhodnými tahy
    • Automatic smart - nastaví, aby za hráče hrál počítač pomocí enginu Stockfish
  • Export

    • Export as SVG - vytvoří vektorový SVG obrázek aktuálního stavu šachovnice a uloží jej do složky s programem jako chess.svg
    • Export as PNG - vytvoří rastrový PNG obrázek aktuálního stavu šachovnice a uloží jej do složky s programem jako chess.png

Použití Stockfish

Program umožňuje nastavit, aby za libovolného hráče hrál šachový engine Stockfish, pomocí nabídky v horní části okna pod položkou CPU. Stockfish není v programu přibalen, je proto potřeba si jej doinstalovat, na což vás program před aktivací enginu upozorní.

Instalaci enginu lze provést pomocí stažení jeho spustitelného souboru do složky s programem nebo do systémové cesty pod názvem stockfish nebo stockfish.exe. Je možné jej nainstalovat také pomocí správce balíčků, pokud to používaný operační systém podporuje.

Po instalaci enginu by jej měl být program schopen najít a využít ke hraní.

Funkce šachovnice

Šachovnice implementovaná v tomto programu obsahuje kromě základního vykreslování a přesouvání kamenů pomocí myši také následující funkce.

  • přesun kamenů pomocí tažení i klikání
  • zobrazení možných tahů a jejich validace podle pravidel
  • animace pohybu i sebrání kamenu
  • informování o matu a patu formou dialogového okna
  • restart hry bez nutnosti zavření programu
  • zvýraznění posledního provedeného tahu (dvou polí) modrou barvou

Omezení

V této verzi programu je vyřešena většina omezení, která se vyskytovaly v předchozí verzi. Odstranit je pomohla především implementace pravidel, která nyní nedovoluje zahrát žádný tah, který by s nimi byl v rozporu. Hráči také nemohou hrát tak, aby dostali svého krále do šachu a to ani v případě složitějších pravidel, kterými je například braní mimochodem.

Informaci o tom, jestli nastal mat či pat se hráči nyní dozví pomocí dialogového okna. V případě šachu jsou nuceni zobrazenými možnými tahy hrát pouze tak, aby šach odvrátili.

Stále se však v programu nachází některá malá omezení, která nejsou vyřešena, jako je například chybějící kompletní proměna.

Závěr

Info: Tento projekt jsem tvořil jako semestrální práci do předmětu KIV/UPG na FAV ZČU.

Během zpracovávání semestrální práce jsem měl příležitost získat praktické zkušenosti s knihovnami Swing, JFreeSVG a JFreeChart a osvojit si jejich základy a zároveň se blíže seznámit s problematikou vykreslování grafického obsahu nejen v počítačových programech.

Semestrální práci považuji za přínosnou, jelikož mě především při implementaci pravidel postavila před některé druhy problémů, se kterými jsem se dosud neměl příležitost setkat a přiměla mě k vymýšlení jejich vhodných řešení. Při vypracovávání práce jsem se také více seznámil s pravidly šachů a rozšířil si obzory i v tomto směru.