Extended README & small code change

This commit is contained in:
Filip Znachor 2023-03-26 12:30:35 +02:00
parent 2a418fe0d9
commit a3e558e55c
2 changed files with 16 additions and 2 deletions

View file

@ -9,3 +9,17 @@ Hra je naprogramována v programovacím jazyce Java za použití grafické kniho
Šachovnice je v programu reprezentována třídou `Chessboard`, která vykresluje jednotlivá políčka a uchovává dvourozměrné pole kamenů na ní umístěných. Kameny jsou tvořeny třídami, které dědí od abstraktní třídy `AbstractPiece` a implementují rozhraní `IPiece`.
Přesouvání kamenů je umožněno pomocí kliknutí a přesunutí myší, které je řešeno třídou `ChessboardMouseAdapter`. Tato třída zaznamenává kliknutí myší, pohyb myši a uvolnění tlačítka, a na základě těchto událostí provádí přesun kamenů.
## Omezení
Současná implementace má několik omezení, která je potřeba před finální verzí vyřešit. Aktuálně není kontrolováno, jestli daný hráč smí konkrétní přesun kamene provést, takže může hrát neplatné tahy i víckrát za sebou.
Kromě správnosti tahů nejsou implementována ani složitější pravidla hry, není tedy možné provést en passant (braní mimochodem), rošádu ani proměnu pěšce. Program nekontroluje ani to, zda je některý z hráčů v šachu či matu nebo nastala remíza. V tuto chvíli také není možné, aby hráč navrhl remízu nebo se vzdal.
## Možná vylepšení
V budoucnu je možné kromě zmíněných omezeních implementovat i další funkce, jako je například hra na čas či přesun jednotlivých kamenů kliknutím na původní a nové pole společně s grafickým znázorněním, kam je možné kámen přesunout.
V dalších verzích je také možné přidat ukládání všech odehraných her a jednotlivých tahů, aby si uživatelé mohli projít předchozí hry krok po kroku.
Přidána by mohla být i možnost uložení aktuálního stavu šachovnice do formátu PNG či SVG nebo PDF. Tato možnost by byla dostupná i u přehrávání již odehraných her.

View file

@ -125,8 +125,8 @@ public class Chessboard extends JPanel {
for (IPiece[] pieces2: pieces) {
for (IPiece piece : pieces2) {
if(piece != null && piece != floating) {
double xOffset = 20*pieceScale + SQUARE_SIZE *piece.getX();
double yOffset = 20*pieceScale + SQUARE_SIZE *piece.getY();
double xOffset = 20*pieceScale + SQUARE_SIZE*piece.getX();
double yOffset = 20*pieceScale + SQUARE_SIZE*piece.getY();
g2.translate(xOffset, yOffset);
g2.scale(pieceScale, pieceScale);
piece.paint(g2);