ELouan Dhennin

Portfolio

Prevakia

Développé début 2023, Prevakia est mon premier gros projet de jeu réalisé avec un minimum de sérieux. En groupe de trois, accompagné de M. Toé Joao et de M. Nicolas Vivien, nous avons développé en deux mois et demi un jeu complet.
Le jeu a été réalisé avec Pygame en Python.

Image d'illustration du jeu
Gameplay d'infiltration. Il faut éviter de rentrer dans les zones éclairées par les ennemis.

Ci-dessus, un extrait du troisième niveau du jeu. Eugène, le personnage principal, est accroché au plafond pour éviter un ennemi. Le jeu est un mélange entre Mario et Metroid, à la différence qu’il est impossible de se battre, sauf contre le boss final. On peut également remarquer ici plusieurs animations. Joao (aujourd’hui en école d’animation à Paris) nous a d’ailleurs concocté de magnifiques animations que vous avez vu sur la page principale.

Image d'illustration du jeu
Le grappin en action, qui attire Eugène au sommet de la pièce.

Pour parler plus en profondeur du développement, Prevakia est une vraie fierté. C’est le premier jet de ce que nous aspirons à devenir : des développeurs de jeux. Mais pour être honnête, je ne suis pas très fier du code lui-même.
Je ne recommanderais pas de le consulter. Nous avions tenté d'utiliser certains paradigmes que nous ne maîtrisions pas encore bien, comme les classes ou la récursivité. Le jeu en souffre : il a des limitations techniques importantes, comme l'absence d’instanciation d’objets — ce qui empêche l'affichage de plusieurs ennemis en même temps. (Sauf pour les projectiles, ajoutés à la toute fin du projet.)

Image d'illustration du jeu
Le boss final ! C’est le seul moment où l’on peut se battre. Les points de vie d’Eugène et du boss apparaissent à l’écran.

Points à retenir :
+ Travail de groupe
+ Réalisation dans les temps
+ Découverte de divers paradigmes de programmation

Aora

L’exemple parfait du projet trop ambitieux ! Encore une fois, nous étions trois sur ce projet : M. Toé Joao, M. Franzes Matthias et moi. Ce projet nous a énormément appris, mais il n’a jamais pris de forme finale.
Nous avions pourtant développé un système de génération procédurale basique, couplé le jeu au multi-threading, et conçu une fenêtre pleinement responsive. Malheureusement, lorsque nous avons entamé le développement des IA ennemies, il ne nous restait plus qu'une semaine.
Le projet a, comme le précédent, été développé avec Pygame en Python.

Malgré tout, ce projet reste l’un de mes meilleurs souvenirs ! L’ambiance de travail était top, et notre trio était soudé. Nous avons laissé libre cours à nos idées... et bu beaucoup de café !
Nous en sommes fiers, car c’était notre projet de terminale. Nous savions que ce serait probablement notre dernier projet avec autant de liberté. Nous avons donc volontairement privilégié la créativité à la faisabilité.

Nous avions d’abord conçu une pièce prototype pour tous nos essais. Plusieurs éléments ont tout de même été développés, comme :

  • La gestion de la profondeur
  • La génération aléatoire
  • Un système de menus
  • Un arbre de technologies

Pour la profondeur, nous avons simulé une pseudo-hauteur en fonction du bloc sur lequel le joueur tombait. Cela donnait une illusion de profondeur.
Le joueur étant toujours centré à l’écran, le rendu était séparé en deux : la partie haute était dessinée en premier, puis le joueur, et enfin la partie basse. (Voir l’image ci-dessous pour mieux comprendre.)

différentes position du joueur démo rappide, pour visualisé le jeu

Concernant la génération aléatoire, on a un peu triché. En terminale, créer un vrai système procédural est difficile, sauf si c’est le cœur du projet. Nous sommes donc partis sur un système de "puzzle" à plusieurs solutions.
Imaginez une grille remplie de 0, sur laquelle on place des "1" aux endroits voulus (les "1" sont toujours adjacents). Ensuite, pour chaque "1", on regarde les cases voisines pour déterminer le type de salle à utiliser. Par exemple :
J’ai 3 "1" adjacents à ce "1", donc je pioche dans les salles avec trois sorties.
Le résultat est un système simple, mais fonctionnel, de génération procédurale.

La limite de cette méthode, c’est le temps que prend la création des salles. Mais ce modèle peut être amélioré !
Par exemple, au lieu de placer uniquement des salles, on pourrait aussi intégrer des éléments à l’intérieur de celles-ci, selon des règles d’apparition spécifiques. Cela permettrait d’avoir non seulement une génération aléatoire de la structure, mais aussi du contenu à l’intérieur des pièces.

Points à retenir :
+ Ecoute des idées d'autrui au sein d'un groupe
+ Recherches et analyses enrichissantes
– Réalisation incomplète, faute de temps

Jeu de Snake

