Skip to content

Amine-Amllal/NEBULA-STRIKE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

NEBULA STRIKE — Jeu Vidéo 2D avec Pygame & IA

Objectif Pédagogique: Se familiariser avec Pygame et les techniques d'intelligence artificielle comportementale appliquées aux jeux vidéo

Python Pygame License

À Propos

J'ai développé ce projet pour des apprentis. Ce projet a pour objectif d'aider les apprentis à maîtriser progressivement Pygame, depuis les bases jusqu'à la création d'un jeu complet intégrant des agents IA adaptatifs.

Objectifs Pédagogiques

  • Configurer un environnement de développement Pygame et comprendre la game loop
  • Manipuler sprites, surfaces, rectangles, collisions et événements clavier/souris
  • Construire une architecture de jeu orientée objet professionnelle (Game States, Entity System)
  • Implémenter des effets visuels avancés : particules, explosions, scrolling
  • Générer des effets sonores procéduraux avec numpy + pygame
  • Intégrer des comportements d'IA : FSM, A*, Boids, difficulté adaptative

Structure du Projet

Partie 1 : Découverte de Pygame

Introduction aux concepts fondamentaux de Pygame et de la programmation de jeux.

Concepts clés:

  • Game loop (60 FPS)
  • Gestion des événements (clavier, souris, fermeture fenêtre)
  • Rendering et delta time
  • Sprites et collisions

Demo de l'app

Voici une démonstration de l'application : l'écran de démarrage, les vagues, la scène du boss et l'écran de victoire.

Starting page

Wave 1 Wave 2 Wave 3 Wave 4 Wave 5 Wave 6

Beating the boss

Victory


Partie 2 : Jeu Complet

Développement d'un space shooter 2D professionnel avec architecture modulaire.

Architecte Professionnelle

nebula_strike/
├── main.py                 # Point d'entrée + game loop principale
├── settings.py             # Toutes les constantes
├── entities/
│   ├── player.py           # Classe Player (vaisseau joueur)
│   ├── enemy.py            # Ennemis (Drone, Destroyer, Carrier)
│   ├── boss.py             # Boss avec machine à états
│   ├── bullet.py           # Projectiles
│   └── powerup.py          # Power-ups (bouclier, tir triple, bombe EMP)
├── systems/
│   ├── particles.py        # Système de particules (explosions, trainées)
│   ├── sound_manager.py    # Sons procéduraux générés
│   ├── hud.py              # HUD (santé, score, vague, énergie)
│   ├── wave_manager.py     # Gestionnaire de vagues ennemies
│   ├── pathfinding.py      # A* pathfinding (Partie 3)
│   ├── boids.py            # Essaim Boids (Partie 3)
│   └── adaptive_difficulty.py  # Difficulté adaptative (Partie 3)
├── utils/
│   └── helpers.py          # Fonctions utilitaires
└── .gitignore

Fonctionnalités du Jeu

Fonctionnalité Description
Système de vagues 5 vagues progessives + Boss spécial
3 types d'ennemis Drone (rapide), Destroyer (canon), Carrier (porte-drone)
Boss multi-phase 4 phases avec patterns d'attaque différents
Système de particules Explosions, trainées, onde EMP
Power-ups Bouclier régénérant, tir triple, bombe EMP
Effets sonores Générés procéduralement (numpy + pygame)
HUD complet Santé, bouclier, score, vague, barre boss

Partie 3 : Intelligence Artificielle Comportementale

Intégration de 4 techniques d'IA pour créer des comportements ennemis intelligents et adaptatifs.

Techniques IA Implémentées

FSM (Finite State Machine) — Ennemi Elite

Machine à états avec 5 phases : PATROL, CHASE, ATTACK, EVADE, RETREAT

PATROL (patrouille)
  ↓
CHASE (poursuite si détecté)
  ├→ ATTACK (attaque rapprochée)
  ├→ EVADE (esquive balle)
  └→ RETREAT (recul si HP < 40%)

