PyGame 1.9.6 - Un module python utilise pour vos création !
I. Introduction à Pygame
Cet article est une introduction à la bibliothèque Pygame pour les programmeurs Python. La version originale est parue dans Pyzine, volume 1, issue 3. Cette version contient des révisions trop mineures pour créer un nouvel article. Pygame est une bibliothèque d'extension de Python enveloppant la bibliothèque SDL.
II. Histoire
Pygame a commencé durant l'été 2000. Connaissant le langage C depuis des années, j'ai découvert Python et SDL en même temps. Si vous êtes déjà familiarisé avec Python, (qui en était à la version 1.5.2), vous pourriez avoir besoin d'une introduction à SDL, acronyme signifiant : Simple Directmedia Library. Créée par Sam Lantinga, SDL est une bibliothèque multiplateforme écrite en C afin de gérer le multimédia pouvant être comparé à DirectX. Elle a été utilisée par des centaines de projets commerciaux et de jeux open source. J'ai été impressionné par la propreté et la simplicité des deux projets et j'ai vite réalisé qu'associer Python et SDL était une idée intéressante.
III. Un avant-goût
Je trouve que le meilleur moyen pour saisir le fonctionnement d'une nouvelle bibliothèque est de plonger directement dans un code d'exemple. Dès les premiers jours avec Pygame, Stuntcat créé une animation de balle rebondissante en sept lignes de code. Jetons un coup d'œil à une version simplifiée de la même chose.
import sys, pygame
pygame.init()
size = width, height = 320, 240
speed = [2, 2]
black = 0, 0, 0
screen = pygame.display.set_mode(size)
ball = pygame.image.load("ball.bmp")
ballrect = ball.get_rect()
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
ballrect = ballrect.move(speed)
if ballrect.left < 0 or ballrect.right > width:
speed[0] = -speed[0]
if ballrect.top < 0 or ballrect.bottom > height:
speed[1] = -speed[1]
screen.fill(black)
screen.blit(ball, ballrect)
pygame.display.flip()
IV. Python et les jeux
Python est-il approprié pour les jeux ?
La réponse est : cela dépend du jeu.
Python est en fait capable de faire tourner des jeux. Cela vous surprendra toujours de savoir tout ce qu'il est possible de faire en trente millisecondes. Toutefois, il n'est pas difficile d'atteindre la limite une fois que votre jeu commencera à devenir plus complexe. N'importe quel jeu fonctionnant en temps réel utilisera pleinement l'ordinateur.
Depuis plusieurs années, il y a une tendance intéressante dans le développement de jeux : l'utilisation de langage de plus haut niveau (plus proche de l'utilisateur que de la machine). Généralement, un jeu est divisé en deux parties majeures. Le moteur de jeu, qui doit être le plus rapide possible et la logique de jeu, qui commande le moteur de jeu. Il n'y a pas si longtemps, le moteur était écrit en assembleur avec quelques portions en C. De nos jours, le C est plus présent dans les moteurs de jeu, tandis que le jeu en lui-même est écrit en langage de script de haut niveau. Les jeux comme Quake3 et Unreal Tournament exécutent ces scripts en tant que bytecode portable.
Dans le courant 2001, les développeurs de Rebel Act Studios ont fini leur jeu, Severance: Blade of Darkness. Ce jeu utilise un moteur de jeu 3D modifié, le reste du jeu est écrit en Python. Le jeu est un jeu d'action à la 3e personne. Vous contrôlez un guerrier médiéval attaquant et explorant des donjons. Vous pouvez télécharger le 3e addon pour ce jeu et vous verrez qu'il n'y a rien d'autre que des fichiers source en Python.
Beaucoup plus récemment, Python a été utilisé dans une grande variété de jeux comme Freedom Force et Humungous' Backyard Sports Series.
Pygame et SDL s'utilisent comme un excellent moteur de jeu en C pour des jeux en 2D. Les jeux trouvent en grande partie ce dont ils ont besoin dans la SDL pour le graphisme. SDL peut avantageusement utiliser l'accélération graphique matérielle. Vous pouvez optimiser le jeu pour lui faire afficher entre 40 et 200 FPS (images par seconde). Lorsque l'on voit qu'un jeu en Python peut afficher 200 FPS, on réalise que Python et les jeux peuvent se combiner.
Il est impressionnant de savoir que Python et SDL fonctionnent sur de multiples plateformes. Par exemple, en mai 2001, j'ai actualisé complètement mon projet avec Pygame : SolarWolf, un jeu d'action et d'arcade. Une chose qui m'a étonné est qu'après un an, il n'avait toujours pas eu besoin de patches, correction de bogues, ou de mises à jour. Le jeu était entièrement développé sous Windows, mais tournait aussi sous Linux, Mac OSX et plusieurs Unix sans aucun travail de ma part.
Toutefois, il y a clairement des limitations. La meilleure manière de gérer l'accélération matérielle n'est pas toujours la meilleure façon d'avoir des résultats plus rapides que l'accélération logicielle. L'accélération n'est pas disponible sur toutes les plateformes. Quand un jeu devient trop complexe, il doit souvent se réduire à une seule plateforme. La SDL a également quelques limitations de conception, des choses comme le scrolling en plein écran peuvent réduire fortement la vitesse du jeu, jusqu'à ce que ça devienne injouable. SDL n'est pas fait pour tous les types de jeux, mais souvenez-vous que des entreprises comme Loki ont utilisé la SDL pour faire fonctionner une grande variété de jeux de qualité.
Pygame est un langage bas niveau quand il est utilisé pour coder les jeux. Vous aurez rapidement besoin d'envelopper des fonctions communes pour votre environnement de jeu. C'est en grande partie dû au fait qu'il n'y a rien dans Pygame pour cela. Votre programme a le contrôle total sur tout. Vous constaterez que l'effet indésirable à cela est que vous devrez écrire beaucoup de code ennuyeux pour obtenir une structure plus avancée. Vous aurez besoin d'une meilleure compréhension de ce que vous faites.
VI. Vue d'ensemble des modules de Pygame
Voici un récapitulatif des modules disponibles dans la bibliothèque de Pygame, avec un lien sur la documentation de référence de chacun de ces modules.
Cdrom
Accéder et contrôler les lecteurs CD audio.Transform
Redimensionner et déplacer des images.Display
Configurer la surface d'affichage.
Draw
Dessiner des formes simples comme des lignes et des ellipses sur des surfaces.Event
Gérer les évènements à partir de différents matériels d'entrée (clavier, souris…), ainsi que du fenêtrage.Font
Charger et faire un rendu des polices TrueType.
Image
Charger, sauver et transférer des images sur des surfaces.Joystick
Gérer les joysticks.Key
Gérer le clavier.
Mixer
Charger et jouer des sons.Mouse
Gérer la souris et son affichage.Movie
Lire des vidéos à partir de film en MPEG.
Music
Jouer des pistes musicales en streaming.Overlay
Accéder à l'affichage vidéo avancé.Pygame
Fonctions de haut niveau pour le contrôle de Pygame.
Sndarray
Manipuler des échantillons de données audio.Sprite
Objets de haut niveau pour la représentation des images de jeu.Surface
Objets pour des images et l'écran.
Surfarray
Manipuler des images avec Numeric.Time
Manipuler les temporisateurs et le taux de rafraîchissement.