Premier projet de développement à l'IUT, réalisé en solo. Dans le cadre de l'apprentissage de la compétence : Développer des applications informatiques simples, nous avons créé deux versions du jeu Snake. La première reprenait le classique que tout le monde connaît, avec la particularité d’ajouter des obstacles (comme visible ci-dessous). Ce projet a été développé au début de l’année scolaire 2024, en langage C, sans interface graphique (uniquement via le terminal).
Ce n’était pas le projet le plus difficile, mais il s’est révélé très enrichissant. Nous avons appris à coder de manière plus professionnelle : ajout de commentaires, mise en page suivant les conventions, et surtout, création d’une documentation avec Doxygen. Je réalisais régulièrement des sessions de test pour vérifier la robustesse de mon programme.

Image du jeu Snake Autre image du jeu Snake

Le second Snake que nous avons développé était autonome. Cette fois, nous étions en binôme. La nouvelle mission consistait à créer un serpent capable de trouver les pommes et de les manger par lui-même, tout en évitant les obstacles et en calculant le chemin le plus court pour y parvenir. Nous étions notés sur le temps CPU utilisé et le nombre de déplacements.
Ce projet était plus complexe, car nous avons rendu le code modulaire et nous devions travailler à deux. C’était notre premier véritable projet de programmation en groupe.

Points à retenir :
+ Qualité du développement
+ Découverte encadrée
+ Respect des consignes & rendu dans les temps

Site vitrine des Jeux Olympiques

Ce projet a été l’un des plus importants de notre premier semestre. Il s’agissait de créer un site vitrine pour les Jeux Olympiques qui se déroulaient la même année à Paris. En groupe de quatre, nous avons commencé par identifier notre public cible. Cela nous a amenés à concevoir une charte graphique ainsi qu’un maquettage complet du site. Chacun avait une page à réaliser, et j’étais chargé de créer la page d’accueil.

Si l’on met de côté le développement pur, toute la première phase de réflexion nous a énormément apporté, notamment sur le plan de l’identification des besoins métiers et des attentes des utilisateurs.

Image de la charte graphique

La maquette a été réalisée sur Figma, le plan du site sur Gloomaps, et la charte graphique à l’aide de divers outils. Nous avons utilisé des ressources comme Adobe Color pour assurer une bonne lisibilité, et les validateurs du W3C pour garantir la conformité du code.

Ce projet nous a permis de comprendre que le développement seul ne suffit pas. Nous avons découvert de nombreux concepts orientés vers l’humain, avec une idée forte : concevoir des solutions qui s’adaptent aux utilisateurs, plutôt que forcer les utilisateurs à s’adapter à l’outil.

Image du maquettage

Voici ci-dessous une vidéo présentant une partie du site une fois réalisée. Celle-ci étant la page d'accueil qui était à ma charge durant le projet.

Points à retenir :
+ Réflexion en amont du développement
+ Création d’une charte graphique et arborescence du site (DOM)
+ Acquisition de compétences non techniques essentielles dans le métier

KNN

Projet très peu visuel, car assez abstrait. Nous étions en trinôme, et notre mission consistait cette fois à créer un algorithme de KNN (K-Nearest Neighbors), ainsi qu’un autre basé sur K-Means, en Python.
J’ai été chargé de développer seul l’algorithme de KNN.
Pour expliquer rapidement : le KNN est un algorithme qui permet de "deviner" à quelle catégorie appartient une donnée en se basant sur ses voisines. Par exemple, si je mesure 1,65 m, l’algorithme pourrait conclure que je suis une femme… ce qui n’est pas forcément vrai. C’est une des limites de cet algorithme lorsqu’il est mal utilisé ou lorsque les données d’entrée ne sont pas bien choisies.
En informatique, on ne compare pas sur un simple plan 2D, mais dans un espace en n dimensions. Cela signifie qu’on peut comparer jusqu’à 150 critères différents : c’est là que réside toute la puissance de cet algorithme.

Ce projet nous a permis de développer notre capacité à appréhender et construire des algorithmes. La première chose que j’ai faite a été de générer un jeu de points dans un plan en deux dimensions, de manière à former trois groupes distincts (ou clusters) pour l’expérimentation.

Image d'un petit jeu de données Image de la structure de l'algo
Image du jeu de données seul

À côté, on peut voir la structure générale du programme, suffisament commentée. Les détails techniques ne sont pas essentiels ici. L'idée est simple : on fournit à l’algorithme quelques données déjà étiquetées (par exemple "A", "B" et "C"),
puis on lui demande de classer 300 nouveaux points en fonction de leurs voisins (150 points ajoutés dans la capture ci-dessous).

Image du résultat

Points à retenir :
+ Structurer un problème algorithmique
+ Garder un regard critique sur les performances de son algorithme
+ Réfléchir aux limites et applications des algorithmes dans le monde réel

Création de deux bases de données

