Lem-IPC est un projet de programmation système du cursus de 42 traitant de la communication entre processus (IPC). L'objectif est de faire s'affronter des joueurs (divisés en équipes) sur un plateau 2D.
Chaque joueur est un processus indépendant communiquant via les outils System V. Le projet met l'accent sur la synchronisation des ressources partagées et la stratégie de groupe par échange de messages, sans aucun lien de parenté (fork) entre les processus.
L'objectif est de mener son équipe à la victoire en éliminant les adversaires.
- Combat : Un joueur est éliminé s'il est entouré par au moins 2 joueurs d'une même équipe adverse sur des cases adjacentes (diagonales incluses).
- Mort : Lorsqu'un processus détecte son encerclement, il doit quitter le plateau et libérer sa place proprement.
- Placement : Une case ne peut contenir qu'un seul joueur à la fois.
- Vision : Les joueurs voient le numéro d'équipe sur les cases occupées, mais ne peuvent pas distinguer l'identité des joueurs.
Le projet repose sur l'utilisation rigoureuse de trois types de ressources :
- Shared Memory (SHM) : Stockage du plateau de jeu accessible par tous.
- Semaphores : Gestion des accès concurrents pour éviter les "race conditions" lors des déplacements.
- Message Queues (MSGQ) : Canal de communication exclusif pour la stratégie interne des équipes.
| Fonctionnalité | Description | Statut |
|---|---|---|
| Langage | Code écrit entièrement en C98 (Norme ANSI). | ✅ |
| Zéro Fork | Chaque processus joueur est lancé indépendamment. | ✅ |
| Initialisation | Le premier joueur crée les segments SHM, MSGQ et les sémaphores. | ✅ |
| Cleanup | Le dernier joueur présent nettoie toutes les ressources IPC du système. | ✅ |
| Visualiseur | Exécutable dédié séparé utilisant la SDL. | ✅ |
make # Compile l'exécutable lemipc.
make clean # Supprime les fichiers objets.
make fclean # Supprime les objets et les exécutables.
make Visualizer # Compile le visualizer.
make run # Lance $(PTR) fois l'executable répartis entre $(TEAMCOUNT) équipes.
make run_visualizer # Lance le visualizer.- Lancer le visualiseur :
./Visualizer- Lancer plusieurs joueurs :
make run- Lancer d'un joueur unique:
./lemipc [TEAM ID]