Compare commits
2
Commits
52e9baabae
...
e9f763877c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e9f763877c | ||
|
|
a3b8a267e8 |
No files matched your search
@@ -1,3 +1,79 @@
|
||||
# gui-chess
|
||||
# Sakk alkalmazás (gui-chess)
|
||||
Programozás alapjai 3 – Nagy házi feladat specifikáció
|
||||
|
||||
A programozás alapjai 3 nagyházi feladat; A programozás alapjai 2 nagyházi feladata átemelve JAVA környezetbe és GUI-val megvalósítva.
|
||||
## 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
|
||||
<p align="center">
|
||||
<img src="assets/UML.svg" alt="Architecture Diagram" width="600" />
|
||||
</p>
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Do not edit this file with editors other than draw.io -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="background: #ffffff; background-color: var(--ge-dark-color, #121212); color-scheme: dark;" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="2502px" height="1523px" viewBox="0 0 2502 1523" content="<mxfile host="app.diagrams.net" scale="1" border="15">
 <diagram id="C5RBs43oDa-KdzZeNtuy" name="Oldal-1">
 <mxGraphModel dx="2603" dy="2222" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
 <root>
 <mxCell id="WIyWlLk6GJQsqaUBKTNV-0" />
 <mxCell id="WIyWlLk6GJQsqaUBKTNV-1" parent="WIyWlLk6GJQsqaUBKTNV-0" />
 <mxCell id="_r-HP5b758gAeptMtzsk-38" parent="WIyWlLk6GJQsqaUBKTNV-1" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;fillColor=default;" value="" vertex="1">
 <mxGeometry height="880" width="1750" x="-500" y="-370" as="geometry" />
 </mxCell>
 <mxCell id="_r-HP5b758gAeptMtzsk-0" parent="WIyWlLk6GJQsqaUBKTNV-1" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;«Abstract»&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Piece&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot; style=&quot;border-style:solid;&quot;&gt;&lt;p style=&quot;margin:0px;margin-left:4px;&quot;&gt;- PieceColor: Color&lt;/p&gt;&lt;hr size=&quot;1&quot; style=&quot;border-style:solid;&quot;&gt;&lt;p style=&quot;margin:0px;margin-left:4px;&quot;&gt;+ Piece(Color)&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;&quot;&gt;+ getMoveDomain() : Direction[]&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;&quot;&gt;+ getColor() : Color&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;&quot;&gt;+ getSymbol() : Char&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;&quot;&gt;+ getType() : Type&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;&quot;&gt;+ hasMoved() : bool&lt;/p&gt;" vertex="1">
 <mxGeometry height="170" width="260" x="250" y="-30" as="geometry" />
 </mxCell>
 <mxCell id="_r-HP5b758gAeptMtzsk-3" parent="WIyWlLk6GJQsqaUBKTNV-1" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;«Final»&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Pawn&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot; style=&quot;border-style:solid;&quot;&gt;&amp;nbsp;+ getMoveDomain() : Direction[]" vertex="1">
 <mxGeometry height="70" width="176" x="-486" y="390" as="geometry" />
 </mxCell>
 <mxCell id="_r-HP5b758gAeptMtzsk-4" parent="WIyWlLk6GJQsqaUBKTNV-1" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;«Final»&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;King&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot; style=&quot;border-style:solid;&quot;&gt;&amp;nbsp;+ getMoveDomain() : Direction[]" vertex="1">
 <mxGeometry height="70" width="176" x="-176" y="390" as="geometry" />
 </mxCell>
 <mxCell id="_r-HP5b758gAeptMtzsk-5" parent="WIyWlLk6GJQsqaUBKTNV-1" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;«Final»&lt;/p&gt;&lt;p style=&Line truncated
|
||||
|
After Width: | Height: | Size: 850 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.3 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.2 MiB |
Reference in new issue
Block a user