Files
2026-10-19 04:15:55 +02:00

4.4 KiB
Raw Permalink Blame History

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, Lichess) 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:

+-------------------------------------------------------------+
| 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

UML diagram