# aaronhovt/capstone-chess architecture

> Architecture diagram of the GitHub repository aaronhovt/capstone-chess, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/aaronhovt/capstone-chess
- Repository: https://github.com/aaronhovt/capstone-chess

## Overview

Capstone Chess is a Java chess engine with a Swing interface, a UCI protocol adapter, and validation/match tools. In the interactive workflow, a player uses the GUI to configure and play a game; the engine represents the position, generates legal moves, searches and evaluates candidate moves, then returns a move for display. UCI provides a separate external control path for setting positions and search limits. The README documents perft, tactical/evaluation checks, opening-book verification, and engine matches. Excerpts are partial, so uncertain internal call wiring is omitted.

Main entry points: [`src/engine/forBoard/Board.java`](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forBoard/Board.java) (Position Board), [`src/engine/forPlayer/forAI/AlphaBeta.java`](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forPlayer/forAI/AlphaBeta.java) (Alpha-Beta Search), [`src/engine/forGUI/Table.java`](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forGUI/Table.java) (Swing Table), [`src/engine/forUCI/UciEngine.java`](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forUCI/UciEngine.java) (UCI Adapter)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontends["User Interfaces"]
  node_gui["Swing Table<br/>[Table.java]"]
  node_gui_setup["Game Setup<br/>[GameSetup.java]"]
  node_gui_history["Game History"]
  node_driver["GUI Entry<br/>[engineDriver.java]"]
  node_uci["UCI Adapter<br/>[UciEngine.java]"]
end

subgraph group_rules["Chess Model"]
  node_board["Position Board<br/>[Board.java]"]
  node_moves["Legal Moves<br/>[Move.java]"]
  node_pieces["Chess Pieces<br/>[Piece.java]"]
  node_players["Side To Move<br/>[Player.java]"]
  node_fen["FEN Parser<br/>[FenParser.java]"]
  node_hashing["Position Hashing"]
end

subgraph group_search["Search And Evaluation"]
  node_search_engine["Alpha-Beta Search<br/>[AlphaBeta.java]"]
  node_strategy["Move Strategy<br/>[MoveStrategy.java]"]
  node_evaluation["Position Evaluators"]
  node_state["Game State Detection"]
end

subgraph group_validation["Validation Tools"]
  node_perft["Perft Validation<br/>[PerftSuite.java]"]
  node_tactical["Tactical Tests<br/>[TacticalSuite.java]"]
  node_evaluation_suite["Evaluation Checks"]
  node_opening_book["Opening Book Check<br/>[OpeningBook.java]"]
  node_selfplay["Self-Play Match<br/>[SelfPlayMatch.java]"]
  node_process["Engine Process<br/>[EngineProcess.java]"]
end

node_player(("Chess Player"))
node_uci_client(("Chess GUI / Runner"))

node_player -->|"plays through"| node_gui
node_driver -->|"opens"| node_gui
node_gui -->|"configures"| node_gui_setup
node_gui -->|"uses position"| node_board
node_gui -->|"requests move"| node_search_engine
node_gui -->|"updates history"| node_gui_history
node_uci_client -->|"sends commands"| node_uci
node_uci -->|"sets position"| node_board
node_uci -->|"parses FEN"| node_fen
node_uci -->|"starts search"| node_search_engine
node_uci -->|"resolves moves"| node_moves
node_board -->|"tracks turns"| node_players
node_board -->|"holds pieces"| node_pieces
node_players -->|"provides legal moves"| node_moves
node_search_engine -->|"implements strategy"| node_strategy
node_search_engine -->|"scores positions"| node_evaluation
node_search_engine -->|"checks outcomes"| node_state
node_search_engine -->|"searches positions"| node_board
node_board -->|"updates hash"| node_hashing
node_perft -->|"counts move trees"| node_board
node_tactical -->|"checks search"| node_search_engine
node_evaluation_suite -->|"checks scores"| node_evaluation
node_opening_book -->|"validates openings"| node_board
node_selfplay -->|"runs engines"| node_process
node_process -->|"speaks UCI"| node_uci

