# Sakk alkalmazás (gui-chess) Programozás alapjai 3 – Nagy házi feladat specifikáció ## 1. Célkitűzés A projekt célja egy teljes körű sakkalkalmazás implementálása Java nyelven. A feladat alapját a „Programozás alapjai 2” tárgyban készült C++ sakkmotor adja, melynek logikáját átemelve, az objektumorientált elveket és a Java nyelvi sajátosságait kihasználva egy grafikus felhasználói felülettel (GUI) és parancssori réteggel is rendelkező szoftver készül. ## 2. Funkcionális követelmények ### 2.1 Játékszabályok és játékmódok - Szabályrendszer: A standard sakk szabályainak teljes körű ellenőrzése és betartatása (szabályos lépések, sakk, matt, patt helyzetek detektálása, sáncolás, en passant és gyalogátváltozás). - Játékos módok: Lokális kétfős játék (Hotseat mód), ahol a felek felváltva lépnek ugyanazon a felületen. - Lépésvisszavonás és elemzés: Lehetőség a lépések visszavonására (Undo) és előreléptetésére. ### 2.2 Felhasználói felületek - Grafikus felület (GUI): - Interaktív sakktábla (kattintásos vagy drag-and-drop bábulépéssel). - Vizuális visszajelzés az érvényes lépésekről és az aktuális sakkhelyzetről. - Lépéslista (Move history) megjelenítése algebrai jelöléssel. - Konzolos felület (CLI): - A sakktábla kirajzolása terminálban szöveges karakterekkel. - Lépések fogadása standard szöveges formátumban (pl. `e2e4`). ### 2.3. Adatkezelés és perzisztencia - PGN (Portable Game Notation) támogatás: - Külső forrásból származó (pl. [Chess.com](https://chess.com), [Lichess](https://lichess.org)) standard `.pgn` formátumú játszmák beolvasása, elemzése és visszajátszása. - Az aktuálisan játszott parti kimentése szabványos PGN fájlba a metaadatokkal (dátum, felek nevei, eredmény) együtt. - Állásmentés (FEN): Az aktuális táblaállás gyors betöltése és exportálása FEN (Forsyth–Edwards Notation) karakterlánccal. ## 3. Nem funkcionális követelmények és architektúra - Választott architektúra (MVC): - Model: A sakktábla állapota, szabályellenőrzés, bábuk reprezentációja és lépésgenerálás. A motor teljesen független a megjelenítéstől. - View: `Java Swing` komponensek és a CLI kirajzoló modul. - Controller: Eseménykezelők, amelyek a felhasználói beviteleket (GUI kattintás, CLI parancs) továbbítják a motornak. - Perzisztencia / Fájlkezelés: Szabványos Java I/O, kivételkezeléssel. - Tesztelhetőség: A játékmotor üzleti logikáját (speciális lépések, matt detektálás, PGN parser) lefedő JUnit egységtesztek. ## 4. Terv ### 4.1 Szereplők - Játékos: Az a személy aki játszmát kezdeményez, lépéseket tesz, kezeli a játék felületét. - Fájlrendszer: Másodlagos szereplő. PGN/FEN állományokat kezel. ### 4.2 Használati esetek (Use Cases): - Új játszma indítása - Lépés megtétele a táblán - Lehetséges lépések megtekintése - Lépés visszavonása - Játszma mentése (PGN formátumban) - Játszma betöltése és visszajátszása (PGN formátumból) - Táblaállás betöltése/mentése (FEN formátumból/ban) ### 4.3 GUI váza: ```text +-------------------------------------------------------------+ | Menüsor: [Fájl (Új, Betöltés, Mentés)] [Nézet] [Segítség] | +-------------------------------------------------------------+ | +---------------------------+ +------------------------+ | | | | | Státusz / Soron lévő: | | | | | | Fehér | | | | | | Sakk jelzés: Nincs | | | | | +------------------------+ | | | | | Lépéstörténet: | | | | SAKKTÁBLA | | 1. e4 e5 | | | | (8 x 8) | | 2. Nf3 Nc6 | | | | | | 3. Bb5 ... | | | | | +------------------------+ | | | | | Vezérlők: | | | | | | [< Előző] [Következő >]| | | | | | [Undo] | | | +---------------------------+ +------------------------+ | +-------------------------------------------------------------+ ``` ### 4.4 UML

Architecture Diagram