École 42
So_long
Un petit jeu 2D vu de dessus : traverser une carte, collecter tous les objets, puis atteindre la sortie.
Le contexte
La carte est décrite dans un simple fichier texte, chargée puis validée : forme rectangulaire, bordure entièrement composée de murs, exactement un joueur et une sortie, au moins un objet à collecter, et surtout, sortie et objets réellement atteignables depuis la position de départ, vérifié par un flood fill sur la grille.
Choisir une bibliothèque portable
Le projet original s'appuyait sur minilibx-linux, une bibliothèque graphique X11 propre à Linux. Le choix a été de migrer vers MLX42, la même bibliothèque graphique multiplateforme déjà utilisée pour Cub3D dans ce portfolio, une décision qui a demandé de comprendre les différences de modèle entre les deux avant de pouvoir porter quoi que ce soit.
Repenser l'affichage
L'ancienne bibliothèque redessinait toute la carte à chaque frame sur un framebuffer manuel. MLX42 fonctionne différemment : les images restent affichées une fois attachées à la fenêtre. Les tuiles de sol et de mur sont donc construites une seule fois au démarrage, le joueur est une image unique dont la position est mise à jour à chaque déplacement, et chaque objet à collecter est une instance indépendante, simplement désactivée une fois ramassée plutôt que redessinée.
Ce que j'en retiens
Porter le même jeu d'une bibliothèque graphique à une autre a été plus instructif que prévu : deux bibliothèques peuvent exposer une API similaire en apparence tout en reposant sur des modèles de rendu opposés, redessiner entièrement chaque frame contre garder des images persistantes à l'écran. Ce genre de portage oblige à identifier le vrai modèle mental sous-jacent à une bibliothèque avant d'écrire la moindre ligne de code, plutôt que de traduire des appels de fonction un par un.
Code bientôt disponible sur GitHub.