L’un des éléments les plus importants en informatique est la donnée. Une base de données permet justement de stocker ces données de manière structurée et intelligente. C’est pourquoi on nous apprend à concevoir et mettre en place une base de données à partir d’un cahier des charges fourni par le client. Le projet qui nous a été confié consistait à analyser un besoin exprimé par un client : l’organisation d’un championnat de football. Nous avons d’abord modélisé ce besoin sous forme de diagrammes UML, avant de le traduire en langage TutorialD. Ce travail nous a permis de comprendre les étapes nécessaires pour répondre efficacement à un besoin client.

diagramme de classe Besoin client

Un second projet, réalisé au deuxième semestre, ne nécessitait pas de compréhension du besoin client. Il s’agissait simplement de créer un script PostgreSQL à partir d’un diagramme UML déjà fourni. Nous avons ensuite peuplé la base de données avec des données fictives.
Pour terminer, différentes missions nous ont été proposées afin de réaliser des statistiques en Python à partir de la base de données. Cela nous a permis d’apprendre à exploiter concrètement une base de données dans un contexte applicatif réel.

Points à retenir :
+ Mise en place d’un besoin client
+ Modélisation en diagramme UML
+ Découverte d’un nouveau paradigme de base de données

Créer un serveur

Ce projet s’inscrit dans le cadre d’une compétence critique étudiée en BUT Informatique : installer et configurer un poste de travail.
Nous étions deux à travailler sur ce projet.
Notre mission était d’installer un serveur sur une machine virtuelle. Ce projet d’IUT était assez particulier : nous étions peu guidés et laissés en autonomie. Cela nous a poussés à faire de nombreuses recherches pour le mener à bien.
Nous avons commencé par configurer le serveur Apache2.

Installation d'Apache2 sur la VM

Par la suite, nous nous sommes réparti le travail : mon binôme s’occupait de la partie SQL, et moi de la partie PHP. C’est là que les choses se sont complexifiées. Nous avions certaines contraintes, comme celle d’exécuter du code PHP dans des fichiers HTML. Il a donc fallu se renseigner sur les fichiers de configuration PHP dans lesquels ce type de paramètre pouvait être modifié.

Modification d’un fichier de configuration PHP

Pour terminer, nous devions réaliser un petit site comprenant une page de connexion, une base de données et une page dynamique. Le temps étant très limité, nous avons opté pour une solution simple : une page de connexion qui vérifie le mot de passe à l’aide d’un script PHP interrogeant une base de données minimaliste. Si le mot de passe est correct, l’utilisateur accède à une simple horloge réalisée en JavaScript.

Page de connexion minimaliste

Points à retenir :
+ Apprentissage en autonomie
+ Prise d’initiative
- Un peu brouillon par moments, dû à une autonomie totale

Huel Goat

Voici un bon exemple de pourquoi le BUT Informatique est intéressant. Ce n’est pas seulement coder devant son ordinateur, mais aussi comprendre comment fonctionne une organisation aujourd’hui.
Pour ce projet en trio, nous avons été missionnés pour créer un team building. Nous devions trouver une entreprise, puis imaginer une activité de cohésion adaptée.
Nous avons donc choisi 3DOuest, et proposé une sortie à Huelgoat, à la découverte des mythes et légendes bretonnes.

Photo de moi déguisé en mage dans la grotte du diable

Les étapes du projet étaient les suivantes :

  • Trouver une organisation — 3DOuest
  • Imaginer une activité de team building pour la journée — sortie à Huelgoat, visite de la forêt
  • Prévoir et anticiper les coûts par personne — environ 60 €
  • Créer une infographie présentant la journée
  • Se rendre sur place et tourner une vidéo de présentation
  • Présenter le projet à l’oral à l’aide d’un document récapitulatif contenant :
    • Présentation de l’organisation
    • Présentation du programme
    • Objectif de la journée
    • Infographie
    • Trajet effectué
    • Budget de la journée
    • Vidéo

Ce projet nous a permis de développer de nombreuses compétences, notamment celle d’identifier nos aptitudes à travailler en équipe.
Nous avons appris à organiser une sortie, à collecter des informations, à établir un budget, à anticiper les besoins et à répartir les tâches.

Mais surtout, nous avons su nous remotiver après un départ difficile. Le projet avait mal commencé, mais nous avons réussi à nous démarquer grâce à un regain d’implication. Nous ne voulions pas rendre un travail bâclé, et cette motivation nous a portés jusqu’au bout.

Ce projet montre aussi l’importance des compétences non-informatiques. Par exemple, nous avons dû cadrer, filmer, monter et sonoriser une vidéo — un travail de production à part entière. Bref, même si ce n’était pas un projet technique, il nous a appris énormément.

Points à retenir :
+ Organisation d’une équipe en dehors d’un projet de développement
+ Découverte du fonctionnement des sorties d’entreprise
+ Mise en valeur de compétences transversales