Pygame: Initiez-Vous Au Développement de Jeux Vidéo en
Pygame: Initiez-Vous Au Développement de Jeux Vidéo en
Pygame: Initiez-Vous Au Développement de Jeux Vidéo en
Pygame
seulement dans le domaine du jeu vidéo, mais également dans celui de la simulation.
La maîtrise du langage Python n’étant pas nécessaire pour lire ce livre, l’auteur commence par en pré-
senter les bases avant d’indiquer comment faire ses premiers pas avec Pygame et de détailler la
structure d’un jeu Pygame. Puis, au fil des chapitres, les principaux aspects du développement de jeux
Benoît PRIEUR
Ingénieur en informatique diplômé de l’ISIMA de Clermont-Ferrand, Benoît PRIEUR conduit des missions de conseil
pour le compte de sa société Soarthec. Spécialisé dans le développement en Python et en C#, il met quotidienne-
ment en œuvre ses compétences de développement auprès de ses clients. Il est également formateur sur les tech-
nologies .NET et le développement Python.
En téléchargement
Le code source
des exemples du livre
29 €
ISBN : 978-2-409-02168-8
Table des matières 1
Chapitre 1
Présentation et bases du langage Python
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2. Présentation de Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1 Le langage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2 Installation de Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.1 Installation de Python sur Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.2 Installation de Python sur Mac OS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.3 Installation de Python sur Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3. Les bases de Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.1 L'interpréteur de commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2 Les variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.3 De l'interpréteur de commande à l'usage d'un fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.4 Installation des modules avec pip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.5 Les chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.5.1 La fonction print. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.5.2 Une chaîne de caractères est comme une collection . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.5.3 La taille d'une chaîne de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.5.4 Premières manipulations de chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.6 Les listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.7 Les conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.8 Les boucles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.8.1 La boucle for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.8.2 La boucle while. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.8.3 Le mot-clé break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.9 L'environnement virtuel en bref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.10 Développement d'un petit jeu en ligne de commande. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2 Pygame - Initiez-vous au développement de jeux vidéo en Python
Chapitre 2
Premiers pas avec Pygame
1. La boucle de jeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2. Présentation de Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3. Installation de Pygame. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4. Les modules composant Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5. Réalisation d'un premier jeu graphique : Fusée et planètes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34
5.1 Les images utilisées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.2 La fenêtre du jeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.3 La boucle du jeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.4 Le système de coordonnées Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.5 Les variables du jeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.5.1 Les variables liées à la fusée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.5.2 Les variables liées aux deux planètes qui « tombent » . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.5.3 Les variables relatives au comptage des points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.5.4 Les variables relatives aux images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.6 Les déplacements de la fusée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.7 Les déplacements des planètes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
5.8 Les collisions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43
5.9 Le code complet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44
Chapitre 3
La structure d’un jeu Pygame
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
2. Initialisation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
3. Aide en ligne de commande. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4. Affichage de la fenêtre. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.1 Le tuple size de set_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.2 Le paramètre flags de set_mode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5. Rappels concernant la boucle de jeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Table des matières 3
Chapitre 4
Le dessin et le graphisme dans tous ses états avec Pygame
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
2. Dessiner des formes avec Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
2.1 Le module pygame.draw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
2.2 Dessiner une ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
2.3 Dessiner une ligne brisée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
2.4 Dessiner un rectangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
2.5 Dessiner un polygone. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
2.6 Dessiner un cercle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
2.7 Dessiner une ellipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
2.8 Dessiner un arc de cercle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
2.9 L'anti-aliasing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
4 Pygame - Initiez-vous au développement de jeux vidéo en Python
Chapitre 5
L'ajout de sons dans un jeu Pygame
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
2. La gestion du son avec Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
2.1 Les modules pygame.mixer et pygame.mixer.music . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
2.1.1 Le module pygame.mixer.music (fond sonore) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
2.1.2 Le module pygame.mixer (effets sonores). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
2.2 Les fichiers son. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
2.3 La notion de channel (canal) dans Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
3. Exemple d'utilisation du son avec Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Table des matières 5
Chapitre 6
Les sprites avec Pygame
1. La notion de sprite dans Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
2. La notion de group dans Pygame. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
3. Une gestion des collisions simplifiée. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
4. Quelques explications sur la programmation orientée objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
4.1 Le paradigme objet, les grandes lignes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
4.2 L'héritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
4.3 Des mots-clés fondamentaux en Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
4.3.1 Le mot-clé self . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
4.3.2 Le mot-clé class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
4.3.3 Le mot-clé def . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102
4.3.4 __init__ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102
4.4 L'exemple de la classe Voiture en Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102
4.5 Ce que l'on savait déjà… sans le savoir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104
5. Le module sprite et son utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104
5.1 Le contenu du module sprite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104
5.2 Création d'un sprite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .105
5.2.1 Premier exemple d'utilisation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .105
5.2.2 Retour sur le premier exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109
5.3 Gros plan sur l'attribut rect de la classe Sprite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109
5.4 La liste de sprites (group). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
5.5 Gestion des collisions grâce aux sprites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Chapitre 7
Plus loin avec le module sprite, exemples appliqués
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
2. Le jeu du serpent (snake) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
2.1 Le contexte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
2.2 Les images utilisées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
2.3 Les effets sonores utilisés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
2.4 Le programme global. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
2.5 Les listes de sprites (group) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
6 Pygame - Initiez-vous au développement de jeux vidéo en Python
Chapitre 8
Introduction à la 3D et à la notion de moteur de jeu
1. Travailler en 3D avec Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
1.1 La bibliothèque 3D OpenGL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
1.2 OpenGL en Python/Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156
1.2.1 PyOpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156
1.2.2 Les notions fondamentales : sommet et arête . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156
1.2.3 PyOpenGL et Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
1.3 PyOpenGL/Pygame : l’exemple du cube . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .157
1.3.1 Le code global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
1.3.2 Explication détaillée du code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159
1.4 Plus loin avec PyOpenGL/Pygame : l’exemple du cube (suite). . . . . . . . . . . . . . . . . . . . . . . .162
1.4.1 Le code global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .162
1.4.2 Explication détaillée du code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .164
2. La notion de moteur de jeu vidéo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165
2.1 Définition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165
2.2 Créer son propre moteur de jeu ?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .166
2.3 Une ébauche de moteur de jeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .166
Chapitre 9
Les principaux modules Pygame
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .169
2. L'objet Color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .170
2.1 La classe Color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .170
2.2 Les constructeurs de Color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
2.3 Les principales fonctions de la classe Color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
8 Pygame - Initiez-vous au développement de jeux vidéo en Python
Chapitre 10
Les modules secondaires Pygame
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .219
2. Le module cursors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
2.1 Les curseurs prédéfinis du module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
2.2 La fonction compile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
2.3 La fonction load_xbm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Table des matières 13
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Chapitre 5
L'ajout de sons dans un jeu Pygame
1. Introduction
P yg a m e L'ajout de sons dans un jeu Pygame
Animer un jeu vidéo, c'est d'abord mettre en place le visuel et donner le mouvement à certains
objets graphiques. Mais cela consiste également à ajouter du son au jeu, par exemple un fond
sonore, une musique, pour ainsi améliorer l’expérience utilisateur. Il y a dans Pygame un module
pour cela. Son étude et sa mise en œuvre constituent l'essentiel du présent chapitre.
Le module qui permet la gestion des sons en Pygame s'appelle pygame.mixer. Il contient deux
grandes notions :
– Le sous-module music qui gère la musique de fond. Il n'y en a qu'une à la fois.
– L'objet Sound de mixer que l'on peut instancier plusieurs fois pour s'en servir par exemple
pour les effets sonores du jeu.
MRemarque
Une documentation des modules mixer et music de Pygame est disponible dans le chapitre
Les principaux modules Pygame.
Ils sont recommandés, car leur utilisation ne pose aucun problème, quelle que soit la
plateforme. Il n'en va pas de même du format de compression audio MP3 par exemple, qui selon
la documentation officielle peut induire des soucis d'utilisation sous certaines plateformes, en
particulier avec la distribution Linux Debian (« On some systems an unsupported format can
crash the program, e.g. Debian Linux. Consider using OGG instead. »).
Comment obtenir ou afficher des fichiers son pour un fond sonore ou pour des effets sonores ?
On peut par exemple obtenir de la musique publiée sous licence libre sur Internet. On peut éga-
lement créer ses propres fichiers son. Par exemple en les enregistrant grâce à l'enregistreur
d'un smartphone ou en utilisant le logiciel libre d'enregistrement Audacity, qui permet aussi de
faire du montage audio et d'exporter des sons dans le format de son choix, le format OGG en
particulier.
sound_1 = pygame.mixer.Sound("son1.ogg")
sound_2 = pygame.mixer.Sound("son2.ogg")
canal_1 = pygame.mixer.Channel(0)
canal_2 = pygame.mixer.Channel(1)
canal_1.play(sound_1)
canal_2.play(sound_2)
MRemarque
Cette notion est largement abordée dans les sections Le module mixer et music au chapitre
Les principaux modules Pygame.
94 Pygame - Initiez-vous au développement de jeux vidéo en Python
Puis on crée le fond sonore d'après un fichier son OGG qui inclut un sifflement mélodique d'une
durée de quelques dizaines de secondes.
SIFFLEMENT = pygame.mixer.music.load("sifflement.ogg")
Ensuite, on peut jouer ce fond sonore avec la fonction play qui prend deux paramètres :
– Le premier permet d'indiquer combien de fois on désire boucler sur le son (ici 10 fois).
– Le second, une valeur décimale, indique en secondes le moment du morceau qui constitue le
début de la diffusion.
pygame.mixer.music.play(10, 0.0)
pygame.mixer.music.set_volume(VOLUME)
COQ.set_volume(VOLUME)
CORNEILLE.set_volume(VOLUME)
VELO.set_volume(VOLUME)
pygame.mixer.music.set_volume(VOLUME)
COQ.set_volume(VOLUME)
CORNEILLE.set_volume(VOLUME)
VELO.set_volume(VOLUME)
pygame.init()
pygame.mixer.init()
# COULEURS
COULEUR_BLANCHE = pygame.Color(255, 255, 255)
SUITE = True
# FOND SONORE
SIFFLEMENT = pygame.mixer.music.load("sifflement.ogg")
pygame.mixer.music.play(1, 0.0)
# EFFETS SONORES
COQ = pygame.mixer.Sound("coq.ogg")
CORNEILLE = pygame.mixer.Sound("corneille.ogg")
VELO = pygame.mixer.Sound("vélo.ogg")
# BOUCLE DE JEU
while SUITE:
pygame.display.flip()