# thing-t6/terminal-dungeon architecture

> Architecture diagram of the GitHub repository thing-t6/terminal-dungeon, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-01). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/thing-t6/terminal-dungeon
- Repository: https://github.com/thing-t6/terminal-dungeon

## Overview

Terminal-Dungeon is a Java command-line RPG. The player accepts the dungeon invitation, then the game engine runs Goblin, Skeleton, and Dragon encounters in sequence; each turn offers attack, item use, or flee, with enemy counterattacks and health-based progression. The graph separates orchestration, player/item mechanics, and character/enemy types. Relationships are based on the shown source excerpts and README; no unsampled implementation details are assumed.

Main entry points: [`src/src/Main/GameEngine.java`](https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Main/GameEngine.java) (Game Engine), [`src/src/Characters/Player.java`](https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Characters/Player.java) (Player Character), [`src/src/Characters/Enemies/Goblins.java`](https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Characters/Enemies/Goblins.java) (Goblin Stage), [`src/src/Characters/Enemies/Skeletons.java`](https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Characters/Enemies/Skeletons.java) (Skeleton Stage)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Game Runtime"]
  node_main["Game Entry<br/>[Main.java]"]
  node_engine["Game Engine<br/>[GameEngine.java]"]
  node_option["Turn State<br/>[optionState.java]"]
end

subgraph group_player["Player Mechanics"]
  node_playerchar["Player Character<br/>[Player.java]"]
  node_items["Inventory Items<br/>[Items.java]"]
end

subgraph group_combatants["Combatants"]
  node_character["Character Base<br/>[Character.java]"]
  node_enemy["Enemy Base<br/>[Enemy.java]"]
  node_goblins["Goblin Stage<br/>[Goblins.java]"]
  node_skeletons["Skeleton Stage<br/>[Skeletons.java]"]
  node_dragon["Dragon Stage<br/>[Dragon.java]"]
end

node_user(("Player"))

node_user -->|"starts session"| node_main
node_main -->|"starts game"| node_engine
node_engine -->|"creates player"| node_playerchar
node_engine -->|"creates inventory"| node_items
node_engine -->|"starts stage"| node_goblins
node_engine -->|"starts stage"| node_skeletons
node_engine -->|"starts stage"| node_dragon
node_engine -->|"offers actions"| node_playerchar
node_engine -->|"branches on"| node_option
node_engine -->|"invokes attack"| node_goblins
node_engine -->|"invokes attack"| node_skeletons
node_engine -->|"invokes attack"| node_dragon
node_playerchar -->|"uses items"| node_items
node_playerchar -->|"attacks enemy"| node_character
node_goblins -->|"attacks player"| node_playerchar
node_skeletons -->|"attacks player"| node_playerchar
node_dragon -->|"attacks player"| node_playerchar
node_enemy -->|"extends"| node_character
node_goblins -->|"extends"| node_enemy
node_skeletons -->|"extends"| node_enemy
node_dragon -->|"extends"| node_enemy
node_playerchar -->|"extends"| node_character

click node_main "https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Main/Main.java"
click node_engine "https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Main/GameEngine.java"
click node_option "https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Main/optionState.java"
click node_playerchar "https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Characters/Player.java"
click node_items "https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Main/Items.java"
click node_character "https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Characters/Character.java"
click node_enemy "https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Characters/Enemy.java"
click node_goblins "https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Characters/Enemies/Goblins.java"
click node_skeletons "https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Characters/Enemies/Skeletons.java"
click node_dragon "https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Characters/Enemies/Dragon.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_main,node_engine,node_option toneBlue
class node_playerchar,node_items toneAmber
class node_character,node_enemy,node_goblins,node_skeletons,node_dragon toneMint
class node_user toneIndigo
```

## Components

### Game Runtime

- [Game Entry](https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Main/Main.java): `src/src/Main/Main.java`
- [Game Engine](https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Main/GameEngine.java): `src/src/Main/GameEngine.java`
- [Turn State](https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Main/optionState.java): `src/src/Main/optionState.java`

### Player Mechanics

- [Player Character](https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Characters/Player.java): `src/src/Characters/Player.java`
- [Inventory Items](https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Main/Items.java): `src/src/Main/Items.java`

### Combatants

- [Character Base](https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Characters/Character.java): `src/src/Characters/Character.java`
- [Enemy Base](https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Characters/Enemy.java): `src/src/Characters/Enemy.java`
- [Goblin Stage](https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Characters/Enemies/Goblins.java): `src/src/Characters/Enemies/Goblins.java`
- [Skeleton Stage](https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Characters/Enemies/Skeletons.java): `src/src/Characters/Enemies/Skeletons.java`
- [Dragon Stage](https://github.com/thing-t6/terminal-dungeon/blob/main/src/src/Characters/Enemies/Dragon.java): `src/src/Characters/Enemies/Dragon.java`

### Other components

- **Player**

## Connections

- Player → Game Entry: starts session (evidence: `src/src/Main/Main.java`)
- Game Entry → Game Engine: starts game (evidence: `src/src/Main/Main.java`)
- Game Engine → Player Character: creates player (evidence: `src/src/Main/GameEngine.java`)
- Game Engine → Inventory Items: creates inventory (evidence: `src/src/Main/GameEngine.java`)
- Game Engine → Goblin Stage: starts stage (evidence: `src/src/Main/GameEngine.java`)
- Game Engine → Skeleton Stage: starts stage (evidence: `src/src/Main/GameEngine.java`)
- Game Engine → Dragon Stage: starts stage (evidence: `src/src/Main/GameEngine.java`)
- Game Engine → Player Character: offers actions (evidence: `src/src/Main/GameEngine.java`)
- Game Engine → Turn State: branches on (evidence: `src/src/Main/GameEngine.java`)
- Game Engine → Goblin Stage: invokes attack (evidence: `src/src/Main/GameEngine.java`)
- Game Engine → Skeleton Stage: invokes attack (evidence: `src/src/Main/GameEngine.java`)
- Game Engine → Dragon Stage: invokes attack (evidence: `src/src/Main/GameEngine.java`)
- Player Character → Inventory Items: uses items (evidence: `src/src/Characters/Player.java`)
- Player Character → Character Base: attacks enemy (evidence: `src/src/Characters/Player.java`)
- Goblin Stage → Player Character: attacks player (evidence: `src/src/Characters/Enemies/Goblins.java`)
- Skeleton Stage → Player Character: attacks player (evidence: `src/src/Characters/Enemies/Skeletons.java`)
- Dragon Stage → Player Character: attacks player (evidence: `src/src/Characters/Enemies/Dragon.java`)
- Enemy Base → Character Base: extends (evidence: `src/src/Characters/Enemy.java`)
- Goblin Stage → Enemy Base: extends (evidence: `src/src/Characters/Enemies/Goblins.java`)
- Skeleton Stage → Enemy Base: extends (evidence: `src/src/Characters/Enemies/Skeletons.java`)
- Dragon Stage → Enemy Base: extends (evidence: `src/src/Characters/Enemies/Dragon.java`)
- Player Character → Character Base: extends (evidence: `src/src/Characters/Player.java`)
