Pacwoman : honneur aux femmes !

Capture d’écran du 2026-05-05 16-58-58

 

Second projet personnel réalisé en deuxième année. Le but était d’apprendre la Programmation Orientée Objet (POO). Le choix du sujet était assez libre.  Ayant une forte affinité pour le rétrogaming et voulant mettre à l’honneur le côté féminin en informatique, j’ai donc décidé de créer mon propre jeu en faisant un éditeur de niveau type Miss Pacman. La charte graphique se base sur les couleurs de ce jeu : le rose, orange, et jaune.

 

Technologies choisies :

Voici les étapes principales effectuées dans le cadre de ce projet :

0. MVP et User stories

Il s’agit de l’étape préparatoire du fil rouge. J’ai du mettre en place les grandes lignes du projets en réalisant des diagrammes de cas d’usages, d’activité, pour ce début de projet. Il a fallu également définir le MVP (ici le fait de faire un éditeur de niveau), ainsi que les parties optionnelles à venir par la suite (MVP+) tel que la jouabilité. J’ai également fait les maquettes de mon éditeur de niveau sur Figma.

Compétences techniques

-> Proposer une application cohérente à une demande client
-> Documenter les objectifs d’une application
-> Documenter une procédure sous la forme d’un algorithme

Compétences associées

-> Comprendre et s’approprier une demande client
-> Réfléchir les développements à réaliser
-> Savoir spécifier et documenter une solution logiciel

 

Maquette de l'éditeur de niveau réalisée avec Figma

 

1. Classe

Pour cette étape il a fallu mettre en place l’environnement Java afin de pouvoir travailler sur le back-end. J’ai dû définir les différentes classes utiles en lien avec mes formes : rectangle pour les murs, le rond pour les billes à manger, les triangles pour les fantômes, et l’hexagone pour Pacwoman. 

 

Compétences techniques 

-> Création d’une architecture objet 

 

Compétences associées

-> S’initier à la programmation orienté objet, connaître la notion d’objet, de classe, d’attribut et de méthode

 

2. Encapsulation

Durant cette phase, j’ai du mettre en place un système de getters et setters en fonction des attributs et méthodes de chacune des classes pour en protéger certaines données.

 

Compétences techniques

-> Création, destruction et modification d’instance de classes

 

Compétences associées

-> Comprendre l’encapsulation : la portée des variables et des méthodes ainsi que l’intérêt des getters et setters

 

3. Héritage

Une fois l’encapsulation effectué, j’ai dû regrouper mes classes en classe enfants reliées à une classe mère « Forme ». Il a fallu faire en sorte que les méthodes communes soient mises dans la classe mère afin de les transmettre aux enfants, et non plus mettre individuellement pour chaque classe le même type de méthode. Ex : calculer l’aire et le périmètre sera commun à chaque forme.

 

Compétences techniques

-> Création d’une classe mère et de classes héritées

 

Compétences associées

-> Comprendre l’intérêt de l’héritage : la hiérarchie de classe et la spécialisation

 

4. UML

Dans cette étape-ci, j’ai pu réaliser un diagramme de classe à l’aide de PlantUML. Cela m’a permis de modéliser l’architecture du back-end avec ce que j’avais mis en place précédemment à savoir : ma classe mère « Forme » et mes classes enfants « Rectangle », « Rond », « Triangle », « Hexagone ».

 

Compétences techniques

-> Modéliser l’architecture d’un projet avec UML

 

Compétences associées

-> Savoir réaliser et comprendre un diagramme UML

 

5. Composition et polymorphisme

Dans cette partie, j’ai dû faire en sorte de spécifier certaines méthodes de mes classes enfants. En effet, l’aire et le périmètre étant commun à toutes les classes de mes formes via la classe mère, il a fallu spécifier pour chacune de mes formes le bon périmètre ainsi que la bonne aire. Car toutes mes formes n’ont pas le même calcul pour ces deux composantes.

J’ai également dû mettre en place une classe composition « Labyrinthe » afin de pouvoir y mettre plusieurs formes, à savoir plusieurs rectangles, ronds, triangle et un hexagone.

 

Compétences techniques

-> Ajout et mobilisation de méthodes communes à plusieurs classes 

 

Compétences associées

-> Rédiger une classe mobilisant les notions de composition

-> Comprendre la mécanique du polymorphisme et la mobiliser

 

6. Tests

La réalisation des tests s’est effectué uniquement sur la classe composition « Labyrinthe ». Il s’agissait de tests unitaires, visant à permettre de vérifier la robustesse du code. J’ai donc mis en place une série de tests sur la classe en question, notamment sur le calcul de l’aire et du périmètre.

 

Compétences techniques

-> Tester et valider le comportement d’une classe

 

Compétences associées

-> Comprendre l’intérêt des tests unitaires et savoir les mettre en œuvre

 

7. API

Dans cette étape, j’ai dû mettre en place un CRUD (Create : POST, Read : GET, Update : PUT, Delete : DELETE) afin de pouvoir communiquer par la suite avec le front-end lors de son implémentation. J’ai réaliser les tests API à l’aide de Swagger, ce qui m’a permis de vérifier que mes routes fonctionnaient correctement. J’ai également mis en place la gestion des erreurs HTTP 400/404.

 

