⚔️ Corewar Java : Simulateur MARS & Générateur Évolutionnaire ⚔️
📝 Présentation
Ce projet est un simulateur complet de Corewar, un jeu de programmation où des programmes de bas niveau (appelés "guerriers") s'affrontent pour le contrôle de la mémoire d'une machine virtuelle.
Au-delà de la simple simulation, ce projet intègre un générateur automatique de programmes basé sur des algorithmes génétiques, permettant de faire évoluer des guerriers pour les rendre de plus en plus performants face à leurs adversaires.
🚀 Fonctionnalités Clés
Machine Virtuelle MARS : Implémentation du standard ICWS-88 avec une mémoire circulaire partagée.
Interpréteur RedCode : Support des instructions fondamentales (MOV, ADD, SPL, JMP, etc.) avec chargement dynamique des classes pour une meilleure extensibilité.
Modes d'adressage : Gestion des modes Direct, Immédiat, Indirect et Pré-décrémenté.
Algorithme Génétique : Évolution de populations de guerriers par sélection, croisement et mutation.
Interface Graphique (Swing) : Visualisation temps réel de la mémoire sous forme de grille colorée, suivi des instructions et contrôle de la vitesse d'exécution.
🛠️ Installation et Utilisation
Le projet utilise Apache Ant pour la gestion du cycle de vie.
Compiler le projet : ant compile (Compile le code source et les tests).
Lancer l'interface graphique : ant run-interface (Lance la classe Demo.java).
Lancer l'algorithme génétique : ant run-genetic (Exécute MainGenetic).
Lancer la console : ant run-console (Exécute la classe Main du cœur).
Lancer les tests : ant run-test (Exécute la suite de tests unitaires).
Nettoyer : ant clean (Supprime le dossier build/).
🏗️ Architecture du Projet
L'architecture respecte les principes du Modèle-Vue-Contrôleur (MVC) avec le pattern Observer.
model.coeur : Gère la mémoire, l'interpréteur et l'unité de contrôle.
model.genetic : Contient les mécanismes de mutation, croisement et sélection des programmes.
vue : Interface graphique permettant l'interaction et la visualisation en temps réel.
controleur : Coordonne les actions entre la vue et le modèle.
Shutterstock
🧬 Focus : Algorithme Génétique
Le processus d'évolution suit les étapes suivantes:
Évaluation : Les programmes s'affrontent pour mesurer leur efficacité.
Sélection : Les meilleurs candidats sont choisis comme parents.
Croisement : Échange de segments de code entre parents pour créer des enfants.
Mutation : Introduction de modifications aléatoires pour maintenir la diversité génétique.
📁 Structure du Dépôt
src/ : Code source Java. test/ : Fichiers de tests unitaires. lib/ : Bibliothèques externes (JUnit, Mockito). programmes/ : Exemples de guerriers RedCode. rapport/ : Documentation technique et sources LaTeX.
👥 Réaliser par :
Belaid AZIL
Université Caen Normandie (2024-2025)