Aller au contenu

C1 - Configurer pygame

1 - Installer Pygame

Pygame ne fait pas partie de la librairie standard de Python. Il faut l'installer avec pip. Dans un terminal, tapez donc la commande pip install pygame.

2 - Premières lignes de code

Importer et initialiser le module

Pour pouvoir utiliser une librairie, il faut évidemment l'importer. Cependant, une spécifité de pygame est qu'il faut également l'initialiser avec la fonction init afin de pouvoir utiliser l'intégralité de ses fonctionnalités :

import pygame

pygame.init()

Créer l'écran et spécifier ses dimensions

Sans écran, pas de jeu ! Après avoir initialisée pygame, on crée généralement une variable nommée ecran ou screen qui représente l'écran du jeu. Afin d'obtenir un écran, on emploie la fonction set_mode du module display :

import pygame

pygame.init()
screen = pygame.display.set_mode((largeur, hauteur))

En créant l'écran, il est indispensable de définir ses dimensions (en pixels) en remplaçant largeur et hauteur par des valeurs numériques.

Warning

Attention aux doubles parenthèses dans la fonction set_mode ! Un oubli de parenthèses provoquera une erreur.

Dans les futurs chapitres, nous placerons généralement nos images relativement à l'écran. Ce pourquoi il est hautement recommandé de stocker largeur et hauteur dans des variables à part entière.

Créer un objet Clock

Un autre objet important est la clock (l'horloge en anglais). Un objet clock permet de contrôler la vitesse à laquelle tourne le jeu. Pour la créer, on utilise la classe Clock du module time (de la librairie pygame) :

import pygame

pygame.init()
screen = pygame.display.set_mode((largeur, hauteur))
clock = pygame.time.Clock()

3 - La boucle principale

Créer la boucle principale

Vous avez réussi à créer un écran mais celui-çi se ferme immédiatement au lancement du programme. Cela s'explique par le fait que le jeu vidéo est tout d'abord un programme informatique qui tourne en boucle jusqu'à ce que l'utilisateur décide de l'interrompre. Or, notre programme ne tourne pas encore en boucle. Cela peut être réglé grâce à l'utilisation d'une boucle while :

import pygame

pygame.init()
screen = pygame.display.set_mode((largeur, hauteur))
clock = pygame.time.Clock()
is_running = True

while is_running:
    pygame.display.update()

La ligne pygame.display.update() permet de mettre à jour le contenu de l'écran à chaque itération. Veillez à ne pas oublier de l'ajouter à la fin de la boucle.

Permettre au joueur de quitter le jeu et boucle évènementielle

L'écran ne disparait plus, cependant il n'est plus du tout possible de le fermer ! Ce qui va provoquer le crash de notre jeu. Pour remédier à cela, il faut explicitement programmer une condition de fermeture au jeu. La condition la plus commune est simplement d'appuyer sur la croix rouge. Pour pygame, cela correspond à l'évènement pygame.QUIT. Il faut alors programmer la boucle évènementielle du jeu. Un évènement peut simplement être une interaction de l'utilisateur comme l'appui sur une touche du clavier ou le déplacement du curseur. Et la boucle évènementielle est essentielle pour pygame car elle permet de détecter ces mêmes évènements à partir d'un parcours de tableau obtenu à partir de la fonction get du module event:

import sys
import pygame

pygame.init()
screen = pygame.display.set_mode((largeur, hauteur))
clock = pygame.time.Clock()
is_running = True

while is_running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    pygame.display.update()

Tip

En général, on souhaitera écrire la boucle évènementielle avant toute autre instruction à l'intérieur de la boucle principale.

L'instruction quit() permet, à l'opposé de init(), de fermer pygame. Pour que le programme s'interrompe proprement, il est toutefois hautement recommandé d'appeler exit (du module sys) à la suite de pygame.quit().

Nous étudierons plus approfondimment la gestion des évènements dans les chapitres suivants.

4 - Gérer la vitesse à laquelle tourne le jeu

Bien que nous ayons obtenu notre écran et que tout ait l'air de fonctionner, la configuration de départ n'est pas encore exactement finie. En effet, il nous reste encore à utiliser notre objet clock afin de configurer la vitesse à laquelle tourne le jeu. Cela est rendu possible grâce à la méthode tick :

import sys
import pygame

pygame.init()
screen = pygame.display.set_mode((largeur, hauteur))
clock = pygame.time.Clock()
is_running = True

while is_running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    pygame.display.update()
    clock.tick(60)

Info

Une vitesse de 60 sera très souvent suffisante pour les jeux que nous créérons. Ce pourquoi nous choisissons 60 comme argument de la méthode tick. Par convention, nous écrirons tick à la fin de la boucle principale, après display.update().

Conclusion

Et voilà ! Nous venons d'écrire le code qui composera 99% de nos projets pygame. Veuillez donc bien retenir ce morceau de code !

pygame_logo