Un jeu d'aventure textuel de type enquête où vous incarnez un détective chargé de résoudre un meurtre mystérieux dans un manoir victorien.
Projet de 1re année du cycle ingénieur à ESIEE Paris, réalisé en binôme en Python (programmation orientée objet, interface graphique Tkinter). Classé 1er de la promotion.
👉 Voir la vidéo de présentation du jeu
- Prérequis : Python 3.8 ou supérieur
- Cloner le dépôt :
git clone https://github.com/alessandro-digalloclauss/TBA.git cd TBA - Dépendances optionnelles (pour l'interface graphique) :
pip install pillow
Note : Le jeu fonctionne en mode texte sans dépendances supplémentaires. Tkinter est inclus dans Python par défaut.
python game.pyLe jeu détecte automatiquement si l'interface graphique (Tkinter) est disponible :
- Si Tkinter est disponible → Lance l'interface graphique
- Si Tkinter n'est pas disponible → Lance le mode console (texte)
Forcer le mode console :
python game.py --cliVous êtes un détective appelé dans un manoir victorien suite à un meurtre mystérieux. Le corps d'Armand, le maître des lieux, a été découvert dans son bureau, entouré de sang et de papiers éparpillés.
Le manoir comprend 11 pièces à explorer :
| Pièce | Description |
|---|---|
| 🏛️ Hall | Entrée principale avec un grand lustre et une horloge arrêtée à 22h30 |
| 🌿 Jardin d'hiver | Plantes exotiques sous une vitre brisée |
| 🛋️ Salon victorien | Fauteuils usés et cheminée froide |
| 🍲 Cuisine | Chaudron fumant et couteaux alignés (un manque) |
| 📝 Bureau | Scène du crime - corps de la victime |
| 🚪 Couloir | Long couloir sombre avec traces de pas |
| 🛏️ Chambre | Lit défait et fenêtre entrouverte |
| 📖 Bibliothèque | Rayonnages de livres anciens |
| 🕯️ Pièce cachée | Pièce secrète avec des parchemins |
| 🍷 Cave à vin | Cave fraîche remplie de bouteilles anciennes |
| 🛠️ Atelier | Outils et plans éparpillés |
Cinq personnages sont présents dans le manoir et peuvent être interrogés :
- Émile - Le jardinier, employé du manoir
- Clara Beaumont - Invitée, lectrice reconnue
- Victor Lenoir - Ingénieur, invité de l'atelier
- Hélène de Valenbourg - Épouse de la victime
- Maurice Delcourt - Archiviste, visiteur studieux
| Commande | Description |
|---|---|
go <direction> |
Se déplacer (N/Nord, S/Sud, E/Est, O/Ouest, U/Haut, D/Bas) |
back |
Revenir à la pièce précédente |
history |
Afficher l'historique des déplacements |
look |
Regarder la pièce actuelle |
| Commande | Description |
|---|---|
take <objet> |
Ramasser un objet |
drop <objet> |
Déposer un objet |
check |
Afficher l'inventaire |
inspect <objet> |
Examiner un objet en détail (nécessite une loupe) |
unlock <objet> |
Déverrouiller un objet avec une clé |
| Commande | Description |
|---|---|
talk <personnage> |
Parler à un personnage présent |
accuser <suspect> |
⚖️ Accuser un suspect du meurtre (commande finale) |
| Commande | Description |
|---|---|
quests |
Afficher la liste des quêtes |
quest <titre> |
Afficher les détails d'une quête |
activate <titre> |
Activer une quête |
rewards |
Afficher vos récompenses |
help |
Afficher l'aide |
quit |
Quitter le jeu |
- Flèches directionnelles : Navigation (↑↓←→)
- U : Monter
- D : Descendre
- B : Revenir en arrière
- Escape : Quitter
Le jeu propose plusieurs quêtes à accomplir :
- Explorateur du Manoir - Visitez les pièces principales
- Grand Voyageur - Déplacez-vous 10 fois
- Découvreur de Secrets - Trouvez les lieux cachés
- Rencontres Mystérieuses - Interrogez tous les suspects
- Le Livre Étrange - Trouvez le mystérieux livre
- 🏆 Victoire : Utilisez la commande
accuser <suspect>pour accuser le bon coupable. Rassemblez les indices (lettres, testament, objets) et interrogez les suspects pour découvrir qui est le meurtrier ! - 💀 Défaite : Si vous accusez le mauvais suspect, le vrai coupable s'échappe et l'enquête échoue.
💡 Conseil : Explorez chaque pièce, examinez les objets avec
inspect, et parlez à tous les personnages avant de faire votre accusation !
TBA/
├── game.py # Classe principale du jeu
├── player.py # Gestion du joueur
├── room.py # Modèle des pièces
├── item.py # Modèle des objets
├── character.py # Modèle des personnages (PNJ)
├── command.py # Gestion des commandes
├── actions.py # Actions exécutables
├── quest.py # Système de quêtes
├── interface.py # Interface graphique Tkinter
├── README.md # Documentation
└── assets/ # Images et ressources graphiques
├── bg_*.png # Images de fond des pièces
├── npc_*.png # Sprites des personnages
└── splash_intro.png
classDiagram
direction TB
%% ═══════════════════════════════════════
%% CLASSE PRINCIPALE
%% ═══════════════════════════════════════
class Game {
-finished : bool
-rooms : list
-commands : dict
-player : Player
+setup(player_name)
+play()
+process_command(cmd)
}
%% ═══════════════════════════════════════
%% JOUEUR ET QUÊTES
%% ═══════════════════════════════════════
class Player {
-name : str
-current_room : Room
-historique : list
-inventory : dict
-max_weight : float
-quest_manager : QuestManager
+move(direction) bool
+retour() bool
+get_inventory() str
}
class QuestManager {
-quests : list
+add_quest(quest)
+activate_quest(title)
+check_objectives()
}
class Quest {
-title : str
-description : str
-objectives : list
-is_completed : bool
-reward : str
+activate()
+complete_objective(obj)
+get_status() str
}
%% ═══════════════════════════════════════
%% MONDE DU JEU
%% ═══════════════════════════════════════
class Room {
-name : str
-description : str
-exits : dict
-inventory : dict
-characters : dict
-image : str
+get_exit(direction) Room
+get_long_description() str
}
class Item {
-name : str
-description : str
-weight : float
-detail : str
+describe() str
}
class Character {
-name : str
-description : str
-msgs : list
-image : str
+get_msg() str
+move() bool
}
%% ═══════════════════════════════════════
%% COMMANDES
%% ═══════════════════════════════════════
class Command {
-command_word : str
-help_string : str
-action : callable
-number_of_parameters : int
}
class Actions {
+go()$
+look()$
+take()$
+drop()$
+talk()$
+inspect()$
+accuser()$
+quit()$
}
%% ═══════════════════════════════════════
%% INTERFACE GRAPHIQUE (optionnelle)
%% ═══════════════════════════════════════
class GameGUI {
-game : Game
-canvas : Canvas
+_build_ui()
+_update_display()
+_process_input()
}
%% ═══════════════════════════════════════
%% RELATIONS
%% ═══════════════════════════════════════
Game "1" --> "1" Player : possède
Game "1" --> "*" Room : contient
Game "1" --> "*" Command : utilise
Player "1" --> "1" Room : position
Player "1" --> "*" Item : inventaire
Player "1" --> "1" QuestManager : gère
Room "1" --> "*" Item : objets
Room "1" --> "*" Character : PNJ
Command --> Actions : exécute
QuestManager "1" --> "*" Quest : contient
Game ..> GameGUI : importe
| Module | Classe | Responsabilité |
|---|---|---|
game.py |
Game |
Point d'entrée : création du monde, gestion des commandes, boucle de jeu. Lance automatiquement l'interface graphique ou le mode console. |
player.py |
Player |
Représentation du joueur : position, inventaire, historique, quêtes |
room.py |
Room |
Modèle de pièce : description, sorties, objets, personnages présents |
item.py |
Item |
Objets ramassables : nom, description, poids, détails d'inspection |
character.py |
Character |
Personnages non joueurs : dialogues, déplacements aléatoires |
command.py |
Command |
Structure d'une commande : mot-clé, aide, action associée |
actions.py |
Actions |
Méthodes statiques pour toutes les actions du jeu |
quest.py |
Quest, QuestManager |
Système de quêtes : objectifs, progression, récompenses |
interface.py |
GameGUI |
Interface graphique Tkinter (importée par game.py si disponible) |
-
Système de combat/confrontation
- Ajouter des mécaniques de confrontation avec le coupable
- Système d'accusation formelle avec vérification des preuves
-
Indices et déductions
- Carnet d'enquêteur pour noter les indices découverts
- Système de déduction permettant de relier les preuves
-
Scénarios multiples
- Plusieurs coupables possibles selon les parties
- Fins alternatives basées sur les choix du joueur
-
Amélioration de l'interface graphique
- Animations pour les déplacements
- Effets sonores d'ambiance
- Mini-carte du manoir
-
Système de sauvegarde
- Sauvegarde/chargement de partie
- Sauvegarde automatique
-
Enrichissement narratif
- Plus de dialogues avec les PNJ
- Événements aléatoires pendant l'enquête
- Cutscenes pour les moments clés
-
Accessibilité
- Support de différentes langues
- Mode daltonien pour l'interface graphique
- Lecteur d'écran compatible
Projet réalisé en binôme dans le cadre du cours de programmation Python d'ESIEE Paris, à partir d'un squelette fourni par l'enseignant.
- Alessandro Di Gallo Clauss
- Laure Dauthieu
