# chikhanhnguyen/the-binding-of-isaac architecture

> Architecture diagram of the GitHub repository chikhanhnguyen/the-binding-of-isaac, 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/chikhanhnguyen/the-binding-of-isaac
- Repository: https://github.com/chikhanhnguyen/the-binding-of-isaac

## Overview

This JavaFX game takes the player from a menu into room-based 2D play: movement and shooting interact with enemies and obstacles, while pickups and a merchant support play; health loss leads to a game-over screen. The README describes procedurally generated rooms culminating in a boss, while the tree shows eight room controllers and a Boss model. Room-transition wiring is visible in excerpts, but boss placement and procedural-generation details are not, so those links are omitted. Some subsystem paths below use their exact enclosing source directory because their specific wiring was not sampled.

Main entry points: [`src/main/java/com/intech/bindingofisaac/controller/JeuController.java`](https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/JeuController.java) (Room controller), [`src/main/java/com/intech/bindingofisaac/controller/SalleAvecEnnemyController.java`](https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/SalleAvecEnnemyController.java) (Enemy room logic), [`src/main/java/personnages/Ennemis.java`](https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/personnages/Ennemis.java) (Enemies and boss), [`src/main/java/com/intech/bindingofisaac/controller/SceneController.java`](https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/SceneController.java) (Scene manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application flow"]
  node_main["JavaFX entry<br/>[Main.java]"]
  node_menu["Menu"]
  node_scene["Scene manager"]
  node_gameover["Game over"]
end

subgraph group_play["Room gameplay"]
  node_room["Room controller<br/>[JeuController.java]"]
  node_roomtypes["Room variants"]
  node_roomviews["Room layouts"]
  node_geometry["Walls and obstacles<br/>[SolidObject.java]"]
  node_playerentity["Player model<br/>[Perso.java]"]
end

subgraph group_combat["Combat and entities"]
  node_enemyroom["Enemy room logic"]
  node_enemies["Enemies and boss<br/>[Ennemis.java]"]
  node_boss["Boss model<br/>[Boss.java]"]
  node_playerfire["Player projectiles"]
  node_enemyfire["Enemy projectiles"]
  node_bombs["Bombs"]
end

subgraph group_items["Items and HUD"]
  node_inventory["Inventory counters"]
  node_pickups["Dropped items"]
  node_merchant["Merchant shop"]
  node_minimap["Minimap"]
end

node_player(("Player"))

node_player -->|"launches"| node_main
node_main -->|"loads"| node_menu
node_menu -->|"starts game"| node_scene
node_scene -->|"loads layout"| node_roomviews
node_scene -->|"creates controller"| node_roomtypes
node_menu -.-> node_gameover
node_player -->|"inputs movement"| node_room
node_room -->|"switches rooms"| node_scene
node_room -->|"builds collision walls"| node_geometry
node_room -->|"controls"| node_playerentity
node_room -->|"initializes HUD"| node_inventory
node_room -->|"initializes and updates"| node_bombs
node_room -->|"updates display"| node_pickups
node_room -->|"updates display"| node_minimap
node_room -->|"updates when present"| node_merchant
node_roomtypes -->|"extends gameplay"| node_enemyroom
node_enemyroom -->|"moves and fires"| node_enemies
node_enemyroom -->|"checks hits"| node_bombs
node_enemyroom -->|"checks hits"| node_playerfire
node_enemyroom -->|"checks player hits"| node_enemyfire
node_playerfire -->|"damages and removes"| node_enemies
node_enemies -->|"creates projectiles"| node_enemyfire
node_enemies -->|"drops item"| node_pickups
node_enemyroom -->|"updates drops"| node_pickups
node_boss -.-> node_enemies
node_pickups -.-> node_inventory
node_merchant -.-> node_inventory

click node_main "https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/bindingofisaac/Main.java"
click node_menu "https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/MenuController.java"
click node_scene "https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/SceneController.java"
click node_gameover "https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/GameOverController.java"
click node_room "https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/JeuController.java"
click node_roomtypes "https://github.com/chikhanhnguyen/the-binding-of-isaac/tree/main/src/main/java/com/intech/bindingofisaac/controller"
click node_roomviews "https://github.com/chikhanhnguyen/the-binding-of-isaac/tree/main/src/main/resources"
click node_geometry "https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/personnages/SolidObject.java"
click node_playerentity "https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/personnages/Perso.java"
click node_enemyroom "https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/SalleAvecEnnemyController.java"
click node_enemies "https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/personnages/Ennemis.java"
click node_boss "https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/personnages/Boss.java"
click node_playerfire "https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/BalleController.java"
click node_enemyfire "https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/BalleEnnemyController.java"
click node_bombs "https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/BombeController.java"
click node_inventory "https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/ItemController.java"
click node_pickups "https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/FreeItemController.java"
click node_merchant "https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/MarchandController.java"
click node_minimap "https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/MiniMapController.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_menu,node_scene,node_gameover toneBlue
class node_room,node_roomtypes,node_roomviews,node_geometry,node_playerentity toneAmber
class node_enemyroom,node_enemies,node_boss,node_playerfire,node_enemyfire,node_bombs toneMint
class node_inventory,node_pickups,node_merchant,node_minimap toneRose
class node_player toneIndigo
```

## Components

### Application flow

- [JavaFX entry](https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/bindingofisaac/Main.java): `src/main/java/bindingofisaac/Main.java`
- [Menu](https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/MenuController.java): `src/main/java/com/intech/bindingofisaac/controller/MenuController.java`
- [Scene manager](https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/SceneController.java): `src/main/java/com/intech/bindingofisaac/controller/SceneController.java`
- [Game over](https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/GameOverController.java): `src/main/java/com/intech/bindingofisaac/controller/GameOverController.java`

### Room gameplay

- [Room controller](https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/JeuController.java): `src/main/java/com/intech/bindingofisaac/controller/JeuController.java`
- [Room variants](https://github.com/chikhanhnguyen/the-binding-of-isaac/tree/main/src/main/java/com/intech/bindingofisaac/controller): `src/main/java/com/intech/bindingofisaac/controller`
- [Room layouts](https://github.com/chikhanhnguyen/the-binding-of-isaac/tree/main/src/main/resources): `src/main/resources`
- [Walls and obstacles](https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/personnages/SolidObject.java): `src/main/java/personnages/SolidObject.java`
- [Player model](https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/personnages/Perso.java): `src/main/java/personnages/Perso.java`

### Combat and entities

- [Enemy room logic](https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/SalleAvecEnnemyController.java): `src/main/java/com/intech/bindingofisaac/controller/SalleAvecEnnemyController.java`
- [Enemies and boss](https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/personnages/Ennemis.java): `src/main/java/personnages/Ennemis.java`
- [Boss model](https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/personnages/Boss.java): `src/main/java/personnages/Boss.java`
- [Player projectiles](https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/BalleController.java): `src/main/java/com/intech/bindingofisaac/controller/BalleController.java`
- [Enemy projectiles](https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/BalleEnnemyController.java): `src/main/java/com/intech/bindingofisaac/controller/BalleEnnemyController.java`
- [Bombs](https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/BombeController.java): `src/main/java/com/intech/bindingofisaac/controller/BombeController.java`

### Items and HUD

- [Inventory counters](https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/ItemController.java): `src/main/java/com/intech/bindingofisaac/controller/ItemController.java`
- [Dropped items](https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/FreeItemController.java): `src/main/java/com/intech/bindingofisaac/controller/FreeItemController.java`
- [Merchant shop](https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/MarchandController.java): `src/main/java/com/intech/bindingofisaac/controller/MarchandController.java`
- [Minimap](https://github.com/chikhanhnguyen/the-binding-of-isaac/blob/main/src/main/java/com/intech/bindingofisaac/controller/MiniMapController.java): `src/main/java/com/intech/bindingofisaac/controller/MiniMapController.java`

### Other components

- **Player**

## Connections

- Player → JavaFX entry: launches
- JavaFX entry → Menu: loads
- Menu → Scene manager: starts game
- Scene manager → Room layouts: loads layout
- Scene manager → Room variants: creates controller
- Menu → Game over
- Player → Room controller: inputs movement
- Room controller → Scene manager: switches rooms
- Room controller → Walls and obstacles: builds collision walls
- Room controller → Player model: controls
- Room controller → Inventory counters: initializes HUD
- Room controller → Bombs: initializes and updates
- Room controller → Dropped items: updates display
- Room controller → Minimap: updates display
- Room controller → Merchant shop: updates when present
- Room variants → Enemy room logic: extends gameplay
- Enemy room logic → Enemies and boss: moves and fires
- Enemy room logic → Bombs: checks hits
- Enemy room logic → Player projectiles: checks hits
- Enemy room logic → Enemy projectiles: checks player hits
- Player projectiles → Enemies and boss: damages and removes
- Enemies and boss → Enemy projectiles: creates projectiles
- Enemies and boss → Dropped items: drops item
- Enemy room logic → Dropped items: updates drops
- Boss model → Enemies and boss
- Dropped items → Inventory counters
- Merchant shop → Inventory counters
