Architecture du moteur
Cette section détaille le fonctionnement interne de la simulation, du point d'entrée (main) jusqu'à la logique du coeur (Engine)
1. Point d'entrée : Main
Le fichier main.py a le rôle de chef d'orchestre, il initialise les composants et gère la boucle principale.
Boucle principale (running)
En simulation simple ou multiple, la boucle principale suit les mêmes étapes:
- Input : récupération des commandes utilisateur (quitter, echap...)
- Update logique : Actualise les éléments de la simulation (Minos, nourriture)
- Vérification des conditions : Vérifie les conditions de fin de simulation
- Rendu : Appel aux fonctions d'affichage (uniquement si activé)
2. Configuration (SimulationConfig)
Cette classe centralise les variables globales et le paramétrage. Elle garantit l'initialisation et la juste distribution des variables globales et des constantes.
Paramètre de la simulation :
| Catégorie | Attribut | Description |
|---|---|---|
| Affichage | full_screen |
Mode plein écran ou fenêtré. |
fps |
Plafond d'images par seconde (-1 pour illimité). | |
print_vision |
Affiche les rayons de vision des Minos. | |
| Biologie | resistance_mu / _sigma |
Loi Normale pour la jauge de faim. |
vitesse_mu / _sigma |
Loi Normale pour la vitesse de déplacement. | |
vision_mu / _sigma |
Loi Normale pour la distance de vue. | |
| Environnement | nb_minos |
Population initiale. |
ratio_food |
Quantité de nourriture disponible par Minos. | |
abundance_zone |
Activation de la zone d'abondance |
Configuration Dynamique
Les méthodes init_unique_simulation et init_several_simulation génèrent automatiquement les menus permettant à l'utilisateur de modifier ces valeurs sans redémarrer le programme.
3. Le Moteur (Engine)
La classe Engine est le coeur technique. Elle est conçue pour être modulaire et étanche, elle peut fonctionner sans interface graphique.
Organisation des attributs :
Voici comment les principaux attributs de Engine sont structurés :
- Gestion d'interface (optionnel) :
draw,screen,manager: référence vers le système d'interface, initialisés uniquement si nécessaire
- Gestion des entités :
minos_list: liste de tous les Minos de la simulationfood_list: Liste des nourritures sur la carteminos_dead: nombre de Minos morts
- Mécanisme internes:
grid: Référence vers la grilleabundance_zone: rectangle de la zone d'abondance [x,y,width, height]
Le temps :
La simulation utilise les frames comme unité de temps. Cela assure que peu importe la puissance de la machine, la simulation reste valable.
L'espace :
Pour optimiser les performances, l'espace est divisé en différents secteurs via une grille.
Optimisation
Au lieu de scanner toute la carte pour trouver sa prochaine destination, le minos va uniquement regarder les cases de la grille où il est actuellement.
| 1 Minos 2000 nourritures | 100 Minos, 10 nourritures par entité |
|---|---|
![]() |
![]() |
| ~100 fps | ~115 fps |
Les fonctions d'affichage consomment beaucoup de ressources, faire sans augmente drastiquement les performances (~x10)
Fonctions clés :
update_all_minos: Actualise entièrement chaque Minos ainsi que les données à récolter.update_food: Gère la reconstruction de la grille et l'apparition de la nourriture.update_abundance_zone: Gère les déplacements de la zone d'abondance.

