# m-elkhou/tetris architecture

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

- Interactive diagram: https://gitdiagram.com/m-elkhou/tetris
- Repository: https://github.com/m-elkhou/tetris

## Overview

This is a Java Swing/AWT desktop Tetris game. The player selects a difficulty, plays by placing falling tetrominoes to clear lines, and can view the resulting score and statistics; high scores are maintained by difficulty. The graph also preserves the documented options, help, and about screens. Several links rely on the SOURCE INDEX reference lists rather than inspected call sites, so uncertain gameplay connections are dashed and uncited.

Main entry points: [`src/Game/GamePanel.java`](https://github.com/m-elkhou/tetris/blob/master/src/Game/GamePanel.java) (Game board), [`src/Game/Vue.java`](https://github.com/m-elkhou/tetris/blob/master/src/Game/Vue.java) (Application shell), [`src/Game/HighScoreManager.java`](https://github.com/m-elkhou/tetris/blob/master/src/Game/HighScoreManager.java) (Score manager), [`src/Game/StatsPanel.java`](https://github.com/m-elkhou/tetris/blob/master/src/Game/StatsPanel.java) (Session statistics)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Desktop interface"]
  node_launcher["Window launcher<br/>[WindowLanch.java]"]
  node_shell["Application shell<br/>[Vue.java]"]
  node_levels["Level selection<br/>[ChooseLevel.java]"]
  node_options["Game options<br/>[Option.java]"]
  node_navigation["Game controls<br/>[NavigationBar.java]"]
end

subgraph group_play["Game session"]
  node_game["Game board<br/>[GamePanel.java]"]
  node_piece["Tetrominoes<br/>[Mino.java]"]
  node_ghost["Landing preview<br/>[Ghost.java]"]
  node_piecequeue["Piece queue<br/>[MinoQueue.java]"]
  node_queueview["Queue display<br/>[QueuePanel.java]"]
  node_elementview["Game element view"]
  node_stats["Session statistics<br/>[StatsPanel.java]"]
  node_timer["Elapsed time<br/>[Timer.java]"]
end

subgraph group_results["Results and records"]
  node_gameover["Game-over summary<br/>[GameOver.java]"]
  node_score["Score record<br/>[Score.java]"]
  node_highscores["High-score screen<br/>[HighScore.java]"]
  node_scoremanager["Score manager"]
  node_scorefiles[("Difficulty score files")]
end

subgraph group_support["Information screens"]
  node_help["Help screen<br/>[Help.java]"]
  node_about["About screen<br/>[About.java]"]
end

node_player(("Player"))

node_player -->|"starts game"| node_launcher
node_launcher -->|"opens interface"| node_shell
node_player -->|"chooses difficulty"| node_levels
node_shell -->|"creates"| node_levels
node_shell -.->|"creates"| node_game
node_levels -.->|"selects level"| node_game
node_shell -.->|"hosts"| node_options
node_shell -.->|"opens"| node_highscores
node_shell -.->|"hosts"| node_help
node_shell -.->|"hosts"| node_about
node_player -->|"plays"| node_game
node_game -.->|"uses pieces"| node_piece
node_game -.->|"uses preview"| node_ghost
node_game -.->|"uses queue"| node_piecequeue
node_queueview -->|"renders pieces"| node_elementview
node_queueview -->|"displays pieces"| node_piece
node_stats -->|"renders metrics"| node_elementview
node_stats -->|"creates clock"| node_timer
node_game -.->|"updates session"| node_stats
node_game -.->|"shows summary"| node_gameover
node_gameover -->|"uses score"| node_score
node_highscores -->|"loads scores"| node_scoremanager
node_scoremanager -->|"orders records"| node_score
node_scoremanager -->|"reads and writes"| node_scorefiles
node_player -->|"consults"| node_help
node_player -->|"configures game"| node_options

click node_launcher "https://github.com/m-elkhou/tetris/blob/master/src/Game/WindowLanch.java"
click node_shell "https://github.com/m-elkhou/tetris/blob/master/src/Game/Vue.java"
click node_levels "https://github.com/m-elkhou/tetris/blob/master/src/Game/ChooseLevel.java"
click node_options "https://github.com/m-elkhou/tetris/blob/master/src/Game/Option.java"
click node_navigation "https://github.com/m-elkhou/tetris/blob/master/src/Game/NavigationBar.java"
click node_game "https://github.com/m-elkhou/tetris/blob/master/src/Game/GamePanel.java"
click node_piece "https://github.com/m-elkhou/tetris/blob/master/src/Game/Mino.java"
click node_ghost "https://github.com/m-elkhou/tetris/blob/master/src/Game/Ghost.java"
click node_piecequeue "https://github.com/m-elkhou/tetris/blob/master/src/Game/MinoQueue.java"
click node_queueview "https://github.com/m-elkhou/tetris/blob/master/src/Game/QueuePanel.java"
click node_elementview "https://github.com/m-elkhou/tetris/blob/master/src/Game/GameElementPanel.java"
click node_stats "https://github.com/m-elkhou/tetris/blob/master/src/Game/StatsPanel.java"
click node_timer "https://github.com/m-elkhou/tetris/blob/master/src/Game/Timer.java"
click node_gameover "https://github.com/m-elkhou/tetris/blob/master/src/Game/GameOver.java"
click node_score "https://github.com/m-elkhou/tetris/blob/master/src/Game/Score.java"
click node_highscores "https://github.com/m-elkhou/tetris/blob/master/src/Game/HighScore.java"
click node_scoremanager "https://github.com/m-elkhou/tetris/blob/master/src/Game/HighScoreManager.java"
click node_scorefiles "https://github.com/m-elkhou/tetris/tree/master/src/Game/text"
click node_help "https://github.com/m-elkhou/tetris/blob/master/src/Game/Help.java"
click node_about "https://github.com/m-elkhou/tetris/blob/master/src/Game/About.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_launcher,node_shell,node_levels,node_options,node_navigation toneBlue
class node_game,node_piece,node_ghost,node_piecequeue,node_queueview,node_elementview,node_stats,node_timer toneAmber
class node_gameover,node_score,node_highscores,node_scoremanager,node_scorefiles toneMint
class node_help,node_about toneRose
class node_player toneIndigo
```

## Components

### Desktop interface

- [Window launcher](https://github.com/m-elkhou/tetris/blob/master/src/Game/WindowLanch.java): `src/Game/WindowLanch.java`
- [Application shell](https://github.com/m-elkhou/tetris/blob/master/src/Game/Vue.java): `src/Game/Vue.java`
- [Level selection](https://github.com/m-elkhou/tetris/blob/master/src/Game/ChooseLevel.java): `src/Game/ChooseLevel.java`
- [Game options](https://github.com/m-elkhou/tetris/blob/master/src/Game/Option.java): `src/Game/Option.java`
- [Game controls](https://github.com/m-elkhou/tetris/blob/master/src/Game/NavigationBar.java): `src/Game/NavigationBar.java`

### Game session

- [Game board](https://github.com/m-elkhou/tetris/blob/master/src/Game/GamePanel.java): `src/Game/GamePanel.java`
- [Tetrominoes](https://github.com/m-elkhou/tetris/blob/master/src/Game/Mino.java): `src/Game/Mino.java`
- [Landing preview](https://github.com/m-elkhou/tetris/blob/master/src/Game/Ghost.java): `src/Game/Ghost.java`
- [Piece queue](https://github.com/m-elkhou/tetris/blob/master/src/Game/MinoQueue.java): `src/Game/MinoQueue.java`
- [Queue display](https://github.com/m-elkhou/tetris/blob/master/src/Game/QueuePanel.java): `src/Game/QueuePanel.java`
- [Game element view](https://github.com/m-elkhou/tetris/blob/master/src/Game/GameElementPanel.java): `src/Game/GameElementPanel.java`
- [Session statistics](https://github.com/m-elkhou/tetris/blob/master/src/Game/StatsPanel.java): `src/Game/StatsPanel.java`
- [Elapsed time](https://github.com/m-elkhou/tetris/blob/master/src/Game/Timer.java): `src/Game/Timer.java`

### Results and records

- [Game-over summary](https://github.com/m-elkhou/tetris/blob/master/src/Game/GameOver.java): `src/Game/GameOver.java`
- [Score record](https://github.com/m-elkhou/tetris/blob/master/src/Game/Score.java): `src/Game/Score.java`
- [High-score screen](https://github.com/m-elkhou/tetris/blob/master/src/Game/HighScore.java): `src/Game/HighScore.java`
- [Score manager](https://github.com/m-elkhou/tetris/blob/master/src/Game/HighScoreManager.java): `src/Game/HighScoreManager.java`
- [Difficulty score files](https://github.com/m-elkhou/tetris/tree/master/src/Game/text): `src/Game/text`

### Information screens

- [Help screen](https://github.com/m-elkhou/tetris/blob/master/src/Game/Help.java): `src/Game/Help.java`
- [About screen](https://github.com/m-elkhou/tetris/blob/master/src/Game/About.java): `src/Game/About.java`

### Other components

- **Player**

## Connections

- Player → Window launcher: starts game (evidence: `README.md`)
- Window launcher → Application shell: opens interface (evidence: `src/Game/WindowLanch.java`)
- Player → Level selection: chooses difficulty (evidence: `README.md`)
- Application shell → Level selection: creates (evidence: `src/Game/Vue.java`)
- Application shell → Game board: creates (evidence: `src/Game/Vue.java`)
- Level selection → Game board: selects level (evidence: `src/Game/ChooseLevel.java`)
- Application shell → Game options: hosts (evidence: `src/Game/Vue.java`)
- Application shell → High-score screen: opens (evidence: `src/Game/Vue.java`)
- Application shell → Help screen: hosts (evidence: `src/Game/Vue.java`)
- Application shell → About screen: hosts (evidence: `src/Game/Vue.java`)
- Player → Game board: plays (evidence: `README.md`)
- Game board → Tetrominoes: uses pieces (evidence: `src/Game/Mino.java`)
- Game board → Landing preview: uses preview (evidence: `src/Game/Ghost.java`)
- Game board → Piece queue: uses queue
- Queue display → Game element view: renders pieces (evidence: `src/Game/QueuePanel.java`)
- Queue display → Tetrominoes: displays pieces (evidence: `src/Game/QueuePanel.java`)
- Session statistics → Game element view: renders metrics (evidence: `src/Game/StatsPanel.java`)
- Session statistics → Elapsed time: creates clock (evidence: `src/Game/StatsPanel.java`)
- Game board → Session statistics: updates session
- Game board → Game-over summary: shows summary (evidence: `src/Game/GameOver.java`)
- Game-over summary → Score record: uses score (evidence: `src/Game/GameOver.java`)
- High-score screen → Score manager: loads scores (evidence: `src/Game/HighScore.java`)
- Score manager → Score record: orders records (evidence: `src/Game/HighScoreManager.java`)
- Score manager → Difficulty score files: reads and writes (evidence: `src/Game/HighScoreManager.java`)
- Player → Help screen: consults (evidence: `README.md`)
- Player → Game options: configures game (evidence: `README.md`)
