Projet Personnel • Game Dev

Space Shooter

Jeu 2D en Python / Pygame

Création d'un moteur de jeu 2D complet en Python.
Basé sur le tutoriel de Clear Code, enrichi avec mes propres fonctionnalités (boutique, score, power-ups).

Python 3.10+ Pygame-ce POO Gestion d'États
Gameplay Space Shooter

📚 Les Bases (Tutoriel Clear Code)

Pour apprendre la programmation orientée objet appliquée au jeu vidéo, j'ai suivi le tutoriel de la chaîne Clear Code.

Compétences acquises :
  • 🎮 Game Loop : Compréhension de la boucle événementielle (Events, Update, Draw)
  • 👾 Sprite Groups : Gestion efficace de centaines d'entités (lasers, ennemis) via les groupes Pygame
  • 💥 Collisions : Utilisation des masques pour des collisions au pixel près
  • ⏱️ Delta Time : Indépendance du framerate pour une vitesse de jeu constante

🚀 Mes Contributions (Extensions)

Une fois le moteur de base fonctionnel, j'ai voulu aller plus loin et transformer cette démo technique en un vrai jeu complet. J'ai dû concevoir mes propres systèmes sans guide.

🖥️ Menu & États

Création d'un système de gestion d'états (State Machine) pour passer fluidement du Menu Principal au Jeu, puis au Game Over ou au Shop.

⚡ Système de Power-Ups

Implémentation d'une logique de drop aléatoire avec probabilité 1/30. Le bonus "Rapid Fire" modifie temporairement la cadence de tir du joueur.

💰 Boutique & High Score

Ajout d'une économie (crédits gagnés en détruisant les ennemis) et d'un système de sauvegarde locale du meilleur score (lecture/écriture fichier JSON).

Menu Principal

Menu Principal avec State Machine.

Gameplay avec Power-Ups

Gameplay intense avec système de power-ups.

Boutique

Système de boutique avec économie intégrée.

💻 Extrait de Code

Exemple de la logique de drop du Power-Up Rapid Fire :

def destroy_asteroid(self, asteroid):
    # Explosion FX
    Explosion(self.all_sprites, asteroid.rect.center)
    
    # 1 chance sur 30 de drop un power-up
    if randint(0, 30) == 1:
        PowerUp(self.all_sprites, asteroid.rect.center, 'rapid_fire')
        
    asteroid.kill()
    self.score += 100

Ce système utilise un générateur aléatoire pour créer un drop probabiliste, ajoutant de la variété et de l'excitation au gameplay.

Découvrir le projet

Code source complet sur GitHub • Tutoriel Clear Code sur YouTube