Rush C++ 50 h Projet individuel

LibZork

Une bibliothèque C++ pour charger une histoire à embranchements et la parcourir dans un terminal en choisissant son propre chemin.

C++20 CMake yaml-cpp STL

Le projet en quelques mots

LibZork reprend le principe d'un livre dont vous êtes le héros. Une histoire est divisée en scènes ; à la fin de chaque scène, le lecteur choisit une suite parmi plusieurs possibilités.

Le fichier YAML décrit le titre, les scènes et leurs connexions. Les textes sont conservés dans des fichiers séparés. La bibliothèque transforme cet ensemble en graphe, puis un programme en ligne de commande affiche la scène courante et attend le numéro du prochain choix.

Le sujet prévoyait ensuite des variables, un mode de saisie libre, la sauvegarde et une exportation HTML. Le rendu conservé se concentre sur le socle : construction de l'histoire et parcours par choix numérotés.

Du fichier d'histoire au terminal

Le traitement sépare les données de l'histoire, leur représentation en mémoire et la manière de jouer. Les interfaces publiques restent dans include/, tandis que les classes d'implémentation sont placées dans src/.

01

YAML et scripts

Le YAML relie les scènes ; chaque script contient le texte à afficher.

02

Story

make_story lit la description avec yaml-cpp.

03

Node et Arc

Les scènes deviennent des nœuds reliés par les choix possibles.

04

Choice Runner

Le terminal affiche le texte, valide le numéro et change de scène.

Gestion de la mémoire

Les histoires, les scènes et les runners sont possédés par des std::unique_ptr. Les arcs conservent des références non propriétaires vers les scènes cibles, déjà détenues par l'histoire.

Ce qui est présent

Histoire

Graphe de scènes

Les classes Node et Arc conservent le texte, le libellé des choix et la scène ciblée. Une scène sans choix termine le récit.

Chargement

Lecture du format YAML

Le titre, le répertoire des scripts, les scènes et leurs choix sont lus avec yaml-cpp, puis assemblés dans un objet Story.

Exécution

Choix numérotés

Le ChoiceRunner affiche les options, refuse une saisie invalide et poursuit jusqu'à atteindre une scène terminale.

Outils

Bibliothèque et exécutable

CMake décrit une bibliothèque dynamique libzork.so et un exécutable acceptant le chemin d'une histoire avec --story.

État du rendu conservé

Le dépôt contient aussi les interfaces prévues pour la suite du sujet. Elles ne doivent toutefois pas être confondues avec des fonctionnalités terminées.

Implémenté

Socle narratif

Nœuds, arcs, chargement des scripts, histoire et parcours numéroté.

Partiel

Store

La scène active est gérée, mais le stockage des variables et l'inventaire ne le sont pas.

Non implémenté

Fonctions avancées

Smart Runner, conditions, actions, commandes intégrées, undo/redo, sauvegarde, restauration et exportation HTML.

Un choix dans le graphe

Cette méthode du rendu retrouve la destination d'un choix et protège l'accès lorsque l'indice demandé dépasse la liste disponible.

const Node* NodeImpl::get_choice(
    size_t index,
    bool check_conditions) const
{
    (void)check_conditions;
    if (index >= choice_.size())
        return nullptr;

    Arc choice = choice_.at(index);
    return choice.get_node();
}

Synthèse du projet

Travail réalisé

Le rendu met en place la base d'un moteur d'histoires à embranchements : lecture des données, représentation sous forme de graphe et navigation interactive avec des choix numérotés.

Apports techniques

Le projet met en pratique le polymorphisme, les fabriques d'objets, la séparation entre API et implémentation ainsi que la gestion de propriété avec std::unique_ptr en C++20.