Skip to content

dariadraghici/Java-Chess-Game

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Descrierea implementării ------------------------------------------------------------------- În proiectul meu de șah cu interfață grafică, am creat o aplicație completă care duce utilizatorul prin toate etapele jocului, de la prima autentificare până la finalizarea unei partide.

Main.java și GameEngine.java

Pornesc de la Main.java,fereastra principală care folosește CardLayout pentru a comuta între diferite ecrane. GameEngine este implementat ca Singleton, asigurând o singură instanță în toată aplicația pentru managementul datelor (utilizatori, jocuri, utilizator curent logat).

GameEngine gestionează:

A. Citirea/scrierea datelor JSON (similar cu read()/write() din descrierea inițială) B. Autentificarea (login()) și înregistrarea (newAccount()) utilizatorilor C. Crearea de jocuri noi și managementul jocurilor existente D. Actualizarea punctajelor utilizatorilor (Xnou = X + Y ± 150/300)

User (contul cu jocuri si puncte)

A. User reprezinta un cont din aplicatie: email (String), parola (String), lista de jocuri in derulare (List) si punctaj total acumulat (int). B. addGame(Game game) adauga un joc nou in lista user-ului C. removeGame(Game game) scoate jocul din lista D. getActiveGames() returneaza lista de Game asociate cu utilizatorul E. getPoints() si setPoints() pentru managementul punctajului

LoginPanel și RegisterPanel

Interfața split în două: branding în stânga, formulare în dreapta. Validarea verifică format email, coincidența parolelor, și dacă email-ul nu e deja folosit prin apeluri către GameEngine.

MenuPanel

Afișează avatar personalizat cu inițiala utilizatorului, statistici (puncte totale, jocuri active) și butoane: Joc Nou, Continuă Joc, Logout. La Joc Nou, un dialog permite alegerea nickname-ului și culorii (alb/negru).

ContinuePanel și GameOptionsPanel

ContinuePanel afișează jocurile neterminate cu ID, al cui e rândul și punctele acumulate. GameOptionsPanel oferă trei opțiuni prin Factory Pattern pentru generarea simbolurilor: • View Details: afișează tabla curentă (rotită corect), istoric mutări, piese capturate • Continue Game: redirecționează la GamePanel • Exit: întoarce la listă

GamePanel

Interfață împărțită în trei zone:

  1. Sus: logo, indicator rând curent, puncte
  2. Mijloc: tabla de șah (ChessGUIPanel)
  3. Dreapta: istoric mutări + piese capturate + butoane control

Observer Pattern este implementat prin interfața GameObserver cu metode: • onMoveMade() - actualizează tabla și istoricul • onPieceCaptured() - actualizează listele de piese • onPlayerSwitch() - schimbă indicatorul rândului

Strategy Pattern apare la colorarea pieselor capturate: • CapturedColorStrategy - pentru piesele capturate de jucător • LostColorStrategy - pentru piesele pierdute de jucător

ChessGUIPanel

Panou 8x8 butoane care implementează tabla vizuală. Fiecare pătrat are culoare alternantă și afișează fie imaginea piesei, fie simbol Unicode prin PieceSymbolFactory. Conversia coordonatelor ecran↔șah permite rotirea tablei pentru perspectiva negrelor.

Game (logica jocului)

Game gestionează un meci complet: A. start() - inițializează tabla și setează jucătorul care începe B. resume() - reia joc din starea salvată C. switchPlayer() - comută între jucători D. checkForCheckMate() - verifică stare de șah-mat E. addMove() - înregistrează mutări în istoric

Board (tabla de joc)

Board gestionează piesele pe tablă prin TreeSet<ChessPair<Position, Piece>>: A. initialize() - plasează piesele în pozițiile inițiale B. movePiece() - execută mutări cu validare C. getPieceAt() - returnează piesa de la o poziție D. isValidMove() - validează mutări conform regulilor

Player (jucător uman sau computer)

Player are atributul de culoare, liste de piese capturate și punctaj curent (Y): A. makeMove() - execută mutări cu validare prin Board B. getCapturedPieces() - returnează piese capturate C. getPoints()/setPoints() - gestionează punctajul curent

Piece și piesele concrete

Clasa abstractă Piece implementează ChessPiece și este extinsă de: • King, Queen, Rook, Bishop, Knight, Pawn Fiecare implementează getPossibleMoves() conform regulilor specifice de șah.

PieceFactory și PieceSymbolFactory

Factory Pattern separat pentru: • PieceFactory - creează obiectele King, Queen, etc. • PieceSymbolFactory - generează simbolurile Unicode pentru afișare La promovarea pionului, un dialog permite alegerea piesei de înlocuire.

Position și ChessPair

Position reprezintă coordonate pe tablă (A-H, 1-8) cu metode pentru conversie și comparare. ChessPair este o pereche generica (cheie=Position, valoare=Piece) pentru reprezentarea pieselor pe tablă.

VictoryPanel și DefeatPanel

Ecrane finale care afișează rezultatul, punctele obținute, bonusuri și total. Butoanele "Play Again" și "Exit to Menu" oferă navigare după finalizarea jocului.

JsonReaderUtil

Gestionează serializarea/deserializarea JSON pentru accounts.json și games.json: • La citire: reconstruiește obiectele User și Game cu toate relațiile • La scriere: salvează starea curentă în formatul specificat

Excepții

• InvalidCommandException - pentru comenzi invalide în interfață • InvalidMoveException - pentru mutări ilegale pe tablă

Pattern-uri de design implementate:
  1. Singleton - GameEngine

  2. Observer - actualizare interfață în timp real

  3. Strategy - colorare piese capturate

  4. Factory - creare piese și simboluri

  5. CardLayout - management ferestre aplicație

    Fluxul aplicației:

  6. Main → Login/Register → Menu

  7. Menu → Game nou sau Continuare joc → GamePanel

  8. GamePanel → Victory/Defeat → Menu

  9. Persistentă prin JSON la fiecare modificare

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages