PyGame Zero
PyGame Zero est une bibliothèque de programmation de jeux vidéos basée sur PyGame avec pour objectif de simplifier encore plus l'accès à cet univers fascinant qu'est la programmation, notamment de jeux. PyGame Zero est aujourd'hui un bine meilleur outil d'apprentissage de la programmation orienté Kids que ne l'est Scratch. De plus l'usage de Python comme langage de développement permet d'ouvrir l'accès à un très vaste univers de développement passé, présent et à venir.
Documentation officielle : https://pygame-zero.readthedocs.io/en/stable
PyGame Zero est un wrapper autour de l'environnement PyGame. Son objectif est de simplifier la mise en place d'objets graphiques et leur interaction, ainsi que la prise en charge transparente de la logique applicative tournant autour du jeu : boucle d'événements, interaction entre les objets, gestion audio...
Un programme simple réalisé avec PyGame Zero qui permet d'afficher une fenêtre de 800 x 600 pixels avec un fond noir est équivalent à ceci
WIDTH = 800
HEIGHT = 600
def draw():
screen.fill((0,0,0))
Pour lancer le programme, il suffit, depuis une commande DOS, de faire pgzrun <nom du programme>.
Vous pouvez remarquer que c'est d'une grande simplicité tout de même. Petite digression au passage. PyGame Zero
essaie de reprendre les mêmes principes que le méta langage AMOS avait mis en place il y a déjà de fort longues années
sur un des ordinateurs phares des années 1990 : le Commodore Amiga. Nous pouvons également le comparer au langage
Processing qui permet également de réaliser des choses incroyables avec seulement quelques lignes de code.
Si l'on compare avec la même chose réalisée avec Pygame, nous obtiendrions quelque chose d'équivalent à ceci
import pygame
pygame.init()
size = 800, 600
screen = pygame.display.set_mode(size)
clock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
sys.exit()
screen.fill(pygame.Color("black"))
pygame.display.flip()
clock.tick(60)
Le fonctionnement de PyGame Zero repose sur des constantes et des fonctions prédéfinies qui réalisent automatiquement des actions pour le programmeur.
PyGame Zero défini les quelques constantes suivantes (attention à bien les écrire dans votre code) :
images/
. Cette chaine doit
correspondre au nom du fichier sans son extension.
draw()
PyGame Zero définit des dossiers par défaut dans lesquels il va chercher les différentes ressources requises pour vos jeux. Ce sont les dossiers images, music/ et sounds qui devront contenir les objets graphiques et sonores que PyGame devra reproduire.
.
|-- images/
| |-- image1.png
| |-- image2.png
|
|-- music/
| |-- music1.mp3
|
|-- sounds/
| |-- audio1.mp3
| |-- sound1.wav
|
|__ game.py
Les images peuvent être de trois formats différents : .png, .gif et .jpg. Le format PNG est fortement recommandé pour sa capacité de transparence, de gratuité et de bonne qualité. Le format GIF est propriétaire et le JPG plutôt pour la photographie. Toutes les images du jeu doivent se trouver dans le dossier images/. Lors de l'appel des fonctions graphiques avec le nom du fichier, celui-ci ne doit pas contenir son extension. Dans l'exemple qui suit, la fonction blit() va chercher le fichier 'vélo' dans le dossier images/, et va l'ouvrir si son extension est une des trois supportées.
def draw():
screen.clear()
screen.blit('velo', (10, 10))
L'autre moyen de stocker les images pour les objets graphiques est d'utiliser un Actor. Je vous conseille de lire les descriptions de la classe Actor pour la gestion des objets animés (les sprites comme ont dit). La lecture du fichier graphique est la même que pour la fonction blit() avec la recherche dans le dossier images/ local.
velo = Actor('velo')
def draw():
screen.clear()
velo.draw()
Les surfaces constituent le support des pixels des images. Elles peuvent être gérées en mémoire ou bien directement par le GPU des cartes
graphiques pour plus de performances. La classe Surface dispose de méthodes pour obtenir des informations à leur sujet.
Pygame Zero est capable de gérer des sons au format .wav et .ogg uniquement. Il faut réserver les fichiers WAV pour les effetes sonores tandis que les fichiers OGG sont plutôt dédiés à la musique. Comme pour les images les sons doivent se trouver dans le dossier sounds/ du dossier du jeu.