Priorités de transition:

  1. Éviter les balles proches (distance < 100px)
  2. Retraite si HP < 40%
  3. Attaque si proche du joueur (distance < 170px)
  4. Poursuite si détecté (distance < 280px)
A* Pathfinding — Navigation autour d'astéroïdes

Algorithme de pathfinding sur grille discrète pour naviguer autour d'obstacles.

  • Grille: 40px par cellule (22x17 cellules pour 900x700)
  • Heuristique: Distance euclidienne
  • Mouvements: 8-directionnels (cardinaux + diagonaux)
  • Mise à jour: Recalcul du chemin toutes les 0.8s
Boids (Flocking) — Essaim coordonné

Modèle de Craig Reynolds (1986) avec 3 règles simples:

Règle Effet Poids
Séparation Éviter les voisins proches 1.8
Alignement Suivre la direction moyenne 1.0
Cohésion Rester groupé 1.0
Poursuite joueur Chercher le joueur 1.5
Vitesse = max(MAX_SPEED, séparation + alignement + cohésion + poursuite)
Difficulté Adaptative — Ajustement dynamique

Surveille les performances du joueur et ajuste les paramètres du jeu en temps réel.

Métriques de performance:

  • Précision de tir (accuracy) : 40%
  • Kills par minute (kpm) : 30%
  • Ratio de survie (deaths) : 30%

Score de difficulté: [0.0 (très facile) → 2.0 (très difficile)] | Cible = 1.0

Multiplicateurs adaptatifs:

  • Vitesse ennemis : 0.7x → 1.5x
  • Taux spawn : 0.6x → 1.3x
  • HP ennemis : 0.8x → 1.4x
  • Taux power-ups : 5% → 25%

Installation

Prérequis

  • Python 3.11+
  • pip (gestionnaire de paquets)

Étapes d'installation

  1. Cloner le repository:
git clone https://github.com/yourusername/nebula-strike.git
cd nebula-strike
  1. Créer un environnement virtuel (recommandé):
python -m venv venv
  1. Activer l'environnement virtuel:

Windows (PowerShell):

.\venv\Scripts\Activate.ps1

Windows (CMD):

venv\Scripts\activate.bat

Linux/Mac:

source venv/bin/activate
  1. Installer les dépendances:
pip install pygame==2.6.0 numpy
  1. Lancer le jeu:
cd nebula_strike
python main.py

Contrôles

Action Clavier
Mouvement ↑ ↓ ← → ou W A S D
Tir SPACE
Pause P
Bombe EMP B
Menu ENTRÉE pour démarrer
Rejouer R après Game Over
Quitter ESC

Configuration

Tous les paramètres du jeu sont centralisés dans settings.py:

# Fenêtre
WIDTH, HEIGHT = 900, 700
FPS = 60

# Couleurs
C_BG = (4, 4, 20)           # Fond bleu nuit
C_PLAYER = (0, 200, 255)    # Cyan
C_BULLET_P = (255, 255, 100) # Jaune
C_DRONE = (200, 50, 50)     # Rouge sombre
C_DESTROYER = (255, 140, 0)  # Orange
C_CARRIER = (180, 0, 220)   # Violet
C_BOSS = (255, 50, 150)     # Rose

# Gameplay
PLAYER_HP = 100
PLAYER_SPEED = 5.5
SHIELD_MAX = 100
SHIELD_REGEN = 0.15

# Ennemis
DRONE_HP, DRONE_SPD = 20, 2.5
DESTROYER_HP, DESTROYER_SPD = 60, 1.5
CARRIER_HP, CARRIER_SPD = 120, 0.8
BOSS_HP = 1000

# Scoring
SCORE_DRONE = 100
SCORE_DESTROYER = 300
SCORE_CARRIER = 500
SCORE_BOSS = 5000

Architecture & Design Patterns

Entity System

Architecture basée sur les entités (Pygame Sprite Groups) pour gestion efficace de milliers d'objets.

State Machine

Utilisée pour les états du jeu (MENU, PLAYING, PAUSED, GAME_OVER, VICTORY) et les comportements IA.

Particle System

Pool d'objets légers pour explosions, trainées et effets visuels sans surcharge mémoire.

