Créer des jeux vidéo avec Pygame
Introduction
1. Contexte
Dans la plupart des langages de programmation, des fonctions permettent d’interagir avec le clavier, voire la souris. Mais dès qu’il s’agit de produire un son, d’effectuer des affichages à 30 images par seconde ou d’utiliser le joystick, nous sommes face à un grand vide. La cause profonde vient du contexte historique. En effet, ces besoins correspondent essentiellement à ceux de l’industrie du jeu vidéo. Par conséquent, des librairies spécialisées (OpenGl, DirectX) et des environnements dédiés (Unity3D, Unreal Engine…) proposent des packages spécifiques pour gérer la 3D, la 2D, les animations, les effets spéciaux, les interactions avec les joysticks, la gestion des Kinect ou des casques de réalité virtuelle…
En fait, pendant longtemps, l’offre s’est centrée autour de la librairie SDL (Simple DirectMedia Library) permettant un contrôle de l’audio, du clavier, de la souris, du joystick et de la carte 3D. Effectivement, proposée comme une surcouche de DirectX et d’OpenGL, cette librairie pouvait penser offrir une forme de simplicité, comparée à ces deux mastodontes destinés aux développeurs de haut niveau.
Malheureusement, SDL étant proposée en langage C, sans environnement de développement dédié, son utilisation avec les fameux pointeurs du langage C a dérouté plus d’un utilisateur. Développer un jeu très simple relevait du défi personnel dans ce contexte et mieux valait ne pas s’y aventurer sans une aide extérieure.
Heureusement...
Projet balle rebondissante 
1. Présentation du code
Vous pouvez trouver la source du projet à compléter en téléchargement sur le site de l’éditeur sous le nom de fichier : Pygame Premiers pas.py.
Recopiez le code suivant dans votre éditeur ou téléchargez et ouvrez le fichier Premier pas.py.
# permet d'accéder aux fonctions du module pygame
import pygame
# Definit des couleurs RGB
BLACK = [0, 0, 0]
WHITE = [255, 255, 255]
GREEN = [0, 255, 0]
RED = [255, 0, 0]
BLUE = [0 , 0 , 255]
# initialisation de l'écran de jeu
pygame.init()
# Initialise la fenêtre de jeu
TailleEcran = [400, 300]
screen = pygame.display.set_mode(TailleEcran)
pygame.display.set_caption("Super Ball")
# Gestion du rafraîchissement de l'écran
clock = pygame.time.Clock()
# Position de départ
balle_x = 50
balle_y = 50
# Vitesse et direction
balle_change_x = 3
balle_change_y = 3
balle_rayon= 5
# Le jeu continue tant que l'utilisateur ne ferme pas la fenêtre
Termine = False
# BOUCLE PRINCIPALE DU PROGRAMME
while not Termine:
# recupère la liste des évènements du joueur
event = pygame.event.Event(pygame.USEREVENT)
# ÉVÈNEMENTS
# détecte le clic sur le bouton close de la fenêtre
for event in pygame.event.get():
if event.type == pygame.QUIT:
Termine = True
# LOGIQUE
# Déplace...
Le projet Pong 
1. Historique
Pong est un des premiers jeux vidéo d’arcade à avoir connu un succès planétaire. Il a été imaginé par l’Américain Nolan Bushnell. La société Atari le commercialise en 1972 sous forme de bornes d’arcade, vendant environ 8 000 exemplaires en un an. Le succès étant au rendez-vous, en 1975, Pong est vendu sous forme de consoles de salon. Les consoles Atari ainsi que celles mises en place par la concurrence sous forme de contrefaçons ou de variantes vont totaliser plusieurs millions de ventes les années suivantes, c’est une véritable explosion. On peut considérer que ce succès mondial doublé par la production en masse de consoles a été le point de départ de l’industrie du jeu vidéo.
Le jeu est inspiré du tennis de table en vue de dessus. Les deux joueurs s’affrontent en déplaçant chacun son palet placé sur les bords gauche et droit. La balle rebondit sur le bord supérieur et inférieur de l’écran, et chaque fois qu’elle sort du côté gauche ou du côté droit, le joueur correspondant marque un point. Le score est affiché en haut de l’écran, au centre. La simplicité du jeu et son gameplay réussi contribuent à la réussite du titre.
2. Premier lancement
Vous pouvez trouver la source du projet à compléter en téléchargement sur le site de l’éditeur sous le nom de fichier : Pygame Pong.py.
Ouvrez le fichier Pong.py dans votre éditeur de code Python et lancez le programme. Vous...
Le projet Snake 

1. Historique
Snake (de l’anglais signifiant "serpent") est un genre de jeu vidéo dans lequel un joueur dirige un serpent qui grandit au cours de la partie. Lui et ses éventuels congénères constituent ainsi un obstacle pour eux-mêmes. L’objectif est de survivre le plus longtemps possible en ramassant éventuellement des bonus pour augmenter son score.
Il n’existe pas vraiment une version de référence pour ce jeu. En effet, son graphisme ultrasimple, son absence de musique et son fond d’écran noir ne permettent pas de lui donner une personnalité, comparativement à des jeux comme Pacman ou Tetris. De plus, ce concept est déclinable dans des versions très différentes, comme Tron. Presque disparu de la communauté vidéo ludique dans les années 2000, il est redevenu un classique grâce aux appareils mobiles.
2. Premier lancement
Vous pouvez trouver la source du projet à compléter en téléchargement sur le site de l’éditeur sous le nom de fichier : Pygame Snake.py.
Le corrigé du projet est aussi disponible en téléchargement sous le nom de fichier : Pygame Snake corrigé.py.
Ouvrez le fichier Snake.py dans votre éditeur de code Python et lancez le programme. Vous constatez qu’une petite partie du jeu est déjà fonctionnelle. Le serpent se déplace sur la droite, sa tête est affichée en blanc, et son corps en jaune. Le score affiché augmente au fil du temps.

Dans les fichiers d’exemple se trouve la correction du projet si vous êtes coincé.
3. Présentation...
La documentation en ligne de Pygame
Comment connaître les différents paramètres des fonctions de la librairie Pygame ? À ce niveau-là, il n’y a pas beaucoup d’options. Vous pouvez demander sur un forum ou plus rapidement consulter la documentation en ligne. La documentation de la librairie Pygame est plutôt bien faite. Cependant, elle est disponible uniquement en anglais. Ce n’est pas un obstacle normalement, car les documentations techniques informatiques utilisent une grammaire et un vocabulaire assez simples. Par contre, il y a des termes techniques, et là, ce n’est pas évident. Car ces termes ne sont pas forcément présents dans un dictionnaire anglais-français, vu la spécificité de la matière.
Il se peut d’ailleurs qu’il n’existe pas de mot équivalent en français et que le terme anglais soit ainsi utilisé couramment par la communauté. Dans ce cas, il faut trouver une source d’explication. Par exemple, Wikipédia connaît très bien les termes techniques. Nous allons vous présenter ici les termes spécifiques à la librairie Pygame et nous essaierons de décrypter une partie de la documentation concernant les fonctions de dessin.
Si vous n’êtes pas à l’aise en anglais, ce n’est pas grave : toute l’information nécessaire pour compléter les projets est donnée dans le livre.
1. La liste des termes techniques
-
Width : largeur.
-
Height : hauteur.
-
Draw : dessiner.
-
Straight line : ligne droite.
-
Render : dessiner dans un sens plus général...
Le projet Gauntlet 

1. Historique
En 1985, la société Atari Games édite la borne d’arcade Gauntlet, borne révolutionnaire pour l’époque, car plusieurs joueurs, quatre exactement, peuvent coopérer pour évoluer à l’intérieur d’un donjon rempli de trésors, de monstres et de nombreux pièges en tout genre. Gauntlet fait aujourd’hui partie des classiques des jeux d’action et le jeu a d’ailleurs été porté sur de nombreux micro-ordinateurs. Cerise sur le gâteau, en vous plongeant dans un monde digne de Donjons et Dragons, vous avez le choix d’incarner quatre personnages différents : un guerrier, un mage, un elfe ou une valkyrie. Chacun a une arme ou un pouvoir différent avec des caractéristiques spécifiques. L’interface en vue de dessus permet d’avoir une bonne vision du décor et des méandres du labyrinthe dans lequel les joueurs sont plongés.


