Logo de PortfoLaurens

PortfoLaurens

logo alternatif gauche

Projet Golang :

Quadtree et extensions

logo alternatif droit
rendu du projet

Contexte & description du projet

Dans le cadre de la Situation d'Apprentissage et d'Évaluation (SAE) "Implémentation d'un besoin client", on nous a donné une base de jeu Golang (un terrain divisé en cases, sur lequel un joueur peut se déplacer librement) en nous demandant d'y ajouter des fonctionnalités, dont la principale était d'optimiser la gestion du terrain avec un Quadtree. Ce projet a pris place sur une période de deux mois, de décembre 2024 à janvier 2025, durant mon premier semestre en BUT Informatique à l'IUT de Nantes. Nous étions alors en groupe de 2.

Méthodologie et outils

Plus précisément, la première étape consistait à se familiariser avec la base de code existante et à comprendre son fonctionnement. Cela fait, nous sommes passés sur le développement de fonctions permettant de lire des fichiers et de stocker leur contenu en mémoire sous forme de tableaux, puis d'optimiser leur traitement en remplaçant les tableaux par des structures de type Quadtree. Une fois cette étape testée et validée, nous avons pu nous concentrer sur l'implémentation de fonctionnalités supplémentaires pour améliorer l'interaction entre le joueur et le terrain.

Le projet a été développé en utilisant le langage Go (Golang), un langage de programmation open source conçu pour la simplicité, la performance et la concurrence. Le jeu a été construit grâce à la bibliothèque Ebitengine, une bibliothèque légère et facile à utiliser pour créer des jeux 2D en Go. Par ailleurs, nous avons utilisé Visual Studio Code comme environnement de développement intégré (IDE).

Contributions personnelles

Génération du terrain (Quadtree)

Pour cette partie, centrée sur la lecture de fichiers et leur sauvegarde en mémoire, moi et mon collègue avons créé ensemble 4 fonctions :

Principe de l'affichage depuis un tableau

Principe de l'affichage depuis un tableau : la grille représente la terrain complet, la partie bleue est la zone visible à l'écran, la tuile rouge est celle pointée par la caméra

Fonctionnement d'un Quadtree

Fonctionnement d'un Quadtree, une structure de données arborescente qui permet de diviser l'espace en 4 régions plus petites

La transition de la génération du terrain vers un Quadtree a permis d'optimiser la complexité algorithmique et de rendre le déplacement du joueur plus fluide. J'ai dû adapter le code existant pour intégrer cette nouvelle structure, ce qui a nécessité une bonne compréhension des algorithmes de division d'espace.

Extensions

Après avoir implémenté le Quadtree, nous avons ajouté plusieurs fonctionnalités pour améliorer l'expérience de jeu. Concernant celles dont je me suis chargé :

Illustration de l'interdiction de marcher sur l'eau

Illustration de l'interdiction de marcher sur l'eau quand le terrain est un océan

Ces extensions ont permis d'améliorer significativement l'expérience de jeu en rendant le déplacement plus réaliste et en offrant une meilleure immersion grâce à la gestion de la caméra et du zoom. De plus, chaque fonction a été clairement documentée.

Résultats et livrables

Le projet a abouti à la création d'un système de génération de terrain optimisé, ainsi qu'à plusieurs extensions pour améliorer l'expérience utilisateur. En plus des extensions que j'ai développées, mon colègue a ajouté la possibilité de générer un terrain aléatoire aux dimensions souhaitées et de le sauvergarder dans un fichier, l'animation des tuiles pour un rendu plus vivant, ainsi que la possibilité de poser 2 téléporteurs (se superposant sur la tuile) et de se déplacer de l'un à l'autre. Chaque fonction de la partie "Génération du terrain (Quadtree)" a été testée et validée, et tout a été commenté au mieux. Enfin, les cas particuliers et exceptions ont été pris en compte pour assurer la robustesse du système.

Par le biais d'une release GitLab, le code entier a été rendu pour évaluation. La license GPLv3 du projet autorisant son partage, le code est disponible ici avec les consignes . Ma part du travail m'a valu la note de 18/20.

Compétences développées

Ce projet m'a clairement permis de m'améliorer en programmation Go, pour commencer quelque part. J'ai également renforcé mes compétences en algorithmique avec l'implémentation du Quadtree, en qualité de développement de part les tests et la gestion des erreurs et cas exceptionnels (fichier vide, monde entièrement constitué d'eau, etc.), en gestion de projet grâce à la collaboration avec mon collègue et la documentation, en conceptualisation ("Comment implémenter cette extension ?"), et plus simplement en communication professionnelle quant au fait d'expliquer clairement des concepts abstraits et de s'entraider quand on bloquait sur nos extensions respectives.

logo de Golang

Bilan

En conclusion, ce projet a été une expérience enrichissante que j'ai particulièrement appréciée. Le challenge de trouver comment implémenter les extensions (pour la terre ronde, j'étais parti sur une mauvaise idée pendant 27 heures avant de finalement trouver une solution viable), le plaisir de voir des tests passer sans erreur et le système s'agrémenter au fil du temps, l'idée stimulante de nous donner une base à comprendre puis améliorer, ... Si le Projet "Qui Est-ce ?" est mon favori du deuxième semestre, ce projet quadtree est assurément mon projet favori du premier semestre et je suis certain que j'ai gagné beaucoup en compétences et en confiance en le menant à bien.