Project members :
member 1 : Mansour Chadi
member 2 : Chahine Rami
Objectif du Projet
Ce projet a pour objectif de refactoriser un code initial qui ne respectait pas les principes SOLID, afin de le rendre plus lisible, modulaire, et extensible. La refactorisation vise à diviser le code en plusieurs sous-parties bien définies, en respectant des concepts de conception logicielle modernes, notamment les principes SOLID.
Par ailleurs, de nouvelles fonctionnalités ont été ajoutées au jeu, notamment :
L'introduction d'éléments tels que des nuages, des rocailles, des routes et des montagnes.
L'ajout de pompiers équipés de motos pour une mobilité accrue.
Approche Initiale et Révision du Plan
Approche Initiale :
Lors de la première phase, nous avons introduit des classes Manager pour gérer les pompiers et les incendies.
Ces classes étaient accompagnées d'interfaces Strategy permettant d'implémenter différents types de mouvements et comportements.
Cependant, cette approche s'est révélée complexe et peu fonctionnelle,
en raison d'une mauvaise séparation des responsabilités et d'une gestion inefficace des dépendances.
Nouvelle Approche :
Face à ces difficultés, nous avons opté pour une refonte complète du système.
Nous avons simplifié l'architecture en nous concentrant uniquement sur les stratégies de mouvements.
Cette approche, plus simple, s'est avérée non seulement fonctionnelle, mais aussi plus facile à modifier et à étendre.
Avantages de la Nouvelle Architecture
La nouvelle architecture a démontré son efficacité lors de l'ajout des nouvelles fonctionnalités :
Modularité accrue : Chaque fonctionnalité est encapsulée dans des classes ou stratégies indépendantes.
Facilité de modification : L'ajout de nouveaux éléments comme les nuages, les rocailles,
ou les motos n'a pas nécessité de réécriture majeure du code existant.
Respect des principes SOLID :
Single Responsibility Principle : Chaque classe ou stratégie a une responsabilité unique et clairement définie.
Open/Closed Principle : Le système est ouvert à l'extension mais fermé à la modification.
Liskov Substitution Principle : Les stratégies implémentent des interfaces communes et peuvent être utilisées de manière interchangeable.
Interface Segregation Principle : Les interfaces sont petites et spécifiques aux besoins de chaque composant.
Dependency Inversion Principle : Les dépendances sont abstraites et injectées, ce qui réduit le couplage.
Fonctionnalités Clés
Voici un aperçu des fonctionnalités intégrées grâce à cette refactorisation :
Stratégies de Propagation du Feu :
Différents types de terrains influencent la propagation des flammes :
Les montagnes bloquent complètement le feu.
Les rocailles ralentissent sa propagation, ne brûlant qu'à des intervalles précis.
Les routes empêchent la propagation.
Gestion des Pompiers :
Les pompiers peuvent se déplacer rapidement grâce à des motos, permettant une intervention plus efficace.
Les stratégies de mouvement tiennent compte des obstacles comme les montagnes et les rocailles.
Ajout d’éléments naturels :
Les nuages peuvent interagir avec le terrain et affecter les conditions du feu.
Les différents types de terrains apportent une dimension stratégique au jeu.
Visualisation Améliorée :
Le système de rendu utilise une grille pour afficher clairement chaque élément (feu, pompiers, routes, etc.),
avec des couleurs spécifiques pour une meilleure lisibilité.
Conclusion
Cette refactorisation a permis de transformer un code monolithique et difficile à maintenir en un système modulaire et extensible. Les bénéfices se sont manifestés lors de l'ajout rapide et efficace de nouvelles fonctionnalités. En adoptant une architecture basée sur les stratégies et les principes SOLID, le projet est désormais mieux structuré, plus facile à comprendre et prêt pour des extensions futures.