# mitklsenpai/sdl_game architecture

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

- Interactive diagram: https://gitdiagram.com/mitklsenpai/sdl_game
- Repository: https://github.com/mitklsenpai/sdl_game

## Overview

Tuyển VS SDL2 is a third-person survival shooter. The runtime loop in `main.cpp` coordinates player and weapon updates, enemy movement, collision checks, progression, and rendering; the README also describes tile-map loading, menus/settings, and upgrades. Gameplay separates ordinary enemy waves from the level-three Lich boss, whose attacks use bomb entities. Audio is handled by a dedicated manager. The excerpts establish several loop-to-system calls, but do not show all map, rendering, or menu wiring, so uncertain links are omitted.

Main entry points: [`main.cpp`](https://github.com/mitklsenpai/sdl_game/blob/main/main.cpp) (Game Loop), [`Collision.cpp`](https://github.com/mitklsenpai/sdl_game/blob/main/Collision.cpp) (Collision System), [`images`](https://github.com/mitklsenpai/sdl_game/tree/main/images) (Image Assets), [`Gun.cpp`](https://github.com/mitklsenpai/sdl_game/blob/main/Gun.cpp) (Gun and Bullets)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Runtime and Interface"]
  node_game_ui["Menus and Upgrades<br/>[Game.cpp]"]
  node_map["Tile Map<br/>[Map.cpp]"]
  node_audio["Audio Manager<br/>[AudioManager.cpp]"]
  node_timer["Frame Timer<br/>[Timer.cpp]"]
  node_loop["Game Loop<br/>[main.cpp]"]
end

subgraph group_combat["Combat and Enemies"]
  node_player["Player Character<br/>[MainObject.cpp]"]
  node_player_base["Character Base<br/>[Player.cpp]"]
  node_weapon["Gun and Bullets<br/>[Gun.cpp]"]
  node_collision["Collision System<br/>[Collision.cpp]"]
  node_enemy["Small Enemies<br/>[SmallEnemy.cpp]"]
end

subgraph group_progression["Progression and Boss"]
  node_experience["Experience Orbs<br/>[SmallEnemy.cpp]"]
  node_boss["Lich Boss<br/>[Lich.cpp]"]
  node_bombs["Bomb Attacks<br/>[Nuke.cpp]"]
end

subgraph group_assets["Game Assets"]
  node_map_data["Map Layout<br/>[map01.dat]"]
  node_image_assets["Image Assets"]
  node_sound_assets["Sound Assets"]
end

node_player_actor(("Player"))
node_sdl["SDL Runtime"]

node_player_actor -->|"plays"| node_loop
node_loop -->|"starts frame timer"| node_timer
node_loop -->|"updates"| node_player
node_loop -->|"updates"| node_weapon
node_loop -->|"moves"| node_enemy
node_loop -->|"checks collisions"| node_collision
node_loop -->|"applies buffs"| node_game_ui
node_loop -->|"activates at level three"| node_boss
node_loop -->|"renders orbs"| node_experience
node_collision -->|"reads bullets"| node_weapon
node_collision -->|"checks hits"| node_enemy
node_collision -->|"awards score and experience"| node_player
node_collision -->|"creates and collects"| node_experience
node_collision -->|"plays hit sound"| node_audio
node_weapon -->|"plays gun sound"| node_audio
node_boss -->|"spawns attacks"| node_bombs
node_game_ui -->|"applies upgrades"| node_player
node_game_ui -->|"applies upgrades"| node_weapon
node_map -->|"loads layout"| node_map_data
node_audio -->|"loads audio"| node_sound_assets
node_player -->|"loads textures"| node_image_assets
node_weapon -->|"loads textures"| node_image_assets
node_enemy -->|"loads textures"| node_image_assets
node_boss -->|"loads textures"| node_image_assets
node_bombs -->|"loads textures"| node_image_assets
node_game_ui -->|"loads textures"| node_image_assets
node_loop -->|"uses event and render APIs"| node_sdl
node_map -->|"renders map"| node_sdl

click node_player "https://github.com/mitklsenpai/sdl_game/blob/main/MainObject.cpp"
click node_player_base "https://github.com/mitklsenpai/sdl_game/blob/main/Player.cpp"
click node_weapon "https://github.com/mitklsenpai/sdl_game/blob/main/Gun.cpp"
click node_collision "https://github.com/mitklsenpai/sdl_game/blob/main/Collision.cpp"
click node_enemy "https://github.com/mitklsenpai/sdl_game/blob/main/SmallEnemy.cpp"
click node_experience "https://github.com/mitklsenpai/sdl_game/blob/main/SmallEnemy.cpp"
click node_boss "https://github.com/mitklsenpai/sdl_game/blob/main/Lich.cpp"
click node_bombs "https://github.com/mitklsenpai/sdl_game/blob/main/Nuke.cpp"
click node_game_ui "https://github.com/mitklsenpai/sdl_game/blob/main/Game.cpp"
click node_map "https://github.com/mitklsenpai/sdl_game/blob/main/Map.cpp"
click node_audio "https://github.com/mitklsenpai/sdl_game/blob/main/AudioManager.cpp"
click node_timer "https://github.com/mitklsenpai/sdl_game/blob/main/Timer.cpp"
click node_loop "https://github.com/mitklsenpai/sdl_game/blob/main/main.cpp"
click node_map_data "https://github.com/mitklsenpai/sdl_game/blob/main/map/map01.dat"
click node_image_assets "https://github.com/mitklsenpai/sdl_game/tree/main/images"
click node_sound_assets "https://github.com/mitklsenpai/sdl_game/tree/main/sfx"

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_game_ui,node_map,node_audio,node_timer,node_loop toneBlue
class node_player,node_player_base,node_weapon,node_collision,node_enemy toneAmber
class node_experience,node_boss,node_bombs toneMint
class node_map_data,node_image_assets,node_sound_assets toneRose
class node_player_actor,node_sdl toneIndigo
```

## Components

### Runtime and Interface

- [Menus and Upgrades](https://github.com/mitklsenpai/sdl_game/blob/main/Game.cpp): `Game.cpp`
- [Tile Map](https://github.com/mitklsenpai/sdl_game/blob/main/Map.cpp): `Map.cpp`
- [Audio Manager](https://github.com/mitklsenpai/sdl_game/blob/main/AudioManager.cpp): `AudioManager.cpp`
- [Frame Timer](https://github.com/mitklsenpai/sdl_game/blob/main/Timer.cpp): `Timer.cpp`
- [Game Loop](https://github.com/mitklsenpai/sdl_game/blob/main/main.cpp): `main.cpp`

### Combat and Enemies

- [Player Character](https://github.com/mitklsenpai/sdl_game/blob/main/MainObject.cpp): `MainObject.cpp`
- [Character Base](https://github.com/mitklsenpai/sdl_game/blob/main/Player.cpp): `Player.cpp`
- [Gun and Bullets](https://github.com/mitklsenpai/sdl_game/blob/main/Gun.cpp): `Gun.cpp`
- [Collision System](https://github.com/mitklsenpai/sdl_game/blob/main/Collision.cpp): `Collision.cpp`
- [Small Enemies](https://github.com/mitklsenpai/sdl_game/blob/main/SmallEnemy.cpp): `SmallEnemy.cpp`

### Progression and Boss

- [Experience Orbs](https://github.com/mitklsenpai/sdl_game/blob/main/SmallEnemy.cpp): `SmallEnemy.cpp`
- [Lich Boss](https://github.com/mitklsenpai/sdl_game/blob/main/Lich.cpp): `Lich.cpp`
- [Bomb Attacks](https://github.com/mitklsenpai/sdl_game/blob/main/Nuke.cpp): `Nuke.cpp`

### Game Assets

- [Map Layout](https://github.com/mitklsenpai/sdl_game/blob/main/map/map01.dat): `map/map01.dat`
- [Image Assets](https://github.com/mitklsenpai/sdl_game/tree/main/images): `images`
- [Sound Assets](https://github.com/mitklsenpai/sdl_game/tree/main/sfx): `sfx`

### Other components

- **Player**
- **SDL Runtime**

## Connections

- Player → Game Loop: plays
- Game Loop → Frame Timer: starts frame timer
- Game Loop → Player Character: updates
- Game Loop → Gun and Bullets: updates
- Game Loop → Small Enemies: moves
- Game Loop → Collision System: checks collisions
- Game Loop → Menus and Upgrades: applies buffs
- Game Loop → Lich Boss: activates at level three
- Game Loop → Experience Orbs: renders orbs
- Collision System → Gun and Bullets: reads bullets
- Collision System → Small Enemies: checks hits
- Collision System → Player Character: awards score and experience
- Collision System → Experience Orbs: creates and collects
- Collision System → Audio Manager: plays hit sound
- Gun and Bullets → Audio Manager: plays gun sound
- Lich Boss → Bomb Attacks: spawns attacks
- Menus and Upgrades → Player Character: applies upgrades
- Menus and Upgrades → Gun and Bullets: applies upgrades
- Tile Map → Map Layout: loads layout
- Audio Manager → Sound Assets: loads audio
- Player Character → Image Assets: loads textures
- Gun and Bullets → Image Assets: loads textures
- Small Enemies → Image Assets: loads textures
- Lich Boss → Image Assets: loads textures
- Bomb Attacks → Image Assets: loads textures
- Menus and Upgrades → Image Assets: loads textures
- Game Loop → SDL Runtime: uses event and render APIs
- Tile Map → SDL Runtime: renders map
