Pacman Pirate est un jeu inspiré de Pacman, mais sur un thème pirate. Le joueur incarne un bateau pirate qui doit parcourir un labyrinthe océanique, collecter des points (pièces d'or) et éviter ou combattre des ennemis tels que des pieuvres et des bateaux ennemis.
Le jeu est développé en Python en utilisant la bibliothèque Pygame. Il comprend plusieurs niveaux de difficulté, un système de score, et des effets visuels et sonores.
Le projet est organisé selon la structure suivante :
pacman_pirate/
├── assets/
│ ├── images/
│ │ ├── player.png
│ │ ├── octopus.png
│ │ ├── enemy_ship.png
│ │ ├── wall.png
│ │ ├── point.png
│ │ └── power_point.png
│ └── sounds/
│ ├── move.wav
│ ├── collect.wav
│ ├── power.wav
│ ├── hit.wav
│ ├── game_over.wav
│ ├── victory.wav
│ ├── menu.wav
│ ├── background.wav
│ └── README.txt
├── src/
│ ├── player.py
│ ├── enemy.py
│ ├── maze.py
│ ├── game_manager.py
│ ├── level_manager.py
│ ├── sound_manager.py
│ ├── menu_manager.py
│ ├── maze_integration.py
│ ├── player_integration.py
│ ├── enemy_integration.py
│ ├── asset_generator.py
│ ├── game.py
│ └── test_game.py
├── main.py
└── todo.md
Point d'entrée du jeu. Initialise et lance le jeu.
Contient la classe principale PacmanPirate
qui gère la boucle de jeu, les états du jeu, et l'intégration de tous les composants.
Définit la classe Player
qui représente le bateau pirate contrôlé par le joueur. Gère le mouvement, les collisions et la collecte des points.
Définit les classes Enemy
, Octopus
et EnemyShip
qui représentent les ennemis. Gère leur mouvement et leur comportement.
Définit la classe Maze
qui représente le labyrinthe océanique. Gère la structure du labyrinthe, les murs, les points et les collisions.
Définit la classe GameManager
qui gère l'état global du jeu, les scores et les niveaux.
Définit la classe LevelManager
qui gère les différents niveaux du jeu et leur chargement.
Définit la classe SoundManager
qui gère les effets sonores et la musique du jeu.
Définit la classe MenuManager
qui gère les différents menus et écrans du jeu.
Génère les sprites pour le jeu en utilisant la bibliothèque Pillow.
Contient des tests pour vérifier le bon fonctionnement du jeu.
Classe principale du jeu qui gère la boucle de jeu, les états du jeu, et l'intégration de tous les composants.
width
,height
: Dimensions de la fenêtre de jeufps
: Images par secondecell_size
: Taille d'une cellule du labyrinthescreen
: Surface d'affichage Pygameclock
: Horloge Pygame pour contrôler la vitesse du jeulevel_manager
,game_manager
,sound_manager
,menu_manager
: Gestionnaires du jeuplayer
: Instance du joueurenemies
: Liste des ennemismaze
: Instance du labyrinthegame_state
: État actuel du jeu (menu, playing, pause, level_transition, game_over, victory)current_level
: Niveau actuelscore
: Score du joueurlives
: Vies restantes du joueur
load_assets()
: Charge les images et les sonsinitialize_level(level_number)
: Initialise un niveauhandle_events()
: Gère les événements du jeuupdate()
: Met à jour l'état du jeudraw()
: Dessine les éléments du jeustart_game()
: Démarre une nouvelle partierun()
: Exécute la boucle principale du jeu
Représente le bateau pirate contrôlé par le joueur.
x
,y
: Position du joueurspeed
: Vitesse de déplacementdirection
: Direction actuellelives
: Nombre de viesscore
: Score du joueurimage
: Image du joueurrect
: Rectangle de collision
load_image(image_path)
: Charge l'image du joueurupdate(keys, maze)
: Met à jour la position du joueurcheck_collision(maze)
: Vérifie les collisions avec les murscollect_point(points)
: Collecte des pointslose_life()
: Perd une viedraw(screen)
: Dessine le joueur
Représentent les ennemis du jeu.
x
,y
: Position de l'ennemispeed
: Vitesse de déplacementdirection
: Direction actuelleimage
: Image de l'ennemirect
: Rectangle de collision
load_image(image_path)
: Charge l'image de l'ennemiupdate(maze, player)
: Met à jour la position de l'ennemicheck_collision(maze)
: Vérifie les collisions avec les murschange_direction()
: Change la direction de l'ennemicheck_player_collision(player)
: Vérifie les collisions avec le joueurdraw(screen)
: Dessine l'ennemi
Représente le labyrinthe océanique.
width
,height
: Dimensions du labyrinthe en nombre de cellulescell_size
: Taille d'une cellule en pixelsgrid
: Grille du labyrinthewalls
: Liste des murspoints
: Liste des pointspower_points
: Liste des points de pouvoirwall_image
: Image des murs
init_empty_grid()
: Initialise une grille videload_level(level_data)
: Charge un niveauload_wall_image(image_path)
: Charge l'image des mursis_wall(x, y)
: Vérifie si la position donnée contient un murcheck_collision(rect)
: Vérifie si un rectangle est en collision avec un murcollect_point(rect)
: Vérifie si un rectangle collecte un pointdraw(screen)
: Dessine le labyrintheis_complete()
: Vérifie si tous les points ont été collectés
Le jeu peut être dans l'un des états suivants :
menu
: Menu principalplaying
: Jeu en courspause
: Jeu en pauselevel_transition
: Transition entre les niveauxgame_over
: Fin de partie (défaite)victory
: Fin de partie (victoire)
- Flèches directionnelles : Déplacer le bateau pirate
- Espace : Confirmer / Commencer le jeu / Passer au niveau suivant
- Échap : Pause / Retour au menu / Quitter
- M : Retour au menu
Le jeu comprend trois niveaux de difficulté croissante :
- Mer des Caraïbes : Niveau facile avec peu d'ennemis
- Détroit de Gibraltar : Niveau moyen avec plus d'ennemis et un labyrinthe plus complexe
- Triangle des Bermudes : Niveau difficile avec beaucoup d'ennemis et un labyrinthe très complexe
Les sprites du jeu sont générés automatiquement en utilisant la bibliothèque Pillow :
player.png
: Bateau pirate (joueur)octopus.png
: Pieuvre (ennemi)enemy_ship.png
: Bateau ennemiwall.png
: Mur (récif corallien)point.png
: Point (pièce d'or)power_point.png
: Point de pouvoir (coffre au trésor)
Des placeholders pour les sons sont créés, mais ils peuvent être remplacés par des fichiers audio réels :
move.wav
: Son de déplacement du joueurcollect.wav
: Son de collecte des pointspower.wav
: Son de collecte des points de pouvoirhit.wav
: Son de collision avec un ennemigame_over.wav
: Son de fin de partievictory.wav
: Son de victoiremenu.wav
: Musique du menubackground.wav
: Musique de fond pendant le jeu
Le module test_game.py
contient des tests pour vérifier le bon fonctionnement du jeu :
test_game_initialization()
: Teste l'initialisation du jeutest_level_loading()
: Teste le chargement des niveauxtest_player_movement()
: Teste le mouvement du joueurtest_enemy_movement()
: Teste le mouvement des ennemistest_collision_detection()
: Teste la détection des collisionstest_point_collection()
: Teste la collecte des pointstest_game_states()
: Teste les différents états du jeu
- Python 3.x
# Création de l'environnement virtuel
python -m venv venv
# Activation de l'environnement virtuel
venv\Scripts\activate
# Création de l'environnement virtuel
python3 -m venv venv
# Activation de l'environnement virtuel
source venv/bin/activate
Une fois l'environnement virtuel activé, installez les dépendances nécessaires :
pip install -r requirements.txt
Ou installez-les manuellement :
pip install pygame pillow
- Exécutez
main.py
pour lancer le jeupython main.py
- Dans le menu principal, appuyez sur Espace pour commencer
- Utilisez les flèches directionnelles pour déplacer le bateau pirate
- Collectez toutes les pièces d'or pour passer au niveau suivant
- Évitez les pieuvres et les bateaux ennemis
- Appuyez sur Échap pour mettre le jeu en pause
- Python 3.x
- Pygame (gestion du jeu)
- Pillow (pour la génération des sprites)
- Ajout de power-ups (invincibilité temporaire, vitesse accrue, etc.)
- Ajout de niveaux supplémentaires
- Amélioration des graphismes et des animations
- Ajout d'un système de sauvegarde des meilleurs scores
- Ajout d'un mode multijoueur
- Ajout d'un éditeur de niveaux