Découverte de Pygame sous Python3

I – Présentation de Pygame

Pygame est une bibliothèque graphique gratuite et open-sources sous python, elle permet de confectionner des interfaces IHM ou encore des jeux en 2D ou même en 3D. Elle fonctionne sur tous les systèmes (Windows, Mac OS, Linux)

 

II – L’installation de Pygame

Personnellement je vais utiliser Python3 et sous Linux, si vous préférez Windows et/ou Python 2.7 je vous laisse chercher mais c’est quasiment la même manipulation.

Toutes les commandes suivantes devront être saisi dans le terminal Linux (CTRL + ALT + T) :

Tout d’abord il faut vérifier que vous aillez fait toutes les mises à jour pour ça utilisez les deux commandes :

sudo apt-get upgrade

sudo apt-get update

Par la suite il faudra vérifier que Python3 soit bien installé normalement vous devriez l’avoir mais dans le doute, saisissez la commande ci-dessous :

python3

S’il n’est pas installé :

sudo apt-get install python3

Par la suite nous aurons besoin d’installer pip pour utiliser Pygame, donc saisissez dans le terminal :

sudo apt-get install python3-pip

Pour finir nous allons enfin installer Pygame, pour ça il nous faut saisir :

pip3 install pygame

Vous deviez avoir une barre de chargement avec une installation, lorsque ceci est fini, pour vérifier que notre Python accède bien à Pygame il nous faudra lancer Python3 avec :

python3

Python3 va donc se lancer, essayez d’importer Pygame en écrivant la ligne ci-dessous, si vous avez comme sur mon screen en dessous de la ligne de code c’est que tout fonctionne !

import pygame

III – Utilisation de Pygame

 

Initialisation du programme

Nous allons créer un nouveau fichier en .py où nous placerons notre code comme tout programme Python.

Vu que notre fichier vient d’être crée, il est supposé être vide. Nous allons donc lui mettre quelques lignes de code qui seront la base de notre futur programme :

  • #!/usr/bin/python3
  • #Dev : DELPLANG Christopher
  • # --- Importation des bibliotheques necessaires ---
  • import pygame
  • from pygame.locals import *
  • # Initialisation de la bibliotheque Pygame
  • pygame.init()

Détail du code : Dans le code juste au-dessus sur la première ligne nous signalons à Linux que nous utiliserons Python 3, elle est en commentaire, c’est-à-dire que si le code est démarré sur Windows, il ne le prendra pas en compte. La deuxième ligne est facultative, je l’ai simplement mis pour donner le nom du développeur. En ce qui concerne le reste des lignes, elles servent simplement à importer la lib et à l’initialiser.

La première fenêtre

C’est maintenant qu’il va enfin se passer quelque chose de concret et que vous allez pouvoir voir. Nous allons créer notre première fenêtre, pour cela il faudra déclarer une variable qui sera la fenêtre, ici :

  • # Definition de la taille
  • frame = pygame.display.set_mode((1280, 720))
  • # Titre de la fenetre
  • pygame.display.set_caption("Puissance 4")

Nous déclarons notre fenêtre et nous lui donnons des dimensions (Largeur, hauteur), j’ai choisi du 720p. Il est possible de donner un nom à sa fenêtre (Ligne 5).

Si vous tenter de le lancer vous allez vous rendre compte que la fenêtre ne reste pas ouverte. C’est normal nous n’avons fait que créer une fenêtre et après ça le code est fini donc le programme se ferme. Pour qu’il reste ouverte il nous faut donc une boucle while.

Il nous faut ajouter ceci à notre code afin que la fenêtre reste ouverte :

  • # Variable qui continue la boucle si = 1, stop si = 0
  • continuer = 1
  • # Boucle infinie
  • while continuer:

A partir de la nôtre fenêtre est supposé rester ouverte, mais je ne vous conseil pas de démarrer votre programme, tout d’abord parce qu’il va vous retourner une erreur car il n’y a rien après la boucle, et également parce que vous allez avoir quelques difficultés à utiliser la croix rouge si toutefois il démarrait, elle ne fonctionnera pas. Pour qu’elle fonctionne vous aurez besoin de ça dans la boucle while:

  •     # On parcourt la liste de tous les evenements recus
  •     for event in pygame.event.get():
  •         # Si un de ces evenements est de type QUIT
  •         if event .type == QUIT:
  •             # On arrete la boucle
  •             continuer = 0

C’est dans cette boucle for que tous les évènements (Clavier, souris, etc…) seront détecté. A partir de maintenant la fenêtre est fermable par la croix rouge comme presque n’importe quel programme et la boucle for vous servira à récupérer les événements.

Maintenant tous les éléments sont en place pour que notre fenêtre fonctionne ! Elle devrait ressembler à ceci :

      Vous avez donc bien une fenêtre avec le nom que l’on a choisi, qui reste ouverte et qui est fermable avec la croix rouge !

Les images

Je parlais juste avant d’évènements mais avant ça pour qu’ils aient plus d’intérêt parlons des images. Il est possible d’en importer dans votre programme. Pour faire par exemple des sprites. Ou encore un fond, ce que nous allons faire ici, commençons par créer une variable qui contiendra notre image :

  • bg = pygame.image.load("/fond_grille.png").convert()

A noter, si vous avez un souci avec l’emplacement de l’image, utiliser la ligne de code ci-dessous pour récupérer l’emplacement actuel de votre programme et donc utiliser les images qui sont dans le même dossier :

  • path = os.path.dirname(os.path.abspath(__file__))

Le chemin est donc stocké dans la variable path, pour l’utiliser vous n’avez qu’à la placer avant un chemin comme au-dessus,  ("/fond_grille.png") devient (path + "/fond_grille.png").

En ce qui concerne le .convert() il est obligatoire pour que Pygame convertisse l’image dans le format qui lui convient. Si vous avez des images avec un calque alpha (Un fond transparent) utilisez à la place .convert_alpha() qui gardera la transparence dans le programme.

Si vous lancez le programme vous constaterez que rien n’a changé. C’est normal nous n’avons que chargé les images mais nous n’avons en aucun cas dit que nous voulions les placer quelque part. Pour cela il faut simplement utiliser :

  • frame.blit(bg, (0, 0))

On choisit sur quelle fenêtre on veut l’image, ici frame qu’on a préalablement déclaré, on lui applique la fonction blit qui prend 2 paramètres, la variable qui contient l’image qu’on veut afficher, et les positions (x, y).

Sachant que l’on a créé une fenêtre avec les dimensions 1280 x 720, l’idéal serait d’avoir un fond avec les mêmes dimensions.

Nous sommes encore face à un petit souci, cette fois ci l’image est bien déclarée, on a bien choisi son emplacement et son affichage, mais nous n’avons pas actualisé l’écran. A chaque fois que vous voudrez rajouter une image, ou déplacer une image (ou personnage par exemple), il faudra actualiser la fenêtre. Pour ceci vous devez utiliser la ligne de code suivante au moment voulu de l’actualisation de la fenêtre :

  • pygame.display.flip()

Maintenant votre fond devrait s’afficher comme ceci :

Les événements

Les événements sont les interactions avec l’utilisateur, il y a plusieurs types d’événements : Fermeture, clavier, souris, joystick, fenêtre.

Nous nous attarderons tout d’abord sur l’événement clavier et souris, nous avons déjà vu celui de la fermeture au début.

 

Clavier

Pour le clavier, nous allons retourner dans la boucle que nous avions écrite qui permet de récupérer les événements que nous souhaitions :

  • # On parcourt la liste de tous les evenements recus
  • for event in pygame.event.get() :

