# qzlabq/java-2dgame architecture

> Architecture diagram of the GitHub repository qzlabq/java-2dgame, 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/qzlabq/java-2dgame
- Repository: https://github.com/qzlabq/java-2dgame

## Overview

This is a Java 2D adventure game with an auxiliary map editor. The main player workflow is to start the game, use keyboard-driven states to explore maps, interact with NPCs and objects, fight monsters, solve the dungeon pressure-plate/iron-door puzzle, defeat the Skeleton Lord, and save progression. Runtime responsibilities span map rendering, entity behavior, events, lighting, UI/cutscenes, and persistence. The README documents the gameplay capabilities; sampled source confirms selected wiring, while unsampled GamePanel and editor code limits confidence about some internal calls.

Main entry points: [`src/main/GamePanel.java`](https://github.com/qzlabq/java-2dgame/blob/master/src/main/GamePanel.java) (Game panel), [`src/main/EventHandler.java`](https://github.com/qzlabq/java-2dgame/blob/master/src/main/EventHandler.java) (World events), [`src/maptool/MapEditorManager.java`](https://github.com/qzlabq/java-2dgame/blob/master/src/maptool/MapEditorManager.java) (Editor windows), [`src/entity/Entity.java`](https://github.com/qzlabq/java-2dgame/blob/master/src/entity/Entity.java) (Entity behavior)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Game runtime"]
  node_input["Keyboard input<br/>[KeyHandler.java]"]
  node_game["Game panel<br/>[GamePanel.java]"]
  node_launcher["Game launcher<br/>[Main.java]"]
end

subgraph group_world["World and exploration"]
  node_tiles["Tile maps<br/>[TileManager.java]"]
  node_mapdata["Map definitions<br/>[MapData.java]"]
  node_events["World events<br/>[EventHandler.java]"]
  node_pathfinding["Pathfinding<br/>[PathFinder.java]"]
  node_environment["Lighting"]
end

subgraph group_actors["Actors and combat"]
  node_player["Player<br/>[Player.java]"]
  node_entities["Entity behavior<br/>[Entity.java]"]
  node_monsters["Monsters"]
  node_projectiles["Projectiles<br/>[Projectile.java]"]
  node_items["Items and objects<br/>[OBJ_Fireball.java]"]
end

subgraph group_progress["Progress and presentation"]
  node_storage["Save data<br/>[DataStorage.java]"]
  node_saveload["Save and load<br/>[SaveLoad.java]"]
  node_progressdata["Progress flags<br/>[Progress.java]"]
  node_ui["Game UI<br/>[UI.java]"]
  node_cutscene["Cutscenes"]
end

subgraph group_editing["Map editing"]
  node_editorwindow["Editor windows"]
  node_editor["Map editor<br/>[MapEditor.java]"]
  node_mapmodel["Editor map model<br/>[TileSet.java]"]
end

node_gamer(("Player"))
node_mapmaker(("Map maker"))

node_gamer -->|"starts game"| node_launcher
node_launcher -->|"creates and starts"| node_game
node_gamer -->|"presses keys"| node_input
node_input -->|"changes game state"| node_game
node_tiles -->|"reads definitions"| node_mapdata
node_entities -->|"searches paths"| node_pathfinding
node_game -->|"runs gameplay"| node_player
node_game -->|"uses tile maps"| node_tiles
node_game -->|"checks events"| node_events
node_game -->|"updates lighting"| node_environment
node_game -->|"renders interface"| node_ui
node_game -->|"handles saves"| node_saveload
node_events -->|"checks boss flag"| node_progressdata
node_events -->|"starts boss scene"| node_cutscene
node_cutscene -->|"wakes boss"| node_monsters
node_monsters -->|"drops treasure"| node_items
node_player -->|"inherits behavior"| node_entities
node_projectiles -->|"inherits behavior"| node_entities
node_saveload -->|"serializes state"| node_storage
node_mapmaker -->|"opens editor"| node_editorwindow
node_editorwindow -->|"manages tabs"| node_editor
node_editorwindow -->|"dispatches save"| node_editor
node_editor -->|"edits tiles"| node_mapmodel

click node_player "https://github.com/qzlabq/java-2dgame/blob/master/src/entity/Player.java"
click node_entities "https://github.com/qzlabq/java-2dgame/blob/master/src/entity/Entity.java"
click node_monsters "https://github.com/qzlabq/java-2dgame/blob/master/src/monster/MON_SkeletonLord.java"
click node_projectiles "https://github.com/qzlabq/java-2dgame/blob/master/src/entity/Projectile.java"
click node_items "https://github.com/qzlabq/java-2dgame/blob/master/src/object/OBJ_Fireball.java"
click node_input "https://github.com/qzlabq/java-2dgame/blob/master/src/main/KeyHandler.java"
click node_game "https://github.com/qzlabq/java-2dgame/blob/master/src/main/GamePanel.java"
click node_launcher "https://github.com/qzlabq/java-2dgame/blob/master/src/main/Main.java"
click node_tiles "https://github.com/qzlabq/java-2dgame/blob/master/src/tile/TileManager.java"
click node_mapdata "https://github.com/qzlabq/java-2dgame/blob/master/src/main/MapData.java"
click node_events "https://github.com/qzlabq/java-2dgame/blob/master/src/main/EventHandler.java"
click node_pathfinding "https://github.com/qzlabq/java-2dgame/blob/master/src/ai/PathFinder.java"
click node_environment "https://github.com/qzlabq/java-2dgame/blob/master/src/environment/EnvironmentManager.java"
click node_storage "https://github.com/qzlabq/java-2dgame/blob/master/src/data/DataStorage.java"
click node_saveload "https://github.com/qzlabq/java-2dgame/blob/master/src/data/SaveLoad.java"
click node_progressdata "https://github.com/qzlabq/java-2dgame/blob/master/src/data/Progress.java"
click node_ui "https://github.com/qzlabq/java-2dgame/blob/master/src/main/UI.java"
click node_cutscene "https://github.com/qzlabq/java-2dgame/blob/master/src/main/CutsceneManager.java"
click node_editorwindow "https://github.com/qzlabq/java-2dgame/blob/master/src/maptool/MapEditorManager.java"
click node_editor "https://github.com/qzlabq/java-2dgame/blob/master/src/maptool/MapEditor.java"
click node_mapmodel "https://github.com/qzlabq/java-2dgame/blob/master/src/maptool/TileSet.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_input,node_game,node_launcher toneBlue
class node_tiles,node_mapdata,node_events,node_pathfinding,node_environment toneAmber
class node_player,node_entities,node_monsters,node_projectiles,node_items toneMint
class node_storage,node_saveload,node_progressdata,node_ui,node_cutscene toneRose
class node_editorwindow,node_editor,node_mapmodel,node_gamer,node_mapmaker toneIndigo
```

## Components

### Game runtime

- [Keyboard input](https://github.com/qzlabq/java-2dgame/blob/master/src/main/KeyHandler.java): `src/main/KeyHandler.java`
- [Game panel](https://github.com/qzlabq/java-2dgame/blob/master/src/main/GamePanel.java): `src/main/GamePanel.java`
- [Game launcher](https://github.com/qzlabq/java-2dgame/blob/master/src/main/Main.java): `src/main/Main.java`

### World and exploration

- [Tile maps](https://github.com/qzlabq/java-2dgame/blob/master/src/tile/TileManager.java): `src/tile/TileManager.java`
- [Map definitions](https://github.com/qzlabq/java-2dgame/blob/master/src/main/MapData.java): `src/main/MapData.java`
- [World events](https://github.com/qzlabq/java-2dgame/blob/master/src/main/EventHandler.java): `src/main/EventHandler.java`
- [Pathfinding](https://github.com/qzlabq/java-2dgame/blob/master/src/ai/PathFinder.java): `src/ai/PathFinder.java`
- [Lighting](https://github.com/qzlabq/java-2dgame/blob/master/src/environment/EnvironmentManager.java): `src/environment/EnvironmentManager.java`

### Actors and combat

- [Player](https://github.com/qzlabq/java-2dgame/blob/master/src/entity/Player.java): `src/entity/Player.java`
- [Entity behavior](https://github.com/qzlabq/java-2dgame/blob/master/src/entity/Entity.java): `src/entity/Entity.java`
- [Monsters](https://github.com/qzlabq/java-2dgame/blob/master/src/monster/MON_SkeletonLord.java): `src/monster/MON_SkeletonLord.java`
- [Projectiles](https://github.com/qzlabq/java-2dgame/blob/master/src/entity/Projectile.java): `src/entity/Projectile.java`
- [Items and objects](https://github.com/qzlabq/java-2dgame/blob/master/src/object/OBJ_Fireball.java): `src/object/OBJ_Fireball.java`

### Progress and presentation

- [Save data](https://github.com/qzlabq/java-2dgame/blob/master/src/data/DataStorage.java): `src/data/DataStorage.java`
- [Save and load](https://github.com/qzlabq/java-2dgame/blob/master/src/data/SaveLoad.java): `src/data/SaveLoad.java`
- [Progress flags](https://github.com/qzlabq/java-2dgame/blob/master/src/data/Progress.java): `src/data/Progress.java`
- [Game UI](https://github.com/qzlabq/java-2dgame/blob/master/src/main/UI.java): `src/main/UI.java`
- [Cutscenes](https://github.com/qzlabq/java-2dgame/blob/master/src/main/CutsceneManager.java): `src/main/CutsceneManager.java`

### Map editing

- [Editor windows](https://github.com/qzlabq/java-2dgame/blob/master/src/maptool/MapEditorManager.java): `src/maptool/MapEditorManager.java`
- [Map editor](https://github.com/qzlabq/java-2dgame/blob/master/src/maptool/MapEditor.java): `src/maptool/MapEditor.java`
- [Editor map model](https://github.com/qzlabq/java-2dgame/blob/master/src/maptool/TileSet.java): `src/maptool/TileSet.java`

### Other components

- **Player**
- **Map maker**

## Connections

- Player → Game launcher: starts game
- Game launcher → Game panel: creates and starts
- Player → Keyboard input: presses keys
- Keyboard input → Game panel: changes game state
- Tile maps → Map definitions: reads definitions
- Entity behavior → Pathfinding: searches paths
- Game panel → Player: runs gameplay
- Game panel → Tile maps: uses tile maps
- Game panel → World events: checks events
- Game panel → Lighting: updates lighting
- Game panel → Game UI: renders interface
- Game panel → Save and load: handles saves
- World events → Progress flags: checks boss flag
- World events → Cutscenes: starts boss scene
- Cutscenes → Monsters: wakes boss
- Monsters → Items and objects: drops treasure
- Player → Entity behavior: inherits behavior
- Projectiles → Entity behavior: inherits behavior
- Save and load → Save data: serializes state
- Map maker → Editor windows: opens editor
- Editor windows → Map editor: manages tabs
- Editor windows → Map editor: dispatches save
- Map editor → Editor map model: edits tiles
