# nebulatte/text-based-dungeon-game architecture

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

- Interactive diagram: https://gitdiagram.com/nebulatte/text-based-dungeon-game
- Repository: https://github.com/nebulatte/text-based-dungeon-game

## Overview

This is a console-based, turn-based dungeon game. The player chooses a difficulty, enters a sequence of battles against random enemies and periodic bosses, and earns experience and stat increases after victories; play ends on defeat, exit, or reaching the difficulty’s kill goal. Combat combines player-selected and enemy-selected skills with composable damage, healing, and other effects. The graph reflects the shown runtime calls and README capabilities; unsampled enemy-selection details are represented only where the source index supports them.

Main entry points: [`Scene.java`](https://github.com/nebulatte/text-based-dungeon-game/blob/main/Scene.java) (Dungeon Scene), [`Display.java`](https://github.com/nebulatte/text-based-dungeon-game/blob/main/Display.java) (Game Display), [`Main.java`](https://github.com/nebulatte/text-based-dungeon-game/blob/main/Main.java) (Game Loop), [`Battle.java`](https://github.com/nebulatte/text-based-dungeon-game/blob/main/Battle.java) (Battle Loop)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Game Entry"]
  node_main["Game Loop<br/>[Main.java]"]
  node_difficulty["Difficulty Setup<br/>[Difficulty.java]"]
end

subgraph group_progression["Dungeon Progression"]
  node_scene["Dungeon Scene<br/>[Scene.java]"]
  node_enemy_type["Enemy Selection<br/>[EnemyType.java]"]
  node_player["Player Progression<br/>[Player.java]"]
end

subgraph group_combat["Combat System"]
  node_battle["Battle Loop<br/>[Battle.java]"]
  node_enemy["Enemy Behavior<br/>[Enemy.java]"]
  node_entity["Combatant State<br/>[Entity.java]"]
  node_skill["Skill Mechanics<br/>[Skill.java]"]
  node_effect["Combat Effects<br/>[Effect.java]"]
  node_stamina_error["Stamina Error"]
end

subgraph group_presentation["Console Interface"]
  node_display["Game Display<br/>[Display.java]"]
  node_utils["Input Utilities<br/>[Utils.java]"]
end

node_player_actor(("Player"))

node_player_actor -->|"plays via"| node_main
node_main -->|"shows menus"| node_display
node_main -->|"reads choices"| node_utils
node_main -->|"selects difficulty"| node_difficulty
node_difficulty -->|"configures scene"| node_scene
node_main -->|"starts scene"| node_scene
node_scene -->|"creates player"| node_player
node_scene -->|"selects enemies"| node_enemy_type
node_scene -->|"runs battle"| node_battle
node_scene -->|"awards progression"| node_player
node_scene -->|"shows outcomes"| node_display
node_enemy_type -->|"creates enemies"| node_enemy
node_battle -->|"uses skills"| node_player
node_battle -->|"dispatches turns"| node_enemy
node_battle -->|"shows combat"| node_display
node_battle -->|"reads skill choice"| node_utils
node_player -->|"extends"| node_entity
node_enemy -->|"extends"| node_entity
node_entity -->|"executes skill"| node_skill
node_skill -->|"applies effects"| node_effect
node_effect -->|"changes combatant"| node_entity
node_skill -->|"throws on shortage"| node_stamina_error
node_display -->|"renders skills"| node_skill
node_display -->|"renders messages"| node_effect
node_display -->|"lists options"| node_difficulty

click node_main "https://github.com/nebulatte/text-based-dungeon-game/blob/main/Main.java"
click node_difficulty "https://github.com/nebulatte/text-based-dungeon-game/blob/main/Difficulty.java"
click node_scene "https://github.com/nebulatte/text-based-dungeon-game/blob/main/Scene.java"
click node_enemy_type "https://github.com/nebulatte/text-based-dungeon-game/blob/main/EnemyType.java"
click node_player "https://github.com/nebulatte/text-based-dungeon-game/blob/main/Player.java"
click node_battle "https://github.com/nebulatte/text-based-dungeon-game/blob/main/Battle.java"
click node_enemy "https://github.com/nebulatte/text-based-dungeon-game/blob/main/Enemy.java"
click node_entity "https://github.com/nebulatte/text-based-dungeon-game/blob/main/Entity.java"
click node_skill "https://github.com/nebulatte/text-based-dungeon-game/blob/main/Skill.java"
click node_effect "https://github.com/nebulatte/text-based-dungeon-game/blob/main/Effect.java"
click node_stamina_error "https://github.com/nebulatte/text-based-dungeon-game/blob/main/InsufficientStamina.java"
click node_display "https://github.com/nebulatte/text-based-dungeon-game/blob/main/Display.java"
click node_utils "https://github.com/nebulatte/text-based-dungeon-game/blob/main/Utils.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_difficulty toneBlue
class node_scene,node_enemy_type,node_player toneAmber
class node_battle,node_enemy,node_entity,node_skill,node_effect,node_stamina_error toneMint
class node_display,node_utils toneRose
class node_player_actor toneIndigo
```

## Components

### Game Entry

- [Game Loop](https://github.com/nebulatte/text-based-dungeon-game/blob/main/Main.java): `Main.java`
- [Difficulty Setup](https://github.com/nebulatte/text-based-dungeon-game/blob/main/Difficulty.java): `Difficulty.java`

### Dungeon Progression

- [Dungeon Scene](https://github.com/nebulatte/text-based-dungeon-game/blob/main/Scene.java): `Scene.java`
- [Enemy Selection](https://github.com/nebulatte/text-based-dungeon-game/blob/main/EnemyType.java): `EnemyType.java`
- [Player Progression](https://github.com/nebulatte/text-based-dungeon-game/blob/main/Player.java): `Player.java`

### Combat System

- [Battle Loop](https://github.com/nebulatte/text-based-dungeon-game/blob/main/Battle.java): `Battle.java`
- [Enemy Behavior](https://github.com/nebulatte/text-based-dungeon-game/blob/main/Enemy.java): `Enemy.java`
- [Combatant State](https://github.com/nebulatte/text-based-dungeon-game/blob/main/Entity.java): `Entity.java`
- [Skill Mechanics](https://github.com/nebulatte/text-based-dungeon-game/blob/main/Skill.java): `Skill.java`
- [Combat Effects](https://github.com/nebulatte/text-based-dungeon-game/blob/main/Effect.java): `Effect.java`
- [Stamina Error](https://github.com/nebulatte/text-based-dungeon-game/blob/main/InsufficientStamina.java): `InsufficientStamina.java`

### Console Interface

- [Game Display](https://github.com/nebulatte/text-based-dungeon-game/blob/main/Display.java): `Display.java`
- [Input Utilities](https://github.com/nebulatte/text-based-dungeon-game/blob/main/Utils.java): `Utils.java`

### Other components

- **Player**

## Connections

- Player → Game Loop: plays via (evidence: `Main.java`)
- Game Loop → Game Display: shows menus (evidence: `Main.java`)
- Game Loop → Input Utilities: reads choices (evidence: `Main.java`)
- Game Loop → Difficulty Setup: selects difficulty (evidence: `Main.java`)
- Difficulty Setup → Dungeon Scene: configures scene (evidence: `Difficulty.java`)
- Game Loop → Dungeon Scene: starts scene (evidence: `Main.java`)
- Dungeon Scene → Player Progression: creates player (evidence: `Scene.java`)
- Dungeon Scene → Enemy Selection: selects enemies (evidence: `Scene.java`)
- Dungeon Scene → Battle Loop: runs battle (evidence: `Scene.java`)
- Dungeon Scene → Player Progression: awards progression (evidence: `Scene.java`)
- Dungeon Scene → Game Display: shows outcomes (evidence: `Scene.java`)
- Enemy Selection → Enemy Behavior: creates enemies (evidence: `EnemyType.java`)
- Battle Loop → Player Progression: uses skills (evidence: `Battle.java`)
- Battle Loop → Enemy Behavior: dispatches turns (evidence: `Battle.java`)
- Battle Loop → Game Display: shows combat (evidence: `Battle.java`)
- Battle Loop → Input Utilities: reads skill choice (evidence: `Battle.java`)
- Player Progression → Combatant State: extends (evidence: `Player.java`)
- Enemy Behavior → Combatant State: extends (evidence: `Enemy.java`)
- Combatant State → Skill Mechanics: executes skill (evidence: `Entity.java`)
- Skill Mechanics → Combat Effects: applies effects (evidence: `Skill.java`)
- Combat Effects → Combatant State: changes combatant (evidence: `Effect.java`)
- Skill Mechanics → Stamina Error: throws on shortage (evidence: `Skill.java`)
- Game Display → Skill Mechanics: renders skills (evidence: `Display.java`)
- Game Display → Combat Effects: renders messages (evidence: `Display.java`)
- Game Display → Difficulty Setup: lists options (evidence: `Display.java`)