Compétences techniques

-> Création et utilisation d’une API afin de partager des informations

 

Compétences associées

-> Maitriser le format d’échange de données JSON
-> Mise à disposition d’informations sous forme de JSON

-> Considérer l’importance de la sobriété des données
-> Tester et documenter une API à l’aide d’outils dédiés

 

8. ORM

Afin de pouvoir communiquer avec la base de données, j’ai dû mettre en place ce que l’on appelle un ORM. Cela m’a permis de créer ma base données en mettant en place un repository et des entity afin de construire les tables.

Compétences techniques

-> Utilisation d’un ORM pour la sauvegarde en BDD

 

Compétences associées

-> Savoir interagir avec une base de données pour sauvegarder et lire des informations à l’aide d’un ORM

 

9. Déploiement

Dans cette phase, le but était de pouvoir accéder au back à partir d’un autre serveur. Pour cela, j’ai mis mon projet sous Docker, afin d’effectuer un déploiement sur un serveur local. 

 

Compétences techniques

-> Déployer une api et une base de donnée sur un serveur

 

Compétences associées

-> Maitriser les commandes de base pour piloter un serveur
-> Déployer et administrer une architecture n-tiers basée sur des APIs REST
-> Documenter le déploiement d’une solution
-> Adapter une application pour qu’elle fonctionne sur un serveur déjà mobilisé par d’autres services

 

10. Front

Dans le projet, il s’agit d’une partie conséquente. Jusqu’alors, le back était la seule chose en place, sans avoir de rendu côté utilisateur. Dans cette étape, j’ai mis en place l’interface en question en utilisant le framework React en utilisant TypeScript. Le front-end a également mis sous Docker.

 

Compétences techniques

-> Création d’un site web dédié à la mise en forme d’informations issues d’une API, avec un framework

 

Compétences associées

-> Utilisation d’un framework web pour générer l’IHM d’un site web
-> Mise en oeuvre d’un front-end au sein d’une architecture N-tiers
-> Savoir limiter les données communiquées entre front-end et back-end au minimum nécessaire pour l’application
-> Appliquer les principes de l’éco-conception du code: optimisation des algorithmes, limitation d’appels aux serveurs…

 

11. CMS et SEO

Dans cette étape, il s’agit de créer son portfolio à l’aide de WordPress. J’ai dû travailler aussi la partie référencement afin d’optimiser les possibilités sur les moteurs de recherches d’accéder à mon site. 

 

Compétences techniques

-> Déployer un site web pour optimiser le référencement de l’application déployée

 

Compétences associées

-> Mobiliser un CSM
Etre attentif au référencement d’un site web

 

12. Soutenance

Deux types de soutenances ont été réalisées lors de cette étape. Lors de la première, j’ai présenté un concept vu dans le fil rouge à savoir le principe de l’héritage et des interfaces. La seconde soutenance a consisté à réaliser une présentation du fil rouge en se focalisant sur une thématique précise. Dans mon cas la phase de test effectué sur la composition Labyrinthe.

 

Compétences techniques

-> Présentation synthétique des développement fait d’un point de vue technique et des fonctionnalités existantes

 

Compétences associées

-> Savoir présenter oralement un travail réalisé
-> Être en mesure de définir ce qui est essentiel de montrer pour la compréhension
-> Préparer un oral pour maintenir des contraintes de temps

 

13. Optionnel : mise en place d’un design pattern (ici Flyweight)

Afin d’optimiser le code et l’utilisation de l’application, j’ai mis en place un design pattern Flyweight. Il permet de réduire l’utilisation mémoire en partageant des objets identiques (état intrinsèque) au lieu d’en créer de nouveaux pour chaque occurence. L’état variable (état extrinsèque) est passé au moment de l’utilisation. Il repose sur une usine/factory qui retourne une instance partagée si elle existe, sinon la crée et la stocke. Cela permet, par exemple, de réutiliser des modèles identiques pour des formes plutôt que d’enregistrer des doublons en base de données.

 

Compétences techniques 

-> Utilisation d’un design pattern pour facilitée l’évolution / le développement d’une fonctionnalité

 

Compétences associées

-> Comprendre l’intérêt des designs patterns dans un contexte de développement logiciel
-> Savoir sélectionner le pattern permettant de répondre à une problématique spécifique
-> Être capable d’adapter le pattern pour le mettre en œuvre dans le contexte propre à une une application

 

Ce que j’en ai tiré : j’ai appris énormément de choses dans ce projet individuel, notamment côté back-end. J’ai eu un vrai coup de cœur pour Java, mais aussi pour React côté front. Cela m’a permis d’acquérir des bases solides dans la POO. J’ai également mis le design pattern Flyweight en place afin d’optimiser le code. De façon générale, j’ai eu un réel plaisir à pouvoir mettre en forme mon propre jeu vidéo, qui sera à terme jouable