# iskarip/silent-cat architecture

> Architecture diagram of the GitHub repository iskarip/silent-cat, 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/iskarip/silent-cat
- Repository: https://github.com/iskarip/silent-cat

## Overview

Silent Cat is a desktop horror-adventure game: the player selects a character, explores mansion levels, avoids enemies, collects items, solves room puzzles, and seeks the cat while managing limited lives and flashlight battery. The game controller coordinates the real-time gameplay stages and Swing views. The README describes checkpoints and saved progress, but the available tree and excerpts do not establish a persistence implementation, so no storage subsystem is shown. Some feature links are based on documented capabilities and module names; unsampled wiring is omitted.

Main entry points: [`src/Controlador/ControladorNivel.java`](https://github.com/iskarip/silent-cat/blob/main/src/Controlador/ControladorNivel.java) (Level Controller), [`src/Modelo/Personaje.java`](https://github.com/iskarip/silent-cat/blob/main/src/Modelo/Personaje.java) (Player Character), [`src/Controlador/ControladorAcertijo.java`](https://github.com/iskarip/silent-cat/blob/main/src/Controlador/ControladorAcertijo.java) (Puzzle Control), [`src/Controlador/ControladorMovimiento.java`](https://github.com/iskarip/silent-cat/blob/main/src/Controlador/ControladorMovimiento.java) (Movement)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_startup["Startup and UI"]
  node_main["Application Entry<br/>[Main.java]"]
  node_principal["Main Controller"]
  node_frame["Game Window<br/>[JuegoFrame.java]"]
  node_selection["Character Selection"]
end

subgraph group_gameplay["Gameplay Control"]
  node_gamecontrol["Level Controller"]
  node_keyboard["Keyboard Input"]
  node_movement["Movement"]
  node_combat["Combat"]
  node_enemycontrol["Enemy Updates"]
  node_puzzlecontrol["Puzzle Control"]
  node_itemcontrol["Item Control"]
  node_ambientcontrol["Ambient Events"]
end

subgraph group_world["Game World"]
  node_partida["Game State<br/>[Partida.java]"]
  node_character["Player Character<br/>[Personaje.java]"]
  node_level["Level and Rooms<br/>[Nivel.java]"]
  node_factory["Level Factory<br/>[NivelFactory.java]"]
  node_collision["Collision Map<br/>[MapaColision.java]"]
  node_enemy["Enemies<br/>[Enemigo.java]"]
  node_puzzle["Riddles<br/>[Acertijo.java]"]
  node_items["Items and Inventory<br/>[Inventario.java]"]
  node_cat["Cat and Flashbacks<br/>[Gato.java]"]
end

subgraph group_presentation["Presentation"]
  node_levelview["Level Rendering<br/>[NivelPanel.java]"]
  node_puzzleview["Puzzle Screen<br/>[AcertijoPanel.java]"]
  node_statusview["Health and Battery<br/>[BarraVida.java]"]
  node_pauseview["Pause and End<br/>[PausaPanel.java]"]
  node_flashview["Cat Flashback View<br/>[FlashbackGato.java]"]
end

node_player(("Player"))

node_player -->|"starts game"| node_main
node_main -->|"creates window"| node_frame
node_main -->|"creates controller"| node_principal
node_principal -->|"controls screens"| node_frame
node_player -->|"chooses character"| node_selection
node_selection -->|"selection input"| node_principal
node_principal -->|"starts gameplay"| node_gamecontrol
node_gamecontrol -->|"reads state"| node_partida
node_gamecontrol -->|"uses input"| node_keyboard
node_gamecontrol -->|"updates movement"| node_movement
node_gamecontrol -->|"updates enemies"| node_enemycontrol
node_gamecontrol -->|"dispatches attacks"| node_combat
node_gamecontrol -->|"checks proximity"| node_puzzlecontrol
node_gamecontrol -->|"checks pickups"| node_itemcontrol
node_gamecontrol -->|"checks events"| node_ambientcontrol
node_gamecontrol -->|"updates view"| node_levelview
node_movement -->|"reads keys"| node_keyboard
node_movement -->|"moves character"| node_character
node_movement -->|"checks bounds"| node_collision
node_enemycontrol -->|"updates AI"| node_enemy
node_combat -->|"uses attacker"| node_character
node_combat -->|"targets enemies"| node_enemy
node_puzzlecontrol -->|"reads riddle"| node_level
node_puzzlecontrol -->|"validates answer"| node_character
node_puzzlecontrol -->|"checks solution"| node_puzzle
node_puzzlecontrol -->|"shows and reads"| node_puzzleview
node_itemcontrol -->|"checks level items"| node_level
node_itemcontrol -->|"grants pickups"| node_character
node_character -->|"uses inventory"| node_items
node_ambientcontrol -->|"checks zones"| node_level
node_ambientcontrol -->|"triggers flashback"| node_cat
node_ambientcontrol -->|"shows flashback"| node_flashview
node_factory -->|"creates levels"| node_level
node_levelview -->|"renders character"| node_character
node_levelview -->|"renders enemies"| node_enemy
node_levelview -->|"shows status"| node_statusview
node_frame -->|"hosts screens"| node_pauseview
node_player -->|"controls gameplay"| node_keyboard

click node_main "https://github.com/iskarip/silent-cat/blob/main/src/Main.java"
click node_principal "https://github.com/iskarip/silent-cat/blob/main/src/Controlador/ControladorPrincipal.java"
click node_frame "https://github.com/iskarip/silent-cat/blob/main/src/Vista/JuegoFrame.java"
click node_selection "https://github.com/iskarip/silent-cat/blob/main/src/Vista/SeleccionPersonajePanel.java"
click node_gamecontrol "https://github.com/iskarip/silent-cat/blob/main/src/Controlador/ControladorNivel.java"
click node_keyboard "https://github.com/iskarip/silent-cat/blob/main/src/Controlador/ControladorTeclado.java"
click node_movement "https://github.com/iskarip/silent-cat/blob/main/src/Controlador/ControladorMovimiento.java"
click node_combat "https://github.com/iskarip/silent-cat/blob/main/src/Controlador/ControladorCombate.java"
click node_enemycontrol "https://github.com/iskarip/silent-cat/blob/main/src/Controlador/ControladorEnemigos.java"
click node_puzzlecontrol "https://github.com/iskarip/silent-cat/blob/main/src/Controlador/ControladorAcertijo.java"
click node_itemcontrol "https://github.com/iskarip/silent-cat/blob/main/src/Controlador/ControladorItems.java"
click node_ambientcontrol "https://github.com/iskarip/silent-cat/blob/main/src/Controlador/ControladorAmbiente.java"
click node_partida "https://github.com/iskarip/silent-cat/blob/main/src/Modelo/Partida.java"
click node_character "https://github.com/iskarip/silent-cat/blob/main/src/Modelo/Personaje.java"
click node_level "https://github.com/iskarip/silent-cat/blob/main/src/Modelo/Nivel.java"
click node_factory "https://github.com/iskarip/silent-cat/blob/main/src/Modelo/NivelFactory.java"
click node_collision "https://github.com/iskarip/silent-cat/blob/main/src/Modelo/MapaColision.java"
click node_enemy "https://github.com/iskarip/silent-cat/blob/main/src/Modelo/Enemigo.java"
click node_puzzle "https://github.com/iskarip/silent-cat/blob/main/src/Modelo/Acertijo.java"
click node_items "https://github.com/iskarip/silent-cat/blob/main/src/Modelo/Inventario.java"
click node_cat "https://github.com/iskarip/silent-cat/blob/main/src/Modelo/Gato.java"
click node_levelview "https://github.com/iskarip/silent-cat/blob/main/src/Vista/NivelPanel.java"
click node_puzzleview "https://github.com/iskarip/silent-cat/blob/main/src/Vista/AcertijoPanel.java"
click node_statusview "https://github.com/iskarip/silent-cat/blob/main/src/Vista/BarraVida.java"
click node_pauseview "https://github.com/iskarip/silent-cat/blob/main/src/Vista/PausaPanel.java"
click node_flashview "https://github.com/iskarip/silent-cat/blob/main/src/Vista/FlashbackGato.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_principal,node_frame,node_selection toneBlue
class node_gamecontrol,node_keyboard,node_movement,node_combat,node_enemycontrol,node_puzzlecontrol,node_itemcontrol,node_ambientcontrol toneAmber
class node_partida,node_character,node_level,node_factory,node_collision,node_enemy,node_puzzle,node_items,node_cat toneMint
class node_levelview,node_puzzleview,node_statusview,node_pauseview,node_flashview toneRose
class node_player toneIndigo
```

## Components

### Startup and UI

- [Application Entry](https://github.com/iskarip/silent-cat/blob/main/src/Main.java): `src/Main.java`
- [Main Controller](https://github.com/iskarip/silent-cat/blob/main/src/Controlador/ControladorPrincipal.java): `src/Controlador/ControladorPrincipal.java`
- [Game Window](https://github.com/iskarip/silent-cat/blob/main/src/Vista/JuegoFrame.java): `src/Vista/JuegoFrame.java`
- [Character Selection](https://github.com/iskarip/silent-cat/blob/main/src/Vista/SeleccionPersonajePanel.java): `src/Vista/SeleccionPersonajePanel.java`

### Gameplay Control

- [Level Controller](https://github.com/iskarip/silent-cat/blob/main/src/Controlador/ControladorNivel.java): `src/Controlador/ControladorNivel.java`
- [Keyboard Input](https://github.com/iskarip/silent-cat/blob/main/src/Controlador/ControladorTeclado.java): `src/Controlador/ControladorTeclado.java`
- [Movement](https://github.com/iskarip/silent-cat/blob/main/src/Controlador/ControladorMovimiento.java): `src/Controlador/ControladorMovimiento.java`
- [Combat](https://github.com/iskarip/silent-cat/blob/main/src/Controlador/ControladorCombate.java): `src/Controlador/ControladorCombate.java`
- [Enemy Updates](https://github.com/iskarip/silent-cat/blob/main/src/Controlador/ControladorEnemigos.java): `src/Controlador/ControladorEnemigos.java`
- [Puzzle Control](https://github.com/iskarip/silent-cat/blob/main/src/Controlador/ControladorAcertijo.java): `src/Controlador/ControladorAcertijo.java`
- [Item Control](https://github.com/iskarip/silent-cat/blob/main/src/Controlador/ControladorItems.java): `src/Controlador/ControladorItems.java`
- [Ambient Events](https://github.com/iskarip/silent-cat/blob/main/src/Controlador/ControladorAmbiente.java): `src/Controlador/ControladorAmbiente.java`

### Game World

- [Game State](https://github.com/iskarip/silent-cat/blob/main/src/Modelo/Partida.java): `src/Modelo/Partida.java`
- [Player Character](https://github.com/iskarip/silent-cat/blob/main/src/Modelo/Personaje.java): `src/Modelo/Personaje.java`
- [Level and Rooms](https://github.com/iskarip/silent-cat/blob/main/src/Modelo/Nivel.java): `src/Modelo/Nivel.java`
- [Level Factory](https://github.com/iskarip/silent-cat/blob/main/src/Modelo/NivelFactory.java): `src/Modelo/NivelFactory.java`
- [Collision Map](https://github.com/iskarip/silent-cat/blob/main/src/Modelo/MapaColision.java): `src/Modelo/MapaColision.java`
- [Enemies](https://github.com/iskarip/silent-cat/blob/main/src/Modelo/Enemigo.java): `src/Modelo/Enemigo.java`
- [Riddles](https://github.com/iskarip/silent-cat/blob/main/src/Modelo/Acertijo.java): `src/Modelo/Acertijo.java`
- [Items and Inventory](https://github.com/iskarip/silent-cat/blob/main/src/Modelo/Inventario.java): `src/Modelo/Inventario.java`
- [Cat and Flashbacks](https://github.com/iskarip/silent-cat/blob/main/src/Modelo/Gato.java): `src/Modelo/Gato.java`

### Presentation

- [Level Rendering](https://github.com/iskarip/silent-cat/blob/main/src/Vista/NivelPanel.java): `src/Vista/NivelPanel.java`
- [Puzzle Screen](https://github.com/iskarip/silent-cat/blob/main/src/Vista/AcertijoPanel.java): `src/Vista/AcertijoPanel.java`
- [Health and Battery](https://github.com/iskarip/silent-cat/blob/main/src/Vista/BarraVida.java): `src/Vista/BarraVida.java`
- [Pause and End](https://github.com/iskarip/silent-cat/blob/main/src/Vista/PausaPanel.java): `src/Vista/PausaPanel.java`
- [Cat Flashback View](https://github.com/iskarip/silent-cat/blob/main/src/Vista/FlashbackGato.java): `src/Vista/FlashbackGato.java`

### Other components

- **Player**

## Connections

- Player → Application Entry: starts game
- Application Entry → Game Window: creates window
- Application Entry → Main Controller: creates controller
- Main Controller → Game Window: controls screens
- Player → Character Selection: chooses character
- Character Selection → Main Controller: selection input
- Main Controller → Level Controller: starts gameplay
- Level Controller → Game State: reads state
- Level Controller → Keyboard Input: uses input
- Level Controller → Movement: updates movement
- Level Controller → Enemy Updates: updates enemies
- Level Controller → Combat: dispatches attacks
- Level Controller → Puzzle Control: checks proximity
- Level Controller → Item Control: checks pickups
- Level Controller → Ambient Events: checks events
- Level Controller → Level Rendering: updates view
- Movement → Keyboard Input: reads keys
- Movement → Player Character: moves character
- Movement → Collision Map: checks bounds
- Enemy Updates → Enemies: updates AI
- Combat → Player Character: uses attacker
- Combat → Enemies: targets enemies
- Puzzle Control → Level and Rooms: reads riddle
- Puzzle Control → Player Character: validates answer
- Puzzle Control → Riddles: checks solution
- Puzzle Control → Puzzle Screen: shows and reads
- Item Control → Level and Rooms: checks level items
- Item Control → Player Character: grants pickups
- Player Character → Items and Inventory: uses inventory
- Ambient Events → Level and Rooms: checks zones
- Ambient Events → Cat and Flashbacks: triggers flashback
- Ambient Events → Cat Flashback View: shows flashback
- Level Factory → Level and Rooms: creates levels
- Level Rendering → Player Character: renders character
- Level Rendering → Enemies: renders enemies
- Level Rendering → Health and Battery: shows status
- Game Window → Pause and End: hosts screens
- Player → Keyboard Input: controls gameplay
