Jeu du Loup-Garou
Projet de groupe en Python en utilisant des outils de gestion de projet (Git).
Objectif du projet
Ce projet de groupe avait un but double : développer un jeu complet et, surtout, apprendre à travailler à plusieurs sur un même code. Nous étions quatre, et l’enjeu était de nous organiser avec Git (branches, fusions, gestion des conflits) pour rester efficaces tout au long du développement.
Nous avons choisi d’adapter Les Loups-Garous de Thiercelieux (version de base, sans extension) en ligne de commande, avec une interface dans le terminal.
Ma démarche
Avant d’écrire la moindre ligne de code, nous avons rédigé un cahier des charges (janvier 2024). Il nous a permis de nous mettre d’accord sur ce que le jeu devait faire et de nous répartir le travail : nous participions tous à la programmation, avec en plus un rôle principal de tests ou de documentation selon les membres.
Concrètement, j’ai suivi les étapes suivantes :
- Spécifier chaque fonctionnalité. Chaque fonctionnalité a un code (1.1 pour démarrer une partie, 2.1 pour la sorcière, 3.4 pour la nuit, etc.) avec son déclencheur, son comportement attendu et le retour affiché au joueur.
- Concevoir l’architecture. Nous avons dessiné un diagramme de classes avant de coder : une classe Jeu au centre, une classe Joueur dont héritent tous les rôles, et des classes séparées pour l’interface, l’audio, le terminal et la sauvegarde.
-
Définir des conventions communes. Noms en français, classes en CamelCase,
fonctions et variables en snake_case, accesseurs et mutateurs préfixés par
getetset, pour que le code reste lisible quel que soit son auteur. - Travailler avec Git. Chacun développait sur sa branche, puis nous fusionnions sur le dépôt GitHub en résolvant les conflits quand ils apparaissaient.
Réalisation du projet
Le jeu, développé en Python (3.12), propose les fonctionnalités suivantes :
- Une interface dans le terminal, construite avec la bibliothèque
curses. - La sauvegarde et le chargement des parties (fichier JSON).
- Des sons d’ambiance et une narration audio avec
pygame, ainsi que de l’ASCII art, pour retrouver l’atmosphère du jeu de société. - Le lancement de parties simplifiées ou complètes.
- Tous les rôles du jeu de base : loup-garou, simple villageois, voyante, sorcière, chasseur, Cupidon, voleur et petite fille.
- Le déroulement complet d’une partie : élection du maire, nuit, réveil du village, vote d’élimination et vérification des conditions de victoire (villageois, loups-garous ou couple).
Côté outils, j’ai utilisé Git et GitHub pour le code, Google Docs pour centraliser la documentation,
et pyautogui pour passer automatiquement le terminal en plein écran afin d’améliorer l’immersion.
Problèmes rencontrés
-
Problème : Les conflits Git lorsque plusieurs d’entre nous modifiaient les mêmes fichiers, en particulier la classe centrale du jeu.
Solution : Travailler sur des branches séparées, faire des fusions régulières et nous répartir les fichiers pour limiter les modifications simultanées.
-
Problème : Faire fonctionner ensemble l’interface dans le terminal, l’audio et la logique du jeu.
Solution : Isoler l’affichage et le son dans des classes dédiées (interface, terminal, audio), pour que la logique du jeu ne dépende pas de leur fonctionnement interne.
Ce que j’en retiens
Ce projet m’a appris qu’un travail d’équipe se prépare : un cahier des charges clair, une architecture pensée à l’avance et des conventions partagées ont rendu la collaboration beaucoup plus fluide. J’y ai aussi gagné en aisance avec Git et avec la structuration d’un projet Python en plusieurs classes.