Sound Manager

Génération procédurale de sons avec numpy (laser, explosion, power-up, transitions boss).


Vagues & Progression

Vague Contenu Difficulté Boss
1-2 Drones progressifs Facile Non
3-4 Drones + Destroyers Moyen Non
5 Essaim Boids + Elite Difficile Non
6+ Vague adaptée Dynamique OUI

Tests & Points de Contrôle

Partie 1

  • Game loop fonctionnelle à 60 FPS
  • Mouvements du vaisseau fluides (delta time)
  • Affichage des étoiles avec parallaxe
  • État MENU → PLAYING → GAME_OVER

Partie 2

  • 3 types d'ennemis avec comportements distincts
  • Système de particules colorées
  • Boss avec 3 phases (PHASE1, PHASE2, PHASE3)
  • Collisions joueur/ennemis/balles
  • HUD affichant tous les infos
  • Sons procéduraux jouant aux moments clés

Partie 3

  • FSM de l'Elite affichant transitions console
  • A* calculant chemins contournant astéroïdes
  • Essaim Boids montrant séparation/alignement/cohésion
  • Mode debug (F1) affichant métriques difficulté
  • WaveManager adaptant contenu selon performance

Système de Particules

Animations Implémentées

Type Couleur Cas d'usage
Explosion RGB selon ennemi Mort d'ennemi
Trainée Cyan (0, 150, 255) Propulsion joueur
Onde EMP Cyan fluo (0, 255, 200) Bombe EMP
Éclairs Boss Rouge (255, 50, 50) Rage du boss (Phase 3)

Variables de Contrôle

MAX_PARTICLES = 500          # Limite totale
spawn_explosion(x, y, color, count=40, speed=4)
spawn_trail(x, y, color=(0,150,255))
spawn_emp(x, y, radius=120)

Système Audio Procédural

Sons Générés avec NumPy

Son Technique Paramètres
Laser Onde carrée + sweep freq 880Hz → 200Hz, 0.08s
Explosion Bruit blanc + enveloppe 0.4s, attaque rapide
Power-up Arpège (Do-Mi-Sol-Do) 4 notes ascendantes
Boss Phase Sinusoïde montante 200Hz → 1000Hz

Extensions Proposées

Court terme

  • Système de sauvegarde du meilleur score (JSON)
  • Éditeur de niveaux graphique
  • Support multijoueur local (2 joueurs)

Long terme

  • Boss IA avec Q-Learning (apprentissage par renforcement)
  • Génération procédurale de niveaux (Perlin noise)
  • Port WebAssembly avec Pygbag (navigateur)
  • Réseau de neurones PyTorch pour clonage comportemental

Ressources & Documentation

Pygame

Intelligence Artificielle

NumPy & Son


Rapport Pédagogique

Un rapport complet (2-3 pages) est attendu couvrant:

  1. Analyse comparative des 4 techniques IA
  2. Résultats mesurés du système adaptatif (graphe)
  3. Critique du modèle Boids et améliorations
  4. Proposition d'extension : Boss IA avec Q-Learning

Auteur & Licence

Projet pédagogique ENSAM — 4ème année IATD
Département Mathématiques et Informatique

Durée estimée: 8-10 heures (3-4 séances)
Langage: Python 3.11+ / Pygame 2.x
Prérequis: Python OOP, algorithmes de base, notions d'IA

Licence

Ce projet est fourni à titre pédagogique sous licence MIT. Consultez LICENSE pour détails.


Critères de Réussite

  • Le jeu s'exécute sans erreurs à 60 FPS
  • Tous les contrôles fonctionnent
  • Les 4 techniques IA sont visibles et fonctionnelles
  • Le rapport pédagogique est complet et réfléchi
  • (Bonus) Implémentation d'une extension proposée

Support & Questions

Pour toute question, consultez:

  • La documentation Pygame officielle
  • Les commentaires détaillés dans le code source
  • Le rapport pédagogique inclus

Bon développement!


Made by AMLLAL Amine

Pygame Badge

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages