1 Installation de Pygame sur un PC sous Windows

  1. Télécharger puis installer la distribution Python 3.2 sur le site Python.org

  2. Télécharger puis installer l'installateur de pygame pour Python 3.2 sur la page de download de pygame

  3. Télécharger puis installer la distribution 2015 de Pyzo depuis la page de download de Pyzo

  4. Pour utiliser Pygame dans Pyzo, il faut d'abord changer le shell par défaut de Pyzo qui est celui livré avec la distribution. Pour celà, il faut sélectionner l'option Configuration du shell dans le menu shell

Paramétrage du shell

Paramétrage du shell

  1. Pour une installation avec des versions plus récentes de Python (3.4, 3.5 par exemple), on peut télécharger les paquets wheel de Christoph Gohlke sur son site et suivre les instructions données sur ce tutotiel d'installation à partir de wheels En gros, on ouvre un shell Python dans Pyzo qui dispose de l'outil d'installation pip, on l'exécute en tant que script dans le répertoire où se trouve le paquet wheel et on exécute une commande telle que pip install pygame-1.9.2a0-cp35-none-win32.whl

2 Test de Pygame avec le fichier tutoriel

2.1 Les ressources

Dans le partage groupe /ISN du réseau interne du lycée ou dans l'archive fournie par le professeur, se trouvent un répertoire tutorielpygame_ avec les fichiers suivants :

2.2 Principe du tutoriel

2.3 Partie 1 : import et initialisation du module

import pygame
from pygame.locals import *
pygame.init()

2.4 Partie 2 : écran d'affichage

#creation de l'écran (qui est une surface pygame)
(LARGEUR, HAUTEUR) = (800, 600)
ecran = pygame.display.set_mode((LARGEUR, HAUTEUR))
pygame.display.set_caption("Tutoriel Pygame")
#récupération du rectangle de positionnement de l'écran
ecran_rect = ecran.get_rect()

2.5 Partie 3 : Créer un fonds et blitter le fonds sur l'écran

#création d'un fonds
fond = pygame.Surface((LARGEUR, HAUTEUR))

#remplissage du fond avec une couleur  (vert pale)
fond.fill((180, 230, 180))

#D'abord on convertit les pixels du logo au meme format que les pixels de l'écran
fond = fond.convert()

#blitter le fond sur l'écran
ecran.blit(fond, ecran_rect)

#mise à jour de l'affichage (sinon l'écran reste noir)
pygame.display.flip()
logo = pygame.image.load('logo-parc.png')

#reglage de la couleur transparente avec la couleur du bord 
couleur_bord = logo.get_at((0,0))
logo.set_colorkey(couleur_bord)

#recuperation du rectangle de positionnement de l'image
logo_rect = logo.get_rect()

#positionnement du logo au centre de l'écran
logo_rect.center = ecran_rect.center

2.7 Partie 5 : blitter le logo sur l'écran

#D'abord on convertit les pixels du logo au meme format que les pixels de l'écran
logo = logo.convert()

ecran.blit(logo, logo_rect)

#mise à jour de l'affichage (sinon l'écran reste noir)
pygame.display.flip()

2.8 Partie 6 : création d'une variable de points

#variable de décompte de points
#un point supplémentaire lorsqu'on clique sur le logo
points = 0

2.9 Partie 7 : Blitter un message de score sur l'écran

#création d'une fonte pour l'affichage du score
score_font = pygame.font.Font(None, 30)
couleur_font = (255, 0, 0) #couleur de la fonte (ici rouge)
#surface de score
score_surface = score_font.render("Score : {:6d} points".format(points), 1, couleur_font)
#rectangle de positionnement de la surface de fonte
score_rect = score_surface.get_rect()
score_rect.bottomright = ecran_rect.bottomright
#blit de la surface de score sur l'écran d'affichage
ecran.blit(score_surface, score_rect)
#mise à jour de l'affichage 
pygame.display.flip()

2.10 Partie 8 : Animation avec ou sans controle, déplacement du logo, clics avec la souris

#création d'un chronometre
chrono = pygame.time.Clock() 
#declenchement du chrono
chrono.tick()

#vitesse de déplacement du logo (ici 1 pixel vers la droite)
vitesse = (1,0) 

#Boucle externe d'animation
continuer = True

while continuer:
    
    #Controle de la vitesse maximale à 300 frame par secondes
    chrono.tick(300)
    
    #boucle interne de récupération des événements
    for event in pygame.event.get():
        if event.type == QUIT:
            continuer = False
        if event.type == MOUSEBUTTONDOWN:
            if logo_rect.collidepoint(pygame.mouse.get_pos()):
                points += 1
                #modification du score
                score_surface = score_font.render("Score : {:6d} points".format(points), 1, couleur_font)
    #mise à jour des sprites
    #déplacement du logo de gauche à droite en boucle
    logo_rect = logo_rect.move(vitesse)
    if logo_rect.left >= LARGEUR:
        logo_rect.right = 0
        
    #blitter le fond, le score et le logo à sa nouvelle position sur l'écran
    ecran.blit(fond, ecran_rect)
    ecran.blit(logo, logo_rect)
    ecran.blit(score_surface, score_rect)
    #mise à jour de l'affichage 
    pygame.display.flip()

#Sortie de la boucle d'animation : on quitte pygame 
pygame.quit()

2.11 Figures

Partie 2 : écran d'affichage vide

Partie 2 : écran d'affichage vide

Partie 3 : fonds blitté sur écran d'affichage

Partie 3 : fonds blitté sur écran d'affichage

Parties 4 et 5 : logo et fonds blittés sur écran d'affichage

Parties 4 et 5 : logo et fonds blittés sur écran d'affichage

Parties 6 et 7 : logo, fonds et score blittés sur écran d'affichage

Parties 6 et 7 : logo, fonds et score blittés sur écran d'affichage

Partie 8 : animation

Partie 8 : animation