# rvnsenkuuu/so_long architecture

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

- Interactive diagram: https://gitdiagram.com/rvnsenkuuu/so_long
- Repository: https://github.com/rvnsenkuuu/so_long

## Overview

This repository implements so_long, a small tile-based game launched with a map-file argument. Its central workflow is to validate the arguments and map, initialize the game window, render the board, and update the player’s position as input arrives; collecting all items enables the exit, while bonus movement also handles bombs. The tree shows parallel normal and bonus implementations. Main-flow calls are visible in the sampled entry point, but most subsystem wiring is inferred only from filenames, so uncertain links are omitted.

Main entry points: [`srcs/main.c`](https://github.com/rvnsenkuuu/so_long/blob/main/srcs/main.c) (Game entry), [`srcs_bonus/init_imgs.c`](https://github.com/rvnsenkuuu/so_long/blob/main/srcs_bonus/init_imgs.c) (Bonus sprites), [`srcs/player_move.c`](https://github.com/rvnsenkuuu/so_long/blob/main/srcs/player_move.c) (Player movement), [`srcs_bonus/main_bonus.c`](https://github.com/rvnsenkuuu/so_long/blob/main/srcs_bonus/main_bonus.c) (Bonus entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_startup["Startup and map"]
  node_main["Game entry<br/>[main.c]"]
  node_arguments["Argument checks<br/>[check_argv.c]"]
  node_map_init["Map initialization<br/>[init_map.c]"]
  node_map_read["Map reading<br/>[read_map.c]"]
  node_map_check["Map validation<br/>[check_map.c]"]
  node_map_utils["Map checks<br/>[check_map_utils.c]"]
  node_path_check["Path validation<br/>[flood_fill.c]"]
end

subgraph group_gameplay["Gameplay"]
  node_game_map["Game map<br/>[so_long.h]"]
  node_player_move["Player movement<br/>[player_move.c]"]
  node_game_condition["Win and quit<br/>[game_condition.c]"]
  node_errors["Error handling<br/>[error.c]"]
end

subgraph group_display["Display"]
  node_mlx_init["Window setup<br/>[handle_mlx.c]"]
  node_render["Game rendering<br/>[render_game.c]"]
  node_mlx["MiniLibX<br/>[mlx.h]"]
end

subgraph group_bonus["Bonus mode"]
  node_bonus_main["Bonus entry<br/>[main_bonus.c]"]
  node_bonus_moves["Bonus movement"]
  node_bonus_condition["Bonus outcomes"]
  node_bonus_render["Bonus rendering"]
  node_bonus_images["Bonus sprites<br/>[init_imgs.c]"]
  node_bonus_map["Bonus map checks<br/>[check_map_bonus.c]"]
end

node_player(("Player"))

node_player -->|"starts"| node_main
node_main -->|"checks arguments"| node_arguments
node_main -->|"initializes map"| node_map_init
node_main -->|"initializes display"| node_mlx_init
node_player_move -->|"sets outcome"| node_game_condition
node_bonus_moves -->|"sets outcome"| node_bonus_condition
node_bonus_main -->|"initializes sprites"| node_bonus_images
node_bonus_render -->|"uses sprites"| node_bonus_images

click node_main "https://github.com/rvnsenkuuu/so_long/blob/main/srcs/main.c"
click node_arguments "https://github.com/rvnsenkuuu/so_long/blob/main/srcs/check_argv.c"
click node_map_init "https://github.com/rvnsenkuuu/so_long/blob/main/srcs/init_map.c"
click node_map_read "https://github.com/rvnsenkuuu/so_long/blob/main/srcs/read_map.c"
click node_map_check "https://github.com/rvnsenkuuu/so_long/blob/main/srcs/check_map.c"
click node_map_utils "https://github.com/rvnsenkuuu/so_long/blob/main/srcs/check_map_utils.c"
click node_path_check "https://github.com/rvnsenkuuu/so_long/blob/main/srcs/flood_fill.c"
click node_game_map "https://github.com/rvnsenkuuu/so_long/blob/main/include/so_long.h"
click node_player_move "https://github.com/rvnsenkuuu/so_long/blob/main/srcs/player_move.c"
click node_game_condition "https://github.com/rvnsenkuuu/so_long/blob/main/srcs/game_condition.c"
click node_errors "https://github.com/rvnsenkuuu/so_long/blob/main/srcs/error.c"
click node_mlx_init "https://github.com/rvnsenkuuu/so_long/blob/main/srcs/handle_mlx.c"
click node_render "https://github.com/rvnsenkuuu/so_long/blob/main/srcs/render_game.c"
click node_mlx "https://github.com/rvnsenkuuu/so_long/blob/main/lib/mlx-linux/mlx.h"
click node_bonus_main "https://github.com/rvnsenkuuu/so_long/blob/main/srcs_bonus/main_bonus.c"
click node_bonus_moves "https://github.com/rvnsenkuuu/so_long/blob/main/srcs_bonus/player_move_bonus.c"
click node_bonus_condition "https://github.com/rvnsenkuuu/so_long/blob/main/srcs_bonus/game_condition_bonus.c"
click node_bonus_render "https://github.com/rvnsenkuuu/so_long/blob/main/srcs_bonus/render_game_bonus.c"
click node_bonus_images "https://github.com/rvnsenkuuu/so_long/blob/main/srcs_bonus/init_imgs.c"
click node_bonus_map "https://github.com/rvnsenkuuu/so_long/blob/main/srcs_bonus/check_map_bonus.c"

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_arguments,node_map_init,node_map_read,node_map_check,node_map_utils,node_path_check toneBlue
class node_game_map,node_player_move,node_game_condition,node_errors toneAmber
class node_mlx_init,node_render,node_mlx toneMint
class node_bonus_main,node_bonus_moves,node_bonus_condition,node_bonus_render,node_bonus_images,node_bonus_map toneRose
class node_player toneIndigo
```

## Components

### Startup and map

- [Game entry](https://github.com/rvnsenkuuu/so_long/blob/main/srcs/main.c): `srcs/main.c`
- [Argument checks](https://github.com/rvnsenkuuu/so_long/blob/main/srcs/check_argv.c): `srcs/check_argv.c`
- [Map initialization](https://github.com/rvnsenkuuu/so_long/blob/main/srcs/init_map.c): `srcs/init_map.c`
- [Map reading](https://github.com/rvnsenkuuu/so_long/blob/main/srcs/read_map.c): `srcs/read_map.c`
- [Map validation](https://github.com/rvnsenkuuu/so_long/blob/main/srcs/check_map.c): `srcs/check_map.c`
- [Map checks](https://github.com/rvnsenkuuu/so_long/blob/main/srcs/check_map_utils.c): `srcs/check_map_utils.c`
- [Path validation](https://github.com/rvnsenkuuu/so_long/blob/main/srcs/flood_fill.c): `srcs/flood_fill.c`

### Gameplay

- [Game map](https://github.com/rvnsenkuuu/so_long/blob/main/include/so_long.h): `include/so_long.h`
- [Player movement](https://github.com/rvnsenkuuu/so_long/blob/main/srcs/player_move.c): `srcs/player_move.c`
- [Win and quit](https://github.com/rvnsenkuuu/so_long/blob/main/srcs/game_condition.c): `srcs/game_condition.c`
- [Error handling](https://github.com/rvnsenkuuu/so_long/blob/main/srcs/error.c): `srcs/error.c`

### Display

- [Window setup](https://github.com/rvnsenkuuu/so_long/blob/main/srcs/handle_mlx.c): `srcs/handle_mlx.c`
- [Game rendering](https://github.com/rvnsenkuuu/so_long/blob/main/srcs/render_game.c): `srcs/render_game.c`
- [MiniLibX](https://github.com/rvnsenkuuu/so_long/blob/main/lib/mlx-linux/mlx.h): `lib/mlx-linux/mlx.h`

### Bonus mode

- [Bonus entry](https://github.com/rvnsenkuuu/so_long/blob/main/srcs_bonus/main_bonus.c): `srcs_bonus/main_bonus.c`
- [Bonus movement](https://github.com/rvnsenkuuu/so_long/blob/main/srcs_bonus/player_move_bonus.c): `srcs_bonus/player_move_bonus.c`
- [Bonus outcomes](https://github.com/rvnsenkuuu/so_long/blob/main/srcs_bonus/game_condition_bonus.c): `srcs_bonus/game_condition_bonus.c`
- [Bonus rendering](https://github.com/rvnsenkuuu/so_long/blob/main/srcs_bonus/render_game_bonus.c): `srcs_bonus/render_game_bonus.c`
- [Bonus sprites](https://github.com/rvnsenkuuu/so_long/blob/main/srcs_bonus/init_imgs.c): `srcs_bonus/init_imgs.c`
- [Bonus map checks](https://github.com/rvnsenkuuu/so_long/blob/main/srcs_bonus/check_map_bonus.c): `srcs_bonus/check_map_bonus.c`

### Other components

- **Player**

## Connections

- Player → Game entry: starts
- Game entry → Argument checks: checks arguments
- Game entry → Map initialization: initializes map
- Game entry → Window setup: initializes display
- Player movement → Win and quit: sets outcome
- Bonus movement → Bonus outcomes: sets outcome
- Bonus entry → Bonus sprites: initializes sprites
- Bonus rendering → Bonus sprites: uses sprites
