diff --git a/README.md b/README.md index 7d25ec7..468567e 100644 --- a/README.md +++ b/README.md @@ -36,3 +36,44 @@ A projekt célja egy teljes körű sakkalkalmazás implementálása Java nyelven - 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 +

diff --git a/assets/UML.svg b/assets/UML.svg new file mode 100644 index 0000000..e537f9d --- /dev/null +++ b/assets/UML.svg @@ -0,0 +1,4 @@ + + + +

«Abstract»

Piece


- PieceColor: Color


+ Piece(Color)

+ getMoveDomain() : Direction[] 

+ getColor() : Color

+ getSymbol() : Char

+ getType() : Type

+ hasMoved() : bool

«Final»

Pawn


 + getMoveDomain() : Direction[]

«Final»

King


 + getMoveDomain() : Direction[]

«Final»

Queen


 + getMoveDomain() : Direction[]

«Final»

Rook


 + getMoveDomain() : Direction[]

«Final»

Bishop


 + getMoveDomain() : Direction[]

«Final»

Knight


 + getMoveDomain() : Direction[]

«Enum»

Type


Pawn
King
Queen

Rook

Bishop

Knight

«Enum»

Color


 White
 Black
Use

«Final»

ChessBoard


- Board: Piece[64]


+ ChessBoard()

+ getPiece(idx : int) : Piece

+ getPiece(x : int, y : int) : Piece

+ movePiece(from: int, to: int) : Optional<Move>

+ isCheck(color : Color) : bool

+ isCheckMate(color : Color) : bool

1
0..64
Use
Model
Controller

«Final»
ChessGame


- board: ChessBoard
- state: GameState

- view: GameView

- history: List<Move>


+ start(): void
+ processTurn(from: int, to: int) : void

+ getGameState() : GameState


- endTurn() : void

- switchPlayer() : void

- checkGameEnd() : void

«Final»

«Record»
GameState


activePlayer: Color
status: GameStatus


1
1

«Enum»

GameStatus


 ACTIVE
 WHITE_WINS
 BLACK_WINS
 STALEMATE
View

«Interface»
GameView


+ displayBoard(board: ChessBoard): void
+ showMessage(msg: String) : void

+ showError(errorMsg: String) : void

+ showGameOver(status: GameStatus) : void

+ setController(controller: ChessGame) : void

ConsoleView


- controller: ChessGame

- scanner: Scanner


+ displayBoard(board: ChessBoard): void
+ showMessage(msg: String) : void

+ showError(errorMsg: String) : void

+ showGameOver(status: GameStatus) : void

+ setController(controller: ChessGame) : void

SwingView


- controller: ChessGame

- frame: JFrame

- boardPanel: JPanel

- squares: JButton[64]


+ displayBoard(board: ChessBoard): void
+ showMessage(msg: String) : void

+ showError(errorMsg: String) : void

+ showGameOver(status: GameStatus) : void

+ setController(controller: ChessGame) : void

«implements»
«implements»

«Final»

«Record»

Move


 start: int
 end: int

 isCapture: bool

 isCastle: bool

 isEnPassant: bool

 isCheck: bool

  movedPiece: Type
  promotedTo: Type
  capturedPieceColor: Color
  capturedPieceType: Type
1
*
Service

PGNWriter


+ write(List<Move>): void

PGNReader


+ read(): List<Move>

Use
Use
\ No newline at end of file diff --git a/assets/UML_dark.png b/assets/UML_dark.png new file mode 100644 index 0000000..5329b99 Binary files /dev/null and b/assets/UML_dark.png differ diff --git a/assets/UML_light.png b/assets/UML_light.png new file mode 100644 index 0000000..ecd57e4 Binary files /dev/null and b/assets/UML_light.png differ