# testgame-team/test2dgame_01 architecture

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

- Interactive diagram: https://gitdiagram.com/testgame-team/test2dgame_01
- Repository: https://github.com/testgame-team/test2dgame_01

## Overview

Test2DGame is a Java Swing/AWT action-adventure game. The player launches the game, navigates menus and the world with keyboard input, interacts with entities and objects, manages inventory, and sees the result through the game panel’s rendering and UI. GamePanel is the central runtime coordinator; the world, collision, entity, inventory, and presentation systems provide the main gameplay stages, while save slots and sound support additional documented capabilities. The graph follows explicit README and source-index relationships; unsampled subsystem internals are represented without asserting their internal call flow.

Main entry points: [`src/main/GamePanel.java`](https://github.com/testgame-team/test2dgame_01/blob/main/src/main/GamePanel.java) (GamePanel coordinator), [`src/entity/Entity.java`](https://github.com/testgame-team/test2dgame_01/blob/main/src/entity/Entity.java) (Entity base), [`src/main/AssetSetter.java`](https://github.com/testgame-team/test2dgame_01/blob/main/src/main/AssetSetter.java) (Entity placement), [`src/main/KeyHandler.java`](https://github.com/testgame-team/test2dgame_01/blob/main/src/main/KeyHandler.java) (Keyboard controls)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Game runtime"]
  node_input["Keyboard controls<br/>[KeyHandler.java]"]
  node_game["GamePanel coordinator<br/>[GamePanel.java]"]
  node_main["Application entry<br/>[Main.java]"]
end

subgraph group_world["World and content"]
  node_spawns["Entity placement<br/>[AssetSetter.java]"]
  node_worldmanager["World manager<br/>[WorldManager.java]"]
  node_map["Map data<br/>[WorldMap.java]"]
  node_tiles["Tile rendering<br/>[TileManager.java]"]
  node_assets["Image cache<br/>[AssetManager.java]"]
  node_maps["Map resources"]
end

subgraph group_gameplay["Gameplay systems"]
  node_player["Player<br/>[Player.java]"]
  node_entities["Entity base<br/>[Entity.java]"]
  node_npc["Old Man NPC<br/>[NPC_OldMan.java]"]
  node_slime["Green Slime<br/>[M_GreenSlime.java]"]
  node_objects["World objects<br/>[SuperObject.java]"]
  node_inventory["Inventory model<br/>[Inventory.java]"]
  node_item["Item definitions<br/>[Item.java]"]
  node_collision["Collision checker"]
  node_events["World events<br/>[EventHandler.java]"]
end

subgraph group_presentation["UI and audio"]
  node_ui["Menus and HUD<br/>[UI.java]"]
  node_sound["Sound playback<br/>[Sound.java]"]
end

subgraph group_persistence["Persistence"]
  node_saves[("Save slots<br/>[SaveManager.java]")]
end

node_human(("Player"))

node_human -->|"launches"| node_main
node_main -->|"creates"| node_game
node_human -->|"presses keys"| node_input
node_input -->|"updates state"| node_game
node_input -->|"loads or clears"| node_saves
node_game -->|"updates and draws"| node_player
node_game -->|"initializes entities"| node_spawns
node_game -->|"uses checks"| node_collision
node_game -->|"creates handler"| node_events
node_game -->|"creates manager"| node_worldmanager
node_game -->|"creates manager"| node_saves
node_game -->|"draws interface"| node_ui
node_game -->|"plays audio"| node_sound
node_worldmanager -->|"loads map"| node_map
node_worldmanager -.->|"reads resource"| node_maps
node_game -->|"creates renderer"| node_tiles
node_tiles -->|"reads tile IDs"| node_map
node_tiles -->|"loads tile images"| node_assets
node_assets -.->|"loads images"| node_maps
node_spawns -->|"creates NPC"| node_npc
node_spawns -->|"creates monster"| node_slime
node_spawns -->|"creates objects"| node_objects
node_npc -->|"extends"| node_entities
node_slime -->|"extends"| node_entities
node_player -->|"extends"| node_entities
node_entities -->|"loads images"| node_assets
node_entities -->|"requests checks"| node_collision
node_player -->|"owns inventory"| node_inventory
node_inventory -->|"stores definitions"| node_item
node_ui -->|"displays contents"| node_inventory

click node_player "https://github.com/testgame-team/test2dgame_01/blob/main/src/entity/Player.java"
click node_entities "https://github.com/testgame-team/test2dgame_01/blob/main/src/entity/Entity.java"
click node_npc "https://github.com/testgame-team/test2dgame_01/blob/main/src/entity/NPC_OldMan.java"
click node_slime "https://github.com/testgame-team/test2dgame_01/blob/main/src/monster/M_GreenSlime.java"
click node_objects "https://github.com/testgame-team/test2dgame_01/blob/main/src/object/SuperObject.java"
click node_inventory "https://github.com/testgame-team/test2dgame_01/blob/main/src/inventory/Inventory.java"
click node_item "https://github.com/testgame-team/test2dgame_01/blob/main/src/inventory/Item.java"
click node_input "https://github.com/testgame-team/test2dgame_01/blob/main/src/main/KeyHandler.java"
click node_game "https://github.com/testgame-team/test2dgame_01/blob/main/src/main/GamePanel.java"
click node_main "https://github.com/testgame-team/test2dgame_01/blob/main/src/main/Main.java"
click node_collision "https://github.com/testgame-team/test2dgame_01/blob/main/src/main/CollisionChecker.java"
click node_events "https://github.com/testgame-team/test2dgame_01/blob/main/src/main/EventHandler.java"
click node_spawns "https://github.com/testgame-team/test2dgame_01/blob/main/src/main/AssetSetter.java"
click node_worldmanager "https://github.com/testgame-team/test2dgame_01/blob/main/src/world/WorldManager.java"
click node_map "https://github.com/testgame-team/test2dgame_01/blob/main/src/world/WorldMap.java"
click node_tiles "https://github.com/testgame-team/test2dgame_01/blob/main/src/tile/TileManager.java"
click node_assets "https://github.com/testgame-team/test2dgame_01/blob/main/src/content/AssetManager.java"
click node_maps "https://github.com/testgame-team/test2dgame_01/tree/main/res/maps"
click node_ui "https://github.com/testgame-team/test2dgame_01/blob/main/src/main/UI.java"
click node_sound "https://github.com/testgame-team/test2dgame_01/blob/main/src/main/Sound.java"
click node_saves "https://github.com/testgame-team/test2dgame_01/blob/main/src/main/SaveManager.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_main toneBlue
class node_spawns,node_worldmanager,node_map,node_tiles,node_assets,node_maps toneAmber
class node_player,node_entities,node_npc,node_slime,node_objects,node_inventory,node_item,node_collision,node_events toneMint
class node_ui,node_sound toneRose
class node_saves,node_human toneIndigo
```

## Components

### Game runtime

- [Keyboard controls](https://github.com/testgame-team/test2dgame_01/blob/main/src/main/KeyHandler.java): `src/main/KeyHandler.java`
- [GamePanel coordinator](https://github.com/testgame-team/test2dgame_01/blob/main/src/main/GamePanel.java): `src/main/GamePanel.java`
- [Application entry](https://github.com/testgame-team/test2dgame_01/blob/main/src/main/Main.java): `src/main/Main.java`

### World and content

- [Entity placement](https://github.com/testgame-team/test2dgame_01/blob/main/src/main/AssetSetter.java): `src/main/AssetSetter.java`
- [World manager](https://github.com/testgame-team/test2dgame_01/blob/main/src/world/WorldManager.java): `src/world/WorldManager.java`
- [Map data](https://github.com/testgame-team/test2dgame_01/blob/main/src/world/WorldMap.java): `src/world/WorldMap.java`
- [Tile rendering](https://github.com/testgame-team/test2dgame_01/blob/main/src/tile/TileManager.java): `src/tile/TileManager.java`
- [Image cache](https://github.com/testgame-team/test2dgame_01/blob/main/src/content/AssetManager.java): `src/content/AssetManager.java`
- [Map resources](https://github.com/testgame-team/test2dgame_01/tree/main/res/maps): `res/maps`

### Gameplay systems

- [Player](https://github.com/testgame-team/test2dgame_01/blob/main/src/entity/Player.java): `src/entity/Player.java`
- [Entity base](https://github.com/testgame-team/test2dgame_01/blob/main/src/entity/Entity.java): `src/entity/Entity.java`
- [Old Man NPC](https://github.com/testgame-team/test2dgame_01/blob/main/src/entity/NPC_OldMan.java): `src/entity/NPC_OldMan.java`
- [Green Slime](https://github.com/testgame-team/test2dgame_01/blob/main/src/monster/M_GreenSlime.java): `src/monster/M_GreenSlime.java`
- [World objects](https://github.com/testgame-team/test2dgame_01/blob/main/src/object/SuperObject.java): `src/object/SuperObject.java`
- [Inventory model](https://github.com/testgame-team/test2dgame_01/blob/main/src/inventory/Inventory.java): `src/inventory/Inventory.java`
- [Item definitions](https://github.com/testgame-team/test2dgame_01/blob/main/src/inventory/Item.java): `src/inventory/Item.java`
- [Collision checker](https://github.com/testgame-team/test2dgame_01/blob/main/src/main/CollisionChecker.java): `src/main/CollisionChecker.java`
- [World events](https://github.com/testgame-team/test2dgame_01/blob/main/src/main/EventHandler.java): `src/main/EventHandler.java`

### UI and audio

- [Menus and HUD](https://github.com/testgame-team/test2dgame_01/blob/main/src/main/UI.java): `src/main/UI.java`
- [Sound playback](https://github.com/testgame-team/test2dgame_01/blob/main/src/main/Sound.java): `src/main/Sound.java`

### Persistence

- [Save slots](https://github.com/testgame-team/test2dgame_01/blob/main/src/main/SaveManager.java): `src/main/SaveManager.java`

### Other components

- **Player**

## Connections

- Player → Application entry: launches (evidence: `README.md`)
- Application entry → GamePanel coordinator: creates (evidence: `src/main/Main.java`)
- Player → Keyboard controls: presses keys (evidence: `README.md`)
- Keyboard controls → GamePanel coordinator: updates state (evidence: `src/main/KeyHandler.java`)
- Keyboard controls → Save slots: loads or clears (evidence: `src/main/KeyHandler.java`)
- GamePanel coordinator → Player: updates and draws (evidence: `src/main/GamePanel.java`)
- GamePanel coordinator → Entity placement: initializes entities (evidence: `src/main/GamePanel.java`)
- GamePanel coordinator → Collision checker: uses checks (evidence: `src/main/GamePanel.java`)
- GamePanel coordinator → World events: creates handler (evidence: `src/main/GamePanel.java`)
- GamePanel coordinator → World manager: creates manager (evidence: `src/main/GamePanel.java`)
- GamePanel coordinator → Save slots: creates manager (evidence: `src/main/GamePanel.java`)
- GamePanel coordinator → Menus and HUD: draws interface (evidence: `src/main/GamePanel.java`)
- GamePanel coordinator → Sound playback: plays audio (evidence: `src/main/GamePanel.java`)
- World manager → Map data: loads map (evidence: `src/world/WorldManager.java`)
- World manager → Map resources: reads resource
- GamePanel coordinator → Tile rendering: creates renderer (evidence: `src/main/GamePanel.java`)
- Tile rendering → Map data: reads tile IDs (evidence: `src/tile/TileManager.java`)
- Tile rendering → Image cache: loads tile images (evidence: `src/tile/TileManager.java`)
- Image cache → Map resources: loads images
- Entity placement → Old Man NPC: creates NPC (evidence: `src/main/AssetSetter.java`)
- Entity placement → Green Slime: creates monster (evidence: `src/main/AssetSetter.java`)
- Entity placement → World objects: creates objects (evidence: `src/main/AssetSetter.java`)
- Old Man NPC → Entity base: extends (evidence: `src/entity/NPC_OldMan.java`)
- Green Slime → Entity base: extends (evidence: `src/monster/M_GreenSlime.java`)
- Player → Entity base: extends (evidence: `src/entity/Player.java`)
- Entity base → Image cache: loads images (evidence: `src/entity/Entity.java`)
- Entity base → Collision checker: requests checks (evidence: `src/entity/Entity.java`)
- Player → Inventory model: owns inventory (evidence: `src/entity/Player.java`)
- Inventory model → Item definitions: stores definitions (evidence: `src/inventory/Inventory.java`)
- Menus and HUD → Inventory model: displays contents (evidence: `src/main/UI.java`)
