YAML et scripts
Le YAML relie les scènes ; chaque script contient le texte à afficher.
Une bibliothèque C++ pour charger une histoire à embranchements et la parcourir dans un terminal en choisissant son propre chemin.
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.
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/.
Le YAML relie les scènes ; chaque script contient le texte à afficher.
make_story lit la description avec yaml-cpp.
Les scènes deviennent des nœuds reliés par les choix possibles.
Le terminal affiche le texte, valide le numéro et change de scène.
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.
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.
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.
Le ChoiceRunner affiche les options, refuse une saisie invalide
et poursuit jusqu'à atteindre une scène terminale.
CMake décrit une bibliothèque dynamique libzork.so et un
exécutable acceptant le chemin d'une histoire avec --story.
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.
Nœuds, arcs, chargement des scripts, histoire et parcours numéroté.
La scène active est gérée, mais le stockage des variables et l'inventaire ne le sont pas.
Smart Runner, conditions, actions, commandes intégrées, undo/redo, sauvegarde, restauration et exportation HTML.
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();
}
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.
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.