Les principaux modules Pygame
Introduction
L’idée ici est de fournir une documentation relativement précise des principaux modules et objets de Pygame utilisés dans le livre. En effet, si la documentation officielle en ligne est d’excellente facture, aucune documentation en français n’est à ce jour disponible. Le but n’est pas de couvrir de façon exhaustive chaque module, mais au moins d’avoir une documentation très complète des fonctions fréquemment utilisées dans le développement Pygame. Seules les fonctions peu utilisées sont ignorées.
La documentation officielle en ligne de Pygame est disponible à cette adresse web : https://www.pygame.org/docs/
Les modules ou objets détaillés ici le sont dans l’ordre de leur première utilisation dans le livre :
1. Color
2. time
3. event
4. display
5. Surface
6. draw
7. image
8. font
9. mouse
10. key
11. transform
12. mixer
13. music
14. sprite
Une précision quant à une notation qui sera régulièrement utilisée : la ligne suivante signifie que l’appel de la fonction Exemple1 qui prend en paramètre a et b renvoie un int.
Exemple1( a, b) -> int
Autre exemple, la fonction Exemple2 qui prend en paramètre i, j et k renvoie un objet de type Color.
Exemple2( i, j, k) -> Color
L’objet Color
1. La classe Color
La classe Color permet d’instancier des objets représentant les couleurs.
Les couleurs sont définies par un quadruplet (r, g, b, a) :
-
r représente la composante rouge, valeur comprise entre 0 et 255.
-
g représente la composante verte, valeur comprise entre 0 et 255.
-
b représente la composante bleue, valeur comprise entre 0 et 255.
-
a représente la composante alpha qui définit l’opacité associée, valeur comprise entre 0 et 255. 255 représente l’opacité totale et constitue la valeur par défaut. Baisser cette valeur revient à baisser un peu l’opacité et à rendre l’élément coloré (un pixel, une forme géométrique) un peu plus transparent.
2. Les constructeurs de Color
Trois fonctions de type constructeur permettent de créer un objet Color :
Color(r, g, b) -> Color
Color(r, g, b, a=255) -> Color
Color(color_value) -> Color
On peut ainsi créer un objet Color en passant en paramètre r, g et b. On peut aussi préciser a (alpha) dont la valeur par défaut est 255.
3. Les principales fonctions de la classe Color
Fonction de type accesseur qui permet d’obtenir ou de modifier la grandeur r :
pygame.Color.r
Fonction de type accesseur qui permet d’obtenir ou de modifier la grandeur g :
pygame.Color.g
Fonction de type accesseur qui permet d’obtenir ou de modifier la grandeur b :
pygame.Color.b
Fonction de type accesseur qui permet d’obtenir ou de modifier la grandeur a (alpha). Par défaut, la valeur alpha est égale à 255, ce qui correspond à une opacité maximale :
pygame.Color.a
Exemple d’utilisation
import pygame
couleur = pygame.Color(255, 255, 255)
couleur.r = 0
print(couleur.r)
On obtient ceci dans le terminal :...
Le module time
1. La fonction get_ticks
get_ticks() -> milliseconds
Cette fonction permet d’obtenir le nombre de millisecondes qu’il y a entre l’initialisation de Pygame (appel de pygame.init()) et l’appel de cette fonction get_ticks.
Par exemple, quand on exécute ce programme :
import pygame
pygame.init()
screen=pygame.display.set_mode((200,400))
print(pygame.time.get_ticks())
on obtient (sur la machine utilisée) la valeur suivante dans le terminal :
1727
Cela signifie qu’entre l’appel de init et l’appel de get_ticks, il y a eu une durée de 1 à 2 secondes.
2. La fonction wait
wait(milliseconds) -> time
La fonction wait permet de faire une pause dans l’exécution pendant une durée exprimée en millisecondes.
3. La fonction delay
delay(milliseconds) -> time
La fonction delay, tout comme wait, permet de faire une pause dans l’exécution pendant une durée exprimée en millisecondes. Elle utilise le processeur de l’ordinateur et est donc supposée être plus précise que wait.
4. La fonction set_timer
set_timer(eventid, milliseconds) -> None
Cette fonction set_timer permet de créer un évènement qui est placé dans la file d’attente des évènements. Il se déclenche de manière cyclique toutes les x millisecondes, x étant la valeur passée en paramètre.
Par exemple, dans le code suivant, on déclenche un évènement chaque seconde.
import pygame
pygame.init()
screen=pygame.display.set_mode((200,400))
pygame.time.set_timer(pygame.USEREVENT, 1000)
while True:
event = pygame.event.wait()
print(event)
if event.type == pygame.QUIT:
break
pygame.quit()
Dans le terminal, on obtient donc ceci...
Le module event
Le module event permet de gérer les évènements. Dès qu’un évènement est généré, depuis un clavier, une souris ou tout autre périphérique de jeu, il est placé dans une file d’attente, que le module event permet de gérer et d’utiliser. Le rôle des fonctions de ce module est d’interagir avec la file d’attente des évènements.
Un évènement se définit d’abord par son type EventType. Les principales valeurs de ce paramètre sont les suivantes :
QUIT 0
ACTIVEEVENT 1
KEYDOWN 2
KEYUP 3
MOUSEMOTION 4
MOUSEBUTTONUP 5
MOUSEBUTTONDOWN 6
JOYAXISMOTION 7
JOYBALLMOTION 8
JOYHATMOTION 9
JOYBUTTONUP 10
JOYBUTTONDOWN 11
VIDEORESIZE 12
VIDEOEXPOSE 13
USEREVENT 14
1. La fonction pump
pump() -> None
Le besoin d’utilisation de cette fonction est plutôt rare. Il correspond à la situation suivante : une non-utilisation des évènements dans la boucle de jeu. Auquel cas, il faut tout de même maintenir une interaction. L’appel à chaque itération de la fonction pygame.event.pump permet cela.
2. La fonction get
get(eventtype=None) -> Eventlist
Cette fonction, abondamment utilisée dès que l’on programme avec Pygame, permet de récupérer les évènements de la file d’attente. En fait, il est extrêmement rare de rencontrer un programme Pygame qui ne l’utilise pas. L’idée...
Le module display
Ce module est systématiquement utilisé dans un code Pygame, car il gère tous les aspects relatifs à la fenêtre de jeu. Quelques fonctions de display sont appelables directement sur le module pygame.
Ainsi :
pygame.init()
est équivalent à :
pygame.display.init()
1. La fonction init
init() -> None
C’est la fonction qui permet d’initialiser Pygame. On ne peut pas faire sans et on l’utilise systématiquement dans chacun des codes Pygame. À noter que les deux écritures suivantes sont équivalentes et qu’en général on privilégie la seconde écriture.
pygame.display.init()
pygame.init()
2. La fonction quit
quit() -> None
C’est la fonction qui permet d’arrêter l’utilisation du module display et plus généralement celle de Pygame. À noter que les deux écritures suivantes sont équivalentes et qu’en général on privilégie la seconde écriture.
pygame.display.quit()
pygame.quit()
3. La fonction get_init
get_init() -> bool
La fonction get_init permet de savoir si l’initialisation de Pygame a bien eu lieu.
Exemple
import pygame
print(pygame.display.get_init())
pygame.display.init()
print(pygame.display.get_init())
On obtient ceci dans le terminal :
0
1
4. La fonction set_mode
set_mode(size=(0, 0), flags=0, depth=0, display=0) -> Surface
C’est la fonction en charge de la création de la surface associée à la fenêtre de jeu. En clair, c’est cette fonction qui crée la fenêtre.
Voici quelques options qui peuvent s’avérer utiles :
pygame.FULLSCREEN La fenêtre de jeu est en plein écran.
pygame.RESIZABLE La fenêtre de jeu est redimensionnable.
pygame.NOFRAME La fenêtre...
L’objet Surface
La surface en développement Pygame est un objet qui permet de représenter des images. Images au sens large : des zones géométriques colorées, des zones accueillant des fichiers images, des zones de texte, ou la fenêtre de jeu elle-même, qui est elle aussi une surface.
1. Le constructeur de Surface
Surface((width, height), flags=0, depth=0, masks=None) -> Surface
Outre la largeur et la hauteur de la surface à créer, tous les autres paramètres ont des valeurs par défaut. En effet, flags, depth et masks correspondent à des usages très spécifiques et rares.
L’exemple suivant permet de créer une surface « de base » non spécialement dédiée à un fichier image, à du texte ou à un objet géométrique. On spécifie juste que la largeur est égale à 50 et la hauteur à 25.
import pygame
pygame.init()
surface = pygame.Surface((50, 25))
print(surface)
Dans le terminal, on obtient ceci : on retrouve les dimensions 50 et 25 ainsi que les valeurs par défaut des autres paramètres.
<Surface(50x25x32 SW)>
2. La fonction blit
Cette fonction est fondamentale, car elle permet de positionner une surface à l’intérieur d’une autre surface. Pour rappel, la fenêtre de jeu est une surface. Cette fonction blit permet donc de positionner une surface dans la fenêtre de jeu.
blit(source, dest, area=None, special_flags=0) -> Rect
On affiche ici une surface de couleur bleue à un endroit donné de la fenêtre de jeu.
import pygame
pygame.init()
pygame.display.set_caption(u'Blit')
fenetre = pygame.display.set_mode((400, 400))
surface = pygame.Surface((50, 25))
bleu = (0, 0, 255)
surface.fill(bleu) ...
Le module draw
Le module draw est le module Pygame qui permet d’afficher des formes géométriques. Son utilisation est relativement intuitive, les fonctions prenant en général le nom (en anglais) des formes que l’on désire afficher.
1. La fonction rect
rect(surface, color, rect, width=0)
Pour afficher un rectangle, on passe en paramètre :
-
la surface d’affichage,
-
la couleur du contour,
-
le couple de coordonnées du point supérieur gauche et du point inférieur droit du rectangle,
-
l’épaisseur éventuelle du contour.
Exemple d’utilisation
fenetre = pygame.display.set_mode((400, 400))
rouge = pygame.Color(255,0,0)
pygame.draw.rect(fenetre, rouge, ((50, 50), (150, 100)), 1)
2. La fonction polygon
polygon(surface, color, points, width=0) -> Rect
Selon le même principe que précédemment, la fonction polygon permet de tracer un polygone. On commence par créer la liste des points qui forment le polygone.
Points = [(200, 200), (250, 300), (300, 325), (400, 350)]
Puis on l’affiche avec une épaisseur de trait de 1 et une couleur de trait jaune.
jaune = pygame.Color(255,255,0)
pygame.draw.polygon(fenetre, jaune, points, 1)
3. La fonction circle
circle(surface, color, center, radius, width=0) -> Rect
La fonction circle permet d’afficher un cercle sur une surface donnée. On définit en paramètre sa couleur, les coordonnées de son centre, son rayon et l’éventuelle épaisseur du trait.
Dans l’exemple ci-après, on affiche un cercle de centre (200, 200) de rayon 100 et dont le tracé est de couleur blanche et d’épaisseur 1.
blanc = (255, 255, 255)
pygame.draw.circle(fenetre, blanc, (200, 200), 100, 1)
4. La fonction ellipse
ellipse(surface, color, rect, width=0) -> Rect
La fonction ellipse permet d’afficher une ellipse...
Le module image
Le module image sert à afficher des fichiers de type image dans un jeu Pygame.
1. La fonction load
load(filename) -> Surface
La fonction load permet de charger un fichier image depuis le disque et de l’afficher en tant que surface dans la fenêtre de jeu.
Exemple
surfaceImage = pygame.image.load("MonImage.jpg")
Les extensions suivantes sont prises en charge par la fonction load :
-
JPG
-
PNG
-
GIF (non animé)
-
BMP
-
PCX
-
TGA (décompressé)
-
TIF
-
LBM (et PBM)
-
PBM (et PGM, PPM)
-
XPM
2. La fonction save
save(Surface, filename) -> None
La fonction save est la réciproque de la fonction load. Elle permet de sauvegarder une surface Pygame en un fichier image sur le disque.
Exemple d’utilisation depuis une surface nommée IMAGE
pygame.image.save(IMAGE, "IMAGE_FICHIER.png")
Les extensions suivantes sont prises en charge par la fonction save :
-
BMP
-
TGA
-
PNG
-
JPEG
3. Les fonctions tostring, fromstring, frombuffer
tostring(Surface, format, flipped=False) -> string
fromstring(string, size, format, flipped=False) -> Surface
frombuffer(string, size, format) -> Surface
La fonction tostring permet de créer un buffer de chaîne de caractères représentant l’image. La fonction fromstring permet de créer une surface de type image depuis un buffer de chaîne de caractères. La fonction frombuffer permet de créer une surface de type image depuis un buffer.
Le module font
Le module font assure la gestion du texte dans Pygame.
1. La fonction init
init() -> None
Cette fonction qui initialise le module font n’est pas supposée être appelée. En effet, l’appel obligatoire pygame.init() se charge de l’appeler. La fonction est donc appelée automatiquement.
2. La fonction quit
quit() -> None
Cette fonction qui permet de quitter le module font n’est pas supposée être appelée. En effet, l’appel pygame.quit() se charge de l’appeler. La fonction est donc appelée automatiquement.
3. La fonction get_init
get_init() -> bool
Cette fonction qui renvoie un booléen permet de vérifier si le module font est initialisé ou non.
4. La fonction get_default_font
get_default_font() -> string
Cette fonction get_default_font permet de savoir quelle est la police de caractères par défaut.
Exemple
import pygame
pygame.init()
print(pygame.font.get_default_font())
On obtient ceci dans le terminal :
freesansbold.ttf
5. La fonction get_fonts
pygame.font.get_fonts()
Cette fonction permet d’obtenir la liste de toutes les polices de caractères disponibles sur la machine sur laquelle est exécuté le programme.
Exemple
import pygame
pygame.init()
print(pygame.font.get_fonts())
On obtient alors quelque chose de comparable à ceci dans le terminal :
['bigcaslonttf', 'silomttf', 'sfnsdisplayblackitalicotf',
'sfnsdisplaything4otf', 'sfnsdisplaycondensedthinotf', 'chalkdusterttf',
'stixsizthreesymregotf', 'timesnewromanttf', 'applebraillepinpoint8dotttf',
'arialitalicttf', 'stixintupregotf', 'sfnssymbolsblackotf',
'sfcompacttextregularotf', 'pingfangttc', 'munattc', 'waseemttc',
'aquakanattc'...
Le module mouse
Le module mouse permet de gérer les diverses interactions relatives à la souris et ainsi de travailler avec ce périphérique dans Pygame.
1. La fonction get_pressed
get_pressed() -> (button1, button2, button3)
Cette fonction permet de renvoyer un tableau de booléens indiquant l’état de chacun des boutons de la souris. Si la valeur est True, c’est que le bouton de la souris correspondant est enfoncé.
On utilise assez peu cette fonction ; on privilégie plutôt une analyse des évènements issus de la file d’attente des évènements, comme explicité dans le chapitre Le dessin et le graphisme dans tous leurs états avec Pygame.
L’exemple suivant utilise get_pressed.
import pygame
pygame.display.init()
print(pygame.mouse.get_pressed())
Le résultat dans le terminal est le suivant :
(0, 0, 0)
2. La fonction get_pos
get_pos() -> (x, y)
La fonction get_pos permet d’obtenir les coordonnées courantes du curseur de la souris.
Exemple
import pygame
pygame.display.init()
fenetre = pygame.display.set_mode((400, 400))
while True:
print(pygame.mouse.get_pos())
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
Ci-après une des lignes affichées dans le terminal :
(224, 351)
3. La fonction get_rel
get_rel() -> (x, y)
Cette fonction permet d’obtenir le déplacement relatif depuis la dernière position connue.
Ainsi, si on déplace la souris de 5 pixels horizontalement vers la droite et de 3 pixels verticalement vers le haut, alors l’exemple suivant produit la sortie ci-après dans le terminal.
print(pygame.mouse.get_rel())
(5, -3)
Ainsi, get_pos indique les coordonnées absolues du curseur et get_rel indique les coordonnées...
Le module key
Le module key permet de gérer les interactions avec le clavier de l’ordinateur.
1. Les constantes correspondant aux touches du clavier
Chaque touche a son code Pygame qui permet son test dans la file d’attente des évènements notamment.
Voici la liste quasi exhaustive de ces constantes Pygame :
K_BACKSPACE \b backspace
K_TAB \t tab
K_CLEAR clear
K_RETURN \r return
K_PAUSE pause
K_ESCAPE ^[ escape
K_SPACE space
K_EXCLAIM ! exclaim
K_QUOTEDBL " quotedbl
K_HASH # hash
K_DOLLAR $ dollar
K_AMPERSAND & ampersand
K_QUOTE quote
K_LEFTPAREN ( left parenthesis
K_RIGHTPAREN ) right parenthesis
K_ASTERISK * asterisk
K_PLUS + plus sign
K_COMMA , comma
K_MINUS - minus sign
K_PERIOD . period
K_SLASH / forward slash
K_0 0 0
K_1 1 1
K_2 2 2
K_3 3 ...
Le module transform
Le module transform permet de créer de nouvelles surfaces Pygame en appliquant à une surface source une ou plusieurs transformations, isométriques ou non.
1. La fonction flip
flip(Surface, xbool, ybool) -> Surface
La fonction flip permet de faire une symétrie axiale, verticale ou horizontale ou les deux. Elle prend en paramètre la surface que l’on va transformer, un booléen indiquant que l’on procède à une symétrie selon l’axe vertical, un booléen indiquant que l’on procède à une symétrie selon l’axe horizontal. Si les deux booléens sont à True, alors on procède aux deux symétries.
2. La fonction scale
scale(Surface, (width, height), DestSurface = None) -> Surface
La fonction scale permet de redimensionner une surface. On passe en paramètre la hauteur et la largeur de la surface cible.
3. La fonction rotate
rotate(Surface, angle) -> Surface
La fonction rotate permet de faire faire une rotation à la surface. L’angle passé en paramètre est exprimé selon le sens antihoraire, en degrés, et non en radians comme c’est parfois le cas pour d’autres fonctions Pygame (le tracé d’arcs d’ellipse notamment).
4. La fonction rotozoom
rotozoom(Surface, angle, scale) -> Surface
scale2x(Surface, DestSurface = None) -> Surface
La fonction rotozoom permet de combiner rotation et homothétie. Ceci peut être particulièrement utile pour simuler le lancer d’un objet, du point de vue de l’observateur. La fonction prend en paramètre, outre la surface source, l’angle en degrés orienté dans le sens antihoraire et le facteur homothétique.
Ainsi, la ligne suivante transforme la surface surface0 en combinant une rotation d’angle -30 degrés, donc...
Le module mixer
Le module mixer permet de gérer le son dans un jeu Pygame, que ce soit l’aspect fond sonore ou les effets sonores.
1. La fonction init
init(frequency=22050, size=-16, channels=2, buffer=4096, devicename=None,
allowedchanges=AUDIO_ALLOW_FREQUENCY_CHANGE | AUDIO_ALLOW_CHANNELS_CHANGE) -> None
La fonction init permet d’initialiser le module mixer. Elle est nécessaire pour pouvoir utiliser le module.
pygame.mixer.init()
2. La fonction quit
quit() -> None
Cette fonction fait cesser l’utilisation du module mixer. Si des sons sont en lecture au moment de l’appel de la fonction, ils sont interrompus.
pygame.mixer.quit()
3. La fonction get_init
get_init() -> (frequency, format, channels)
La fonction get_init permet de savoir si le module est bien initialisé. Si c’est le cas, la fonction renvoie un certain nombre d’informations. Sinon, elle renvoie None.
import pygame
pygame.init()
pygame.mixer.init()
print(pygame.mixer.get_init())
On obtient alors ceci dans le terminal :
(22050, -16, 2)
4. L’objet Sound
L’objet Sound permet de créer un objet son.
a. Les constructeurs de Sound
Sound(filename) -> Sound
Sound(file=filename) -> Sound
Sound(buffer) -> Sound
Sound(buffer=buffer) -> Sound
Sound(object) -> Sound
Sound(file=object) -> Sound
Sound(array=object) -> Sound
Les constructeurs disponibles permettent de créer un objet Sound depuis un fichier son ou depuis un buffer.
b. La fonction play
play(loops=0, maxtime=0, fade_ms=0) -> Channel
On peut préciser si on veut que le son tourne en boucle, combien de fois si oui, et même indiquer un effet « fade-in » et sa durée.
Exemple d’utilisation simple
import pygame
pygame.init()
pygame.mixer.init()
son = pygame.mixer.Sound("son.ogg")
son.play()
La valeur retournée...
Le module music
Ce module mixer.music sert à « streamer » le fond sonore et plus généralement à gérer le fond musical. Ainsi, la classe Sound du module mixer sert plutôt aux effets sonores, alors que le module music est plutôt dévolu au fond sonore.
1. La fonction load
load(filename) -> None
La fonction load permet de charger un fichier son pour le diffuser en fond sonore.
2. La fonction unload
unload() -> None
La fonction unload permet de décharger le fichier son courant qui avait été préalablement chargé.
3. La fonction play
play(loops=0, start=0.0) -> None
La fonction play permet de lire le fichier son préalablement chargé. On peut indiquer combien de fois on veut le lire en boucle. On peut également ne pas commencer au début du fichier, mais au contraire indiquer une position dans le fichier à partir de laquelle démarrer la lecture.
Dans l’exemple suivant, on lit le fichier cinq fois de suite.
import pygame
pygame.init()
pygame.mixer.init()
fond = pygame.mixer.music.load("coq.ogg")
pygame.mixer.music.play(5, 0.0)
while True:
event = pygame.event.wait()
if event.type == pygame.QUIT:
break
pygame.quit()
4. La fonction rewind
rewind() -> None
La fonction rewind permet de faire revenir le fichier son à son début.
5. La fonction stop
stop() -> None
La fonction stop arrête la diffusion du son courant.
6. La fonction pause
pause() -> None
La fonction pause met en pause la diffusion du son courant.
7. La fonction unpause
unpause() -> None
La fonction unpause interrompt la mise en pause de la diffusion du son courant.
8. La fonction fadeout
fadeout(time) -> None
La fonction fadeout fait un arrêt de la diffusion du son, avec un effet « fade-out »...
Le module sprite
Le module sprite permet de gérer l’utilisation des sprites dans un programme Pygame. Cette notion est largement traitée dans les chapitres Les sprites avec Pygame et Plus loin avec le module sprite, exemples appliqués.
Ce module comprend plusieurs classes, notamment la classe Sprite et la classe Group qui consiste en un objet à même de maintenir une collection d’objets sprite.
1. La classe Sprite
a. La fonction update
update(*args) -> None
Une fois l’instance de Sprite créée (en général, c’est une instance d’une classe héritant de la classe Sprite), la fonction update permet de mettre à jour automatiquement les caractéristiques du sprite courant.
b. La fonction add
add(*groups) -> None
La fonction add permet d’ajouter l’instance courante de Sprite à un ou plusieurs groupes.
c. La fonction remove
remove(*groups) -> None
La fonction remove permet de retirer l’instance courante de Sprite d’un ou plusieurs groupes.
d. La fonction kill
kill() -> None
La fonction kill est ni plus ni moins qu’un destructeur. Son appel permet de détruire l’instance courante de Sprite.
e. La fonction alive
alive() -> bool
La fonction alive renvoie True si l’instance courante de Sprite appartient à au moins un groupe.
f. La fonction groups
groups() -> group_list
La fonction groups permet d’obtenir la liste de tous les groupes auxquels appartient l’instance courante de Sprite.
2. La classe Group
La classe Group permet de créer des listes de sprites selon différents critères.
a. La fonction sprites
sprites() -> sprite_list
La fonction sprites permet d’obtenir la liste des sprites qui composent l’instance de Group.
b. La fonction copy
copy() -> Group
La fonction copy permet de créer une copie de l’instance courante...