1-07. Programmation modulaire
Nous voici arrivés à la fin du programme ! 😎. Ce « chapitre » va être traité sous forme de projet. Vous allez créer un petit jeu de votre choix à l’aide du module pygame.
L’objectif ici est de vous donnez un aperçu de comment travaille un développeur professionnel :
- Vous n’allez pas réinventer la roue : d’autres développeurs ont passé un temps considérable à préparer des outils prêts à l’emploi. Ces outils sont appelés des bibliothèques ou des frameworks
- Vous ne savez pas tout, mais vous avez à votre disposition de la documentation sur internet et l’IA (à utiliser intelligemment et avec modération – rappelez-vous, l’IA n’est pas votre amie !)
La seule contrainte que je vous impose est d’utiliser la bibliothèque Pygame.
Qu’est-ce qu'une bibliothèque ?
- Utiliser des API ou des bibliothèques.
- Exploiter leur documentation.
- Créer des modules simples et les documenter.
Une bibliothèque en programmation est un ensemble de fonctions, classes et modules préétablis qui permettent d'étendre les fonctionnalités d'un langage sans avoir à tout réécrire soi-même. C'est une boîte à outils spécialisée que l'on peut utiliser pour réaliser certaines tâches complexes plus facilement.
Les bibliothèques présentent plusieurs avantages majeurs:
- Gain de temps : pas besoin de réécrire des fonctionnalités existantes
- Code testé et optimisé : les bibliothèques populaires sont généralement bien testées et efficaces
- Abstraction : elles permettent d'utiliser des fonctionnalités complexes sans comprendre tous les détails d'implémentation
- Standardisation : elles fournissent des façons communes d'aborder certains problèmes
Vous connaissez déjà certainement des bilbiotèques comme Numpy ou Mathplotlib.
En Python, on utilise l'instruction import pour intégrer une bibliothèque dans son code. Attention, il est souvent nécessaire d’utiliser cette commande en temps qu’administrateur.
La bibliothèque Pygame
Qu'est-ce que Pygame?
Pygame est une bibliothèque Python spécialisée dans la création de jeux vidéo 2D. C'est une surcouche de la bibliothèque SDL (Simple DirectMedia Layer) qui rend accessible en Python des fonctionnalités comme :
- L'affichage graphique
- La gestion des événements (clavier, souris)
- Le chargement et l'affichage d'images
- La lecture de sons et de musiques
- La gestion des collisions
- L'animation de sprites
Fonctionnalités principales
- Système de fenêtres et surfaces
- Création d'une fenêtre d'affichage
- Manipulation de surfaces (images)
- Système de coordonnées (x,y) pour positionner les éléments
- Gestion des événements
- Détection des entrées clavier et souris
- Boucle d'événements pour réagir aux actions du joueur
- Manipulation d'images
- Chargement d'images depuis des fichiers
- Redimensionnement, rotation, transformation
- Animation par succession d'images (sprites)
- Son et musique
- Lecture de fichiers audio
- Contrôle du volume, pause, reprise
- Gestion des collisions
- Détection quand deux éléments se touchent
- Gestion des rectangles de collision
Structure typique d’un programme Pygame
# Importation de la bibliothèque
import pygame
# Initialisation
pygame.init()
# Création de la fenêtre
ecran = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Mon jeu")
# Variables du jeu
continuer = True
horloge = pygame.time.Clock()
# Boucle principale du jeu
while continuer:
# Limitation de vitesse
horloge.tick(60) # 60 images par seconde
# Gestion des événements
for evenement in pygame.event.get():
if evenement.type == pygame.QUIT:
continuer = False
# Mise à jour des éléments du jeu
# ...
# Affichage
ecran.fill((0, 0, 0)) # Fond noir
# Dessiner les éléments du jeu
# ...
# Mise à jour de l'écran
pygame.display.flip()
# Fermeture du jeu
pygame.quit()
Ressources
- Site officiel : pygame.org
- Documentation officielle : pygame.org/docs/
- Tutoriels pour débutants, en français : wikibooks.org/wiki/Pygame
- Exemples de jeux simples : pygame.org/tags/example
C’est parti ! Amusez-vous bien ! 🤓
Barème de notation détaillé du projet
| Critère | Barème | Descripteurs |
|---|---|---|
| Catégorie A — Maîtrise des fondamentaux Pygame (10 pts) | ||
| A1. Affichage + formes mobiles | 2 |
0 : écran non fonctionnel 1 : formes affichées mais statiques 2 : au moins un élément mobile bien géré |
| A2. Gestion des collisions | 4 |
0 : aucune collision 1-2 : détection présente mais réaction absente ou incorrecte 3 : collision détectée + réaction cohérente 4 : collisions bien intégrées dans la logique du jeu |
| A3. Réaction aux événements | 2 |
0 : aucun event géré 1 : un seul type d'event basique (ex. quitter) 2 : plusieurs events (touches + souris ou plusieurs actions) bien intégrés |
| A4. Maîtrise démontrée à l'oral | 2 |
0 : l'élève ne repère pas les parties correspondantes 1 : repère mais explique difficilement 2 : identifie et explique clairement les trois mécanismes |
| Un projet avec uniquement ces bases, correctement réalisé et expliqué = 10/20 | ||
| Catégorie B — Qualité du code (4 pts) | ||
| B1. Lisibilité et organisation | 2 |
0 : code monolithique, noms obscurs, pas de commentaires 1 : effort visible mais partiel 2 : code clair, nommage explicite, commentaires pertinents |
| B2. Structuration orientée objet et modules | 2 |
0 : pas de classes 1 : une classe ou tentative incomplète 2 : classes cohérentes, réparties en modules distincts |
| Catégorie C — Richesse et plaisir de jeu (3 pts) | ||
| C1. Degré d'approfondissement | 2 |
0 : jeu très basique au-delà du minimum 1 : quelques éléments supplémentaires (score, obstacles, sons…) 2 : jeu élaboré avec mécaniques multiples et finition soignée |
| C2. Plaisir de jeu | 1 |
0 : difficile ou ennuyeux à jouer 1 : agréable, équilibré, donne envie de rejouer |
| Catégorie D — Argumentation et recul (3 pts) | ||
| D1. Justification des choix d'implémentation | 3 |
0 : aucune justification 1 : explications superficielles (« j'ai fait comme ça parce que ça marchait ») 2 : justifications partielles et cohérentes 3 : argumentation solide sur la structure, les choix de découpage, les alternatives envisagées |
Repères de notation
| Note | Profil type |
|---|---|
| < 10 | Bases incomplètes ou non maîtrisées |
| 10 | Les trois fondamentaux fonctionnent et l'élève les maîtrise |
| 12-14 | Code propre, quelques classes, jeu un peu enrichi |
| 16-18 | Jeu riche, bien structuré en modules, bonne argumentation |
| 20 | Jeu abouti, architecture OO claire, argumentation impeccable |