Pygame
Initiez-vous au de jeux vidéo en Python
2e édition
Avant-propos
Chapitre 1
Fondamentaux du langage Python
1. Introduction17
2. Caractéristiques du langage Python17
2.1 Langage interprété17
2.2 Typage dynamique fort18
2.3 Multi-paradigme18
2.4 Licence libre18
2.5 Multi-plateforme18
3. Installation de Python19
3.1 Installation de Python sur Windows19
3.2 Installation de Python sur macOS19
3.3 Installation de Python sur Linux19
4. Première utilisation de Python en ligne de commande19
4.1 Plusieurs versions de Python19
4.2 Vérification de la version20
4.3 Première utilisation20
5. Premiers pas en Python21
5.1 Premières instructions21
5.2 Utilisation d'un fichier Python22
5.3 Indentation en Python23
5.4 Variables et fonctions en Python23
5.4.1 Déclarer et utiliser une variable23
5.4.2 Déclarer et utiliser une fonction26
5.5 Un mot sur les modules en Python27
5.5.1 Le mot-clé import27
5.5.2 Un mot sur_main_28
5.6 Boucles et conditions en Python29
5.6.1 La boucle while29
5.6.2 La boucle for29
5.6.3 Les conditions avec if...else...elif30
5.7 Les structures de données en Python30
5.8 Exemple de listes31
5.9 Exemple de tuples32
5.10 Exemple d'ensembles32
5.11 Exemple de dictionnaire32
6. Conclusion33
Chapitre 2
Notions avancées en langage Python
1. Introduction35
2. La programmation orientée objet35
2.1 Introduction35
2.2 Les classes en Python36
2.3 Un mot sur l'héritage et le polymorphisme39
2.3.1 L'héritage39
2.3.2 Le polymorphisme40
2.4 Conclusion40
3. L'environnement virtuel41
3.1 Contexte41
3.2 Petit exemple théorique41
4. La PEP842
4.1 Contexte42
4.2 L'esprit de la PEP843
4.3 Principes généraux et outils43
4.3.1 Principes de la PEP843
4.3.2 Quelques outils44
Chapitre 3
Concepts du jeu vidéo et premiers pas à propos de Pygame
1. Introduction45
2. La boucle de jeu45
3. Présentation de Pygame46
4. Installation de Pygame47
5. Les modules composant Pygame48
6. Réalisation d'un premier jeu graphique : fusée et planètes49
6.1 Les images utilisées49
6.2 La fenêtre du jeu50
6.3 La boucle du jeu51
6.4 Le système de coordonnées Pygame52
6.5 Les variables du jeu53
6.5.1 Les variables liées à la fusée53
6.5.2 Les variables liées aux deux planètes qui « tombent »54
6.5.3 Les variables relatives au comptage des points54
6.5.4 Les variables relatives aux images54
6.6 Les déplacements de la fusée56
6.7 Les déplacements des planètes57
6.8 Les collisions58
6.9 Le code complet59
Chapitre 4
La structure d'un jeu Pygame
1. Introduction63
2. Initialisation64
3. Aide en ligne de commande64
4. Affichage de la fenêtre64
4.1 Le tuple size de set_mode65
4.2 Le paramètre flags de set_mode65
5. Rappels concernant la boucle de jeu66
6. Les surfaces Pygame67
6.1 Définition d'une surface67
6.2 La fenêtre de jeu, une surface particulière68
6.3 Exemple de manipulation d'une surface68
6.4 Manipulation de la surface69
6.5 Surface ou copie de surface ?69
6.6 Coloration de la surface70
7. Gestion des couleurs70
8. Système de coordonnées71
9. Gestion du temps et des événements74
9.1 Gestion du temps dans Pygame74
9.2 Gestion des événements dans Pygame75
9.2.1 La fonction pygame.event.get75
9.2.2 La fonction pygame.event.wait76
9.2.3 La fonction pygame.event.poll76
9.3 Un exemple : le carré qui rebondit76
10. Les codes globaux des deux exemples78
10.1 Premier exemple78
10.2 Deuxième exemple79
Chapitre 5
Le dessin et le graphisme dans tous leurs états avec Pygame
1. Introduction81
2. Dessiner des formes avec Pygame82
2.1 Le module pygame.draw82
2.2 Dessiner une ligne82
2.3 Dessiner une ligne brisée83
2.4 Dessiner un rectangle84
2.5 Dessiner un polygone84
2.6 Dessiner un cercle85
2.7 Dessiner une ellipse85
2.8 Dessiner un arc de cercle86
2.9 L'anti-aliasing89
3. Afficher et sauvegarder des images avec Pygame90
3.1 Le module pygame.image90
3.2 Charger des images avec Pygame91
3.2.1 La fonction pygame.draw.load91
3.2.2 La bonne pratique de l'appel de convert()91
3.2.3 Exemple de chargement et d'affichage d'une image92
3.3 Enregistrer des images avec Pygame93
4. Utiliser et manipuler du texte dans Pygame95
4.1 Le module pygame.font95
4.2 Utiliser des polices de caractères système avec Pygame95
4.3 Utiliser ses propres polices de caractères avec Pygame97
5. Concevoir un logiciel de dessin avec Pygame97
5.1 Gérer les événements de la souris ou du clavier en Pygame97
5.2 Première version du logiciel : afficher le tracé réalisé avec la souris99
5.3 Seconde version du logiciel : améliorations diverses101
5.3.1 Amélioration de l'expérience du tracé101
5.3.2 Ajout de fonctionnalités (couleur, épaisseur, etc.)101
6. Appliquer des transformations géométriques dans Pygame104
6.1 Le module pygame.transform104
6.2 Exemple d'utilisation des transformations Pygame104
7. Conclusion107
Chapitre 6
L'ajout de sons dans un jeu Pygame
1. Introduction109
2. La gestion du son avec Pygame109
2.1 Les modules pygame.mixer et pygame.mixer.music110
2.1.1 Le module pygame.mixer.music (fond sonore)110
2.1.2 Le module pygame.mixer (effets sonores)110
2.2 Les fichiers son111
2.3 La notion de channel (canal) dans Pygame111
3. Exemple d'utilisation du son avec Pygame112
4. Conclusion114
Chapitre 7
Les sprites avec Pygame
1. La notion de sprite dans Pygame115
2. La notion de group dans Pygame116
3. Une gestion des collisions simplifiée116
4. Quelques explications sur la programmation orientée objet117
4.1 Le paradigme objet, les grandes lignes117
4.2 L'héritage118
4.3 Des mots-clés fondamentaux en Python119
4.3.1 Le mot-clé self119
4.3.2 Le mot-clé class119
4.3.3 Le mot-clé def120
4.3.4 _init_120
4.4 L'exemple de la classe Voiture en Python120
4.5 Ce que l'on savait déjà... sans le savoir122
5. Le module sprite et son utilisation122
5.1 Le contenu du module sprite122
5.2 Création d'un sprite123
5.2.1 Premier exemple d'utilisation123
5.2.2 Retour sur le premier exemple127
5.3 Gros plan sur l'attribut rect de la classe Sprite127
5.4 La liste de sprites (group)128
5.5 Gestion des collisions grâce aux sprites129
6. Conclusion du chapitre130
Chapitre 8
Plus loin avec le module sprite, exemples appliqués
1. Introduction131
2. Le jeu du serpent (snake)132
2.1 Le contexte132
2.2 Les images utilisées132
2.3 Les effets sonores utilisés133
2.4 Le programme global133
2.5 Les listes de sprites (group)137
2.6 Les variables globales137
2.7 Les classes138
2.7.1 La classe SERPENT138
2.7.2 La classe CORPS141
2.7.3 La classe NOURRITURE142
2.8 Le programme lui-même143
2.8.1 La fonction AFFICHER_SCORE143
2.8.2 Le corps du programme143
3. Le jeu du labyrinthe145
3.1 Le contexte145
3.2 Conception du labyrinthe145
3.3 Les images utilisées146
3.4 Le programme global147
3.5 Les listes de sprites (group)151
3.6 Les classes151
3.6.1 La classe MUR151
3.6.2 La classe OBJET151
3.6.3 La classe Chrono152
3.6.4 La classe PERSONNAGE152
3.7 Le programme lui-même153
4. Le jeu de casse-briques154
4.1 Le contexte154
4.2 Les images utilisées155
4.3 Le programme global155
4.4 Les listes de sprites (group)158
4.5 Les constantes159
4.6 Les classes159
4.6.1 La classe OBJET160
4.6.2 La classe RAQUETTE161
4.6.3 La classe BRIQUE162
4.6.4 La classe BALLE162
4.7 Le programme lui-même163
5. Le jeu de défilement : Fusée et planètes (version 2)166
5.1 Le contexte166
5.2 Le programme global167
5.3 Les listes de sprites (group)169
5.4 Les classes169
5.4.1 La classe FUSEE169
5.4.2 La classe PLANETE170
5.5 Le programme lui-même171
Chapitre 9
Travailler en 3D avec Pygame
1. Introduction173
2. La bibliothèque 30 OpenGL174
3. OpenGL en Python/Pygame174
3.1 PyOpenGL174
3.2 Les notions fondamentales ; sommet et arête174
3.3 PyOpenGL et Pygame175
4. PyOpenGL/Pygame : l'exemple du cube175
4.1 Le code global175
4.2 Explication détaillée du code177
5. Plus loin avec PyOpenGL/Pygame : l'exemple du cube (suite)180
5.1 Le code global181
5.2 Explication détaillée du code183
6. OpenGL en Python et macOS184
7. La notion de moteur de jeu vidéo185
7.1 Définition185
7.2 Créer son propre moteur de jeu ?186
7.3 Une ébauche de moteur de jeu186
Chapitre10
Les principaux modules Pygame
1. Introduction189
2. L'objet Color190
2.1 La classe Color190
2.2 Les constructeurs de Color191
2.3 Les principales fonctions de la classe Color191
2.4 Les fonctions associées aux autres représentations de la couleur192
2.4.1 La représentation CMY192
2.4.2 La représentation HSV et HSL192
2.4.3 La représentation |1|2|3192
2.5 Les autres fonctions192
2.5.1 La fonction normalize192
2.5.2 La fonction correct_gamma193
2.5.3 La fonction set_length193
3. Le module time193
3.1 La fonction get_ticks193
3.2 La fonction wait194
3.3 La fonction delay194
3.4 La fonction set_timer194
3.5 L'objet Clock195
3.5.1 Création d'une instance195
3.5.2 La fonction tick195
3.5.3 La fonction get_time196
3.5.4 La fonction get_fps196
4. Le module event197
4.1 La fonction pump197
4.2 La fonction get198
4.3 La fonction poll198
4.4 La fonction wait198
4.5 La fonction peek199
4.6 La fonction clear199
4.7 La fonction event_name199
4.8 La fonction set_blocked200
4.9 La fonction set_allowed200
5. Le module display200
5.1 La fonction init200
5.2 La fonction quit201
5.3 La fonction get_init201
5.4 La fonction set_mode201
5.5 La fonction flip202
5.6 La fonction update202
5.7 La fonction set_icon202
5.8 La fonction set_caption202
6. L'objet Surface203
6.1 Le constructeur de Surface203
6.2 La fonction blit203
6.3 La fonction blits204
6.4 Les fonctions convert et convert_alpha205
6.5 La fonction copy205
6.6 La fonction fill206
6.7 La fonction scroll206
6.8 La fonction set_colorkey207
6.9 La fonction get_colorkey207
7. Le module draw208
7.1 La fonction rect208
7.2 La fonction polygon208
7.3 La fonction circle208
7.4 La fonction ellipse209
7.5 La fonction arc209
7.6 La fonction line210
7.7 La fonction lines210
7.8 Les fonctions aaline et aalines210
8. Le module image211
8.1 La fonction load211
8.2 La fonction save211
8.3 Les fonctions tostring, fromstring, frombuffer212
9. Le module font212
9.1 La fonction init212
9.2 La fonction quit212
9.3 La fonction get_init212
9.4 La fonction get_default_font213
9.5 La fonction get_fonts213
9.6 La fonction match_font213
9.7 La fonction SysFont214
9.8 L'objet Font214
9.8.1 La fonction Font214
9.8.2 La fonction render214
9.8.3 La fonction size215
9.8.4 La fonction set_underline215
9.8.5 La fonction get_underline215
9.8.6 La fonction set_bold215
9.8.7 La fonction get_bold215
9.8.8 La fonction set_italic216
9.8.9 La fonction get_italic216
9.8.10 La fonction metrics216
10. Le module mouse216
10.1 La fonction get_pressed216
10.2 La fonction get_pos217
10.3 La fonction get_rel217
10.4 La fonction set_pos218
10.5 La fonction set_visible218
10.6 La fonction get_visible218
10.7 La fonction get_focused218
10.8 La fonction set_cursor218
10.9 La fonction get_cursor218
11. Le module key219
11.1 Les constantes correspondant aux touches du clavier219
11.2 La fonction get_focused221
11.3 La fonction pressed221
11.4 La fonction set_repeat221
11.5 La fonction get_repeat222
11.6 La fonction name222
12. Le module transform222
12.1 La fonction flip222
12.2 La fonction scale222
12.3 La fonction rotate223
12.4 La fonction rotozoom223
12.5 La fonction scale2x223
12.6 La fonction chop223
12.7 La fonction laplacian224
12.8 La fonction average_surfaces225
12.9 La fonction average_color225
13. Le module mixer225
13.1 La fonction init225
13.2 La fonction quit226
13.3 La fonction get_init226
13.4 L'objet Sound226
13.4.1 Les constructeurs de Sound226
13.4.2 La fonction play226
13.4.3 La fonction stop227
13.4.4 La fonction fadeout227
13.4.5 La fonction set_volume227
13.4.6 La fonction get_volume227
13.4.7 La fonction get_num_channels227
13.4.8 La fonction get_length228
13.4.9 La fonction get_raw228
13.5 L'objet Channel229
13.5.1 Le constructeur de Channel229
13.5.2 La fonction queue229
13.5.3 La fonction set_volume229
13.5.4 La fonction get_volume229
13.5.5 Les fonctions play, stop, pause, etc230
13.6 Les fonctions get_num_channels, set_num_channels, find_channel230
14. Le module music231
14.1 La fonction load231
14.2 La fonction unload231
14.3 La fonction play231
14.4 La fonction rewind231
14.5 La fonction stop232
14.6 La fonction pause232
14.7 La fonction unpause232
14.8 La fonction fadeout232
14.9 La fonction set_volume232
14.10 La fonction get_volume232
14.11 La fonction set_pos232
14.12 La fonction get_pos233
14.13 La fonction queue233
15. Le module sprite233
15.1 La classe Sprite233
15.1.1 La fonction update233
15.1.2 La fonction add233
15.1.3 La fonction remove233
15.1.4 La fonction kill234
15.1.5 La fonction alive234
15.1.6 La fonction groups234
15.2 La classe Group234
15.2.1 La fonction sprites234
15.2.2 La fonction copy234
15.2.3 La fonction add234
15.2.4 La fonction remove235
15.2.5 La fonction has235
15.2.6 La fonction update235
15.2.7 La fonction draw235
15.2.8 La fonction clear235
15.2.9 La fonction empty235
15.3 Les principales fonctions du module236
15.3.1 La fonction spritecollide236
15.3.2 La fonction collide_rect236
15.3.3 La fonction collide_circle236
15.3.4 La fonction collide_mask236
15.3.5 La fonction groupcollide236
15.3.6 La fonction spritecollideany237
Chapitre11
Les modules secondaires Pygame
1. Introduction239
2. Le module cursors240
2.1 Les curseurs prédéfinis du module240
2.2 La fonction compile241
2.3 La fonction load_xbm241
3. Le module joystick242
3.1 La fonction init242
3.2 La fonction quit242
3.3 La fonction get_init242
3.4 La fonction get_count242
3.5 La classe Joystick243
3.5.1 La fonction Joystick243
3.5.2 La fonction init243
3.5.3 La fonction quit243
3.5.4 La fonction get_init243
3.5.5 La fonction get_id243
3.5.6 La fonction get_name244
3.5.7 La fonction get_numaxes244
3.5.8 La fonction get_axis244
3.5.9 La fonction get_numballs244
3.5.10 La fonction get_ball244
3.5.11 La fonction get_numbuttons245
3.5.12 La fonction get_button245
3.5.13 La fonction get_numhats245
3.5.14 La fonction get_hat245
4. Le module touch246
4.1 La fonction get_num_devices246
4.2 La fonction get_device246
4.3 La fonction get_num_fingers246
4.4 La fonction get_finger246
5. Le module math247
5.1 La classe Vector2 - Création de vecteur247
5.2 La classe Vector3 - Création de vecteur247
5.3 Les principales fonctions de Vector2 et Vector3248
5.3.1 La fonction dot248
5.3.2 La fonction length248
5.3.3 La fonction normalize248
5.3.4 La fonction reflect248
5.3.5 La fonction distance_to248
5.3.6 La fonction rotate249
5.3.7 La fonction rotate_rad249
6. Le module sur farray249
6.1 La fonction array2d249
6.2 La fonction pixels_red249
6.3 La fonction pixels_green249
6.4 La fonction pixels_blue250
6.5 La fonction make_surface250
6.6 La fonction blit_array250
7. Le module camera250
7.1 La fonction list_cameras251
7.2 L'objet Camera251
7.2.1 Instanciation de Camera251
7.2.2 La fonction start252
7.2.3 La fonction stop252
7.2.4 La fonction get_image252
7.2.5 La fonction get_raw252
7.2.6 La fonction query_image252
7.2.7 La fonction get_size252
7.2.8 La fonction get_controls253
7.2.9 La fonction set_controls253
Index255