Gauntlet sur borne d’arcade Atari et sa version portée sur micro-ordinateur
Nous vous proposons de mettre en place les bases d’un jeu fonctionnant avec le même concept : un aventurier évoluant dans un labyrinthe à la recherche de clefs et de trésors.
Vous trouverez les exemples de code dans le fichier : Labyrinthe.py.
2. Gestion du labyrinthe
Nous stockons le plan du labyrinthe à l’intérieur d’une liste de string :
LABY = [ 'BBBBBBBBBB',
'B B',
'B BB BBBBB',
'B...
Le projet 1943 


1. Historique

Voici un titre célèbre de la société Capcom, sorti en 1987. Le joueur pilote un avion au-dessus du Pacifique en pleine guerre du Japon. Il se trouve confronté à des vagues d’ennemis. Les cuirassés et notamment leurs tourelles anti-aériennes l’obligent à mener une lutte acharnée pour mener à bout chaque niveau. Le game design basé sur un défilement vertical est des plus simple. Quant aux missions, elles consistent à détruire le boss de fin de niveau, ce qui n’est pas particulièrement original. Cependant, la simplicité du jeu et l’originalité des décors lui ont procuré un certain succès, à tel point que le titre a été distribué sur l’ensemble des consoles et des micro-ordinateurs de l’époque.
Vous pouvez trouver la source du projet à compléter en téléchargement sur le site de l’éditeur sous le nom de fichier : Pygame 1943.py.
Le corrigé du projet est aussi disponible en téléchargement sous le nom de fichier : Pygame 1943 corrigé.py.
2. Premier lancement
Téléchargez et ouvrez le fichier 1943.py dans votre éditeur de code Python et lancez le programme. Vous constatez qu’une petite partie du jeu est déjà fonctionnelle. L’avion se déplace ! Le cuirassé aussi, mais il ne semble pas très réactif. La mer défile sous l’avion, cela donne un effet de vitesse. Étrangement, elle disparaît petit à petit. Bref, vous l’avez compris, il y a du travail...
Le projet Illumination 

1. Contexte
Vous pouvez trouver la source du projet à compléter en téléchargement sur le site de l’éditeur sous le nom de fichier : Pygame Illumination.py.
Le corrigé du projet est aussi disponible en téléchargement sous le nom de fichier : Pygame Illumination corrigé.py.
Nous vous proposons de mettre en place une démonstration graphique. Le but de ce projet consiste à simuler l’éclairage d’une pièce. Le problème sous-jacent est celui du lancer de rayon. Ce problème est la base du graphisme en 3D. Les images de synthèse que vous voyez au cinéma et les jeux sur console exploitent largement cette technique.
Le lancer de rayon est aussi utilisé dans la gestion des interactions des jeux, par exemple pour savoir si un drone peut détecter votre présence ou pour savoir si votre tir a touché sa cible ou s’il a été arrêté par un obstacle. Le lancer de rayon consiste à envoyer une sorte de rayon laser depuis une source et à déterminer quel objet est touché par ce rayon.
Pour notre simulation, nous disposons une source de lumière en bas de l’écran, qui se déplace de gauche à droite. Nous ajoutons des murs dans la scène. Comme nous affichons le terrain en vue de dessus, ces murs apparaissent sous la forme de segments vus d’en haut. Leur rôle consiste à arrêter les trajets des rayons lumineux. Depuis la lampe, nous faisons partir une multitude de rayons et nous affichons leurs trajets jusqu’à ce qu’ils rencontrent un point d’impact. Voici...
Le projet Tetris 


1. Historique
Vous pouvez trouver la source du projet à compléter en téléchargement sur le site de l’éditeur sous le nom de fichier : Pygame Tetris.py.
Le corrigé du projet est aussi disponible en téléchargement sous le nom de fichier : Pygame Teris corrigé.py.
Tetris est un jeu vidéo entre arcade et puzzle, conçu par Alekseï Pajitnov en juin 1984. Le succès devient planétaire et toutes les consoles qui suivront posséderont leur version de Tetris. Il fait partie des jeux les plus addictifs de l’époque, avec Pacman. Le jeu consiste, grâce à seulement quatre touches, à orienter une pièce à droite ou à gauche pendant que cette dernière tombe inexorablement vers le bas de la grille. On peut aussi la faire tourner sur elle-même ou accélérer sa descente. Une fois la pièce bloquée, on ne peut plus modifier sa position et une autre pièce arrive en haut du décor. Et au grand désarroi du joueur, ce n’est jamais celle qu’il attend ! Ses ennemis sont les trous qu’il laisse au fur et à mesure de ses empilements maladroits. Cependant, lorsqu’une ligne est complète, elle disparaît et les lignes supérieures descendent alors d’un étage, laissant au joueur un espoir de survie supplémentaire ! Le jeu s’arrête lorsqu’une pièce nouvelle est bloquée dès son arrivée. Voici des copies d’écran de Tetris sur diverses machines de l’époque :

Sur GameBoy 1989 Sur...