click node_gui "https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forGUI/Table.java"
click node_gui_setup "https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forGUI/GameSetup.java"
click node_gui_history "https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forGUI/GameHistoryPanel.java"
click node_driver "https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/engineDriver.java"
click node_uci "https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forUCI/UciEngine.java"
click node_board "https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forBoard/Board.java"
click node_moves "https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forBoard/Move.java"
click node_pieces "https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forPiece/Piece.java"
click node_players "https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forPlayer/Player.java"
click node_fen "https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forTesting/FenParser.java"
click node_search_engine "https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forPlayer/forAI/AlphaBeta.java"
click node_strategy "https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forPlayer/forAI/MoveStrategy.java"
click node_evaluation "https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forPlayer/forAI/BoardEvaluator.java"
click node_state "https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forPlayer/forAI/GameStateDetector.java"
click node_hashing "https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forBoard/ZobristHashing.java"
click node_perft "https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forTesting/PerftSuite.java"
click node_tactical "https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forTesting/TacticalSuite.java"
click node_evaluation_suite "https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forTesting/EvaluationSuite.java"
click node_opening_book "https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forTesting/OpeningBook.java"
click node_selfplay "https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forTesting/SelfPlayMatch.java"
click node_process "https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forTesting/EngineProcess.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_gui,node_gui_setup,node_gui_history,node_driver,node_uci,node_uci_client toneBlue
class node_board,node_moves,node_pieces,node_players,node_fen,node_hashing toneAmber
class node_search_engine,node_strategy,node_evaluation,node_state toneMint
class node_perft,node_tactical,node_evaluation_suite,node_opening_book,node_selfplay,node_process toneRose
class node_player toneIndigo
```

## Components

### User Interfaces

- [Swing Table](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forGUI/Table.java): `src/engine/forGUI/Table.java`
- [Game Setup](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forGUI/GameSetup.java): `src/engine/forGUI/GameSetup.java`
- [Game History](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forGUI/GameHistoryPanel.java): `src/engine/forGUI/GameHistoryPanel.java`
- [GUI Entry](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/engineDriver.java): `src/engine/engineDriver.java`
- [UCI Adapter](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forUCI/UciEngine.java): `src/engine/forUCI/UciEngine.java`

### Chess Model

- [Position Board](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forBoard/Board.java): `src/engine/forBoard/Board.java`
- [Legal Moves](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forBoard/Move.java): `src/engine/forBoard/Move.java`
- [Chess Pieces](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forPiece/Piece.java): `src/engine/forPiece/Piece.java`
- [Side To Move](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forPlayer/Player.java): `src/engine/forPlayer/Player.java`
- [FEN Parser](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forTesting/FenParser.java): `src/engine/forTesting/FenParser.java`
- [Position Hashing](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forBoard/ZobristHashing.java): `src/engine/forBoard/ZobristHashing.java`

### Search And Evaluation

- [Alpha-Beta Search](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forPlayer/forAI/AlphaBeta.java): `src/engine/forPlayer/forAI/AlphaBeta.java`
- [Move Strategy](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forPlayer/forAI/MoveStrategy.java): `src/engine/forPlayer/forAI/MoveStrategy.java`
- [Position Evaluators](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forPlayer/forAI/BoardEvaluator.java): `src/engine/forPlayer/forAI/BoardEvaluator.java`
- [Game State Detection](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forPlayer/forAI/GameStateDetector.java): `src/engine/forPlayer/forAI/GameStateDetector.java`

### Validation Tools

- [Perft Validation](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forTesting/PerftSuite.java): `src/engine/forTesting/PerftSuite.java`
- [Tactical Tests](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forTesting/TacticalSuite.java): `src/engine/forTesting/TacticalSuite.java`
- [Evaluation Checks](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forTesting/EvaluationSuite.java): `src/engine/forTesting/EvaluationSuite.java`
- [Opening Book Check](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forTesting/OpeningBook.java): `src/engine/forTesting/OpeningBook.java`
- [Self-Play Match](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forTesting/SelfPlayMatch.java): `src/engine/forTesting/SelfPlayMatch.java`
- [Engine Process](https://github.com/aaronhovt/capstone-chess/blob/master/src/engine/forTesting/EngineProcess.java): `src/engine/forTesting/EngineProcess.java`

### Other components

- **Chess Player**
- **Chess GUI / Runner**

## Connections

- Chess Player → Swing Table: plays through
- GUI Entry → Swing Table: opens
- Swing Table → Game Setup: configures
- Swing Table → Position Board: uses position
- Swing Table → Alpha-Beta Search: requests move
- Swing Table → Game History: updates history
- Chess GUI / Runner → UCI Adapter: sends commands
- UCI Adapter → Position Board: sets position
- UCI Adapter → FEN Parser: parses FEN
- UCI Adapter → Alpha-Beta Search: starts search
- UCI Adapter → Legal Moves: resolves moves
- Position Board → Side To Move: tracks turns
- Position Board → Chess Pieces: holds pieces
- Side To Move → Legal Moves: provides legal moves
- Alpha-Beta Search → Move Strategy: implements strategy
- Alpha-Beta Search → Position Evaluators: scores positions
- Alpha-Beta Search → Game State Detection: checks outcomes
- Alpha-Beta Search → Position Board: searches positions
- Position Board → Position Hashing: updates hash
- Perft Validation → Position Board: counts move trees
- Tactical Tests → Alpha-Beta Search: checks search
- Evaluation Checks → Position Evaluators: checks scores
- Opening Book Check → Position Board: validates openings
- Self-Play Match → Engine Process: runs engines
- Engine Process → UCI Adapter: speaks UCI