Et nous allons y ajouter une condition qui nous permettras de savoir lorsqu’une touche est enfoncé, si nous voulons détecté le moment du relâchement de la touche il faudra remplacer KEYDOWN par KEYUP :

  • if event.type == KEYDOWN

Dans cette condition il suffit d’ajouter la touche que vous voulez de cette façon :

  • if event.key == K_ESCAPE:
  •     continuer = 0

Nous avons ici décider que la touche échap ferme le programme, mais on peut tout autant choisir une autre touche et une autre action.

 

Liste des touches du clavier :

Lettres:
K_a ... K_z

Nombres:
K_0 ... K_9

Controles:
K_TAB
K_RETURN
K_ESCAPE
K_SCROLLOCK
K_SYSREQ
K_BREAK
K_DELETE
K_BACKSPACE
K_CAPSLOCK
K_CLEAR
K_NUMLOCK

Ponctuation:
K_SPACE
K_PERIOD
K_COMMA
K_QUESTION
K_AMPERSAND
K_ASTERISK
K_AT
K_CARET
K_BACKQUOTE
K_DOLLAR
K_EQUALS
K_EURO
K_EXCLAIM
K_SLASH, K_BACKSLASH
K_COLON, K_SEMICOLON
K_QUOTE, K_QUOTEDBL
K_MINUS, K_PLUS
K_GREATER, K_LESS

Parenthèses:
K_RIGHTBRACKET, K_LEFTBRACKET
K_RIGHTPAREN, K_LEFTPARENTouches F:
K_F1 ... K_F15

Touches d'édition:
K_HELP
K_HOME
K_END
K_INSERT
K_PRINT
K_PAGEUP, K_PAGEDOWN
K_FIRST, K_LAST

Clavier numérique:
K_KP0 ... K_KP9
K_KP_DIVIDE
K_KP_ENTER
K_KP_EQUALS
K_KP_MINUS
K_KP_MULTIPLY
K_KP_PERIOD
K_KP_PLUS

SHF,CTL,ALT etc:
K_LALT, K_RALT
K_LCTRL, K_RCTRL
K_LSUPER, K_RSUPER
K_LSHIFT, K_RSHIFT
K_RMETA, K_LMETA

Flèches:
K_LEFT
K_UP
K_RIGHT
K_DOWN

Autres:
K_MENU
K_MODE
K_PAUSE
K_POWER
K_UNDERSCORE
K_HASH

Souris

Pour la souris, nous allons procéder quasiment de la même manière, on retourne dans la boucle de récupération des événements et on ajoute une condition qui va concerner cette fois-ci la souris :

  • if event.type == MOUSEBUTTONDOWN:
  •     if event.button == 1:

Le chiffre après event.button correspond au clic désiré, ici c’est le clic gauche, voici la liste des possibilités avec la souris :

1 = bouton gauche

2 = bouton milieu ou gauche et droite

3 = bouton droite

4 = molette haut

5 = molette bas

A l’intérieur de la condition event.button on y place l’action désiré. L’action se fera dans toute la fenêtre, pour réduire la zone de clic à un endroit voulu il faudra rajouté une condition avant l’action que l’on souhaite que le clic fasse en utilisant :

  • if event.type == MOUSEBUTTONDOWN:
  •     if event.button == 3:
  •         # 0 pour l’abscisse et 1 pour l’ordonnée
  •         if event.pos[0] <= 100 and event.pos[1] <= 150:
  •             print("Tu as bien clic dans la zone !")

 

Si on clic dans la zone avec le clic droit comme montré ci-dessous, vous verrai dans la console s’afficher « Tu as bien clic dans la zone ! » :

 

IV - Exemple de programme avec Pygame

            Avec tous les éléments que j’ai présentés il est possible de créer un puissance 4 en graphique, voici quelques liens utile :

http://www.pygame.org/docs/

https://openclassrooms.com/courses/interface-graphique-pygame-pour-python

Pas de commentaire.

Ajouter un commentaire