Age of War : Jeu de Stratégie 2D en Temps Réel
Java · Swing · XML
Ce projet de génie logiciel consistait à recréer de zéro le célèbre jeu de stratégie en temps réel “Age of War”. Dans ce jeu en 1 contre 1, le joueur doit gérer une économie dynamique pour recruter des unités, défendre sa base et faire évoluer sa civilisation à travers trois ères historiques, le tout face à un adversaire autonome. Le développement a nécessité la conception d’une architecture orientée objet robuste, capable de gérer simultanément une boucle de jeu fluide, des collisions en temps réel et un moteur de rendu graphique personnalisé.
Contexte
Ce projet académique a été réalisé à l’IMT Mines Alès dans le cadre de l’évaluation de l’UE Application à la Programmation Objets (APO). L’enjeu n’était pas seulement de créer un jeu fonctionnel, mais surtout de démontrer une maîtrise approfondie des concepts avancés de la POO appliqués à un système interactif complexe et fortement contraint par le temps.
Architecture
Contrairement à un projet Data, le défi ici résidait dans l’architecture du code. Le projet a été structuré autour de composants découplés pour garantir la maintenabilité :
- Modélisation Orientée Objet : Création d’une hiérarchie de classes stricte pour les Entités (Joueurs, Bases, Unités) gérant l’héritage des statistiques à travers les 3 ères d’évolution.
- Gestion des statistiques (XML) : Un système de chargement dynamique des données permettant de ne pas coder les statistiques des unités “en dur” dans le code source mais dans un fichier de configuration XML pour pouvoir varier la difficulté.
Méthodologie
Le cœur du jeu repose sur un pipeline d’exécution cyclique divisé en 4 grandes phases :
Phase A : Parser XML et Initialisation
Pour rendre le jeu modulable (et facilement équilibrable), les caractéristiques des personnages (points de vie, dégâts, coût, vitesse) sont stockées dans un fichier XML. À l’initialisation, un Parser XML lit ce fichier et instancie dynamiquement les objets du jeu.
Phase B : La Boucle de Jeu
Au lieu d’une exécution linéaire, le jeu repose sur une boucle temps réel cadencée par un javax.swing.Timer. À chaque “tic”, la boucle :
- Capture et traite les entrées de l’utilisateur (achats d’unités, évolution).
- Met à jour la physique : déplacement des entités et détection des collisions (hitboxes).
- Résout les combats (gestion de la portée, soustraction des points de vie, mort des unités).
Phase C : Moteur de Rendu Graphique Custom
L’interface graphique ne se contente pas d’utiliser des boutons standards. Un système de rendu entièrement personnalisé a été développé en redéfinissant la méthode paintComponent de Java Swing. Ce moteur se charge de dessiner les décors, les barres de vie, et les images des unités en respectant leur superposition.
Phase D : Intelligence Adversaire
Pour rendre le jeu jouable en solo, un “Bot” a été programmé. Cette IA analyse ses propres ressources financières et le temps écoulé pour générer des vagues d’ennemis cohérentes. Elle est également capable de déclencher ses propres évolutions d’ère pour suivre la montée en puissance du joueur.
Résultats
- Simulation Fluide : La gestion de la mémoire et des calculs de collisions permet un rendu sans ralentissement, même avec de nombreuses unités à l’écran.
- Évolution Dynamique : Le système de civilisation à 3 ères est pleinement opérationnel. Lorsqu’un joueur évolue, les sprites, les statistiques et les types d’unités disponibles sont instantanément mis à jour.