> For the complete documentation index, see [llms.txt](https://madsdocs.gitbook.io/aracde-documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://madsdocs.gitbook.io/aracde-documentation/arcade-project-documentation.md).

# Arcade Project Documentation

## Documentation Chapters:

* **Overview of the Arcade Project**
* **Getting set up**
  * <mark style="color:blue;">Project installation</mark>
  * <mark style="color:blue;">Usage</mark>
* **Technical documentation**
  * <mark style="color:blue;">Project organisation</mark>
  * <mark style="color:blue;">Project Architecture</mark>
  * <mark style="color:blue;">Doc on Modules && Classes</mark>

{% hint style="info" %}
**Note:** This project was realized under the **EPITECH** computer science program with the intention of imparting expert-level skills in low-level computer paradigms. However, please be aware that this project cannot be implemented for commercial use. ;)
{% endhint %}

## Overview

The objective of this project is to develop arcade-like software, envisioned to support the dynamic execution of different games using various libraries at runtime. Among the plethora of library options available to us, SDL2 and NCurses were mandatory choices. Additionally, we opted to integrate a third library, SFML, into our framework.

**Step 1: Dynamic Library Loaders (DLLoaders)**

* The initial phase involved crafting a `DLLoaders` class to enable our software to switch between libraries dynamically at runtime. This capability was facilitated by the creation of the `DLLoaders.hpp` class, which leverages the `dlopen`, `dlclose`, and `dlsym` functions to load and execute new libraries as needed.

**Step 2: Creating the Graphical Rendering Class**

* To address the diverse requirements of graphical rendering, we established an `IRender.hpp` class as the cornerstone interface for our graphical rendering module. This interface underpins three derivative classes: `ANcurses.hpp`, `ASdl2.hpp`, and `ASfml.hpp`, each corresponding to a specific rendering library. Our design philosophy focused on embracing generic rendering implementations, thereby smoothing the integration process across different graphical libraries.

**Step 3: Crafting the Game Logic Interface**

* For the game logic framework, we introduced an `IGame` class interface. This interface forms the foundation for two specialized abstract classes: `ASnake` and `ATetris`, dedicated to encapsulating the logic for the Snake and Tetris games, respectively. These classes are intricately designed to foster the development and execution of game logic, ensuring a cohesive and immersive gaming experience.

***

## Getting Set Up

{% content-ref url="/pages/l83ZRyW32CS2EOgr9uc6" %}
[Project installation](/aracde-documentation/getting-setup/project-installation.md)
{% endcontent-ref %}

{% content-ref url="/pages/bjzE9V7XfwsPYVE7nzAV" %}
[Usage](/aracde-documentation/getting-setup/usage.md)
{% endcontent-ref %}

***

## Technical Documentation

We've put together some helpful guides for you to get setup with our product quickly and easily.

{% content-ref url="/pages/ZSyjuBrQOFWm4r8IfwAq" %}
[Project organisation](/aracde-documentation/technical-documentation/project-organisation.md)
{% endcontent-ref %}

{% content-ref url="/pages/v2XdUyICqMJVG7kkGoSe" %}
[Project Architecture](/aracde-documentation/technical-documentation/project-architecture.md)
{% endcontent-ref %}

{% content-ref url="/pages/Ffzj8uQJvTU64yZU4KTx" %}
[Doc on Modules && Classes](/aracde-documentation/technical-documentation/doc-on-modules-and-and-classes.md)
{% endcontent-ref %}
