Pygame 5: Mettons tout ça ensemble !

Nous allons voir les couleurs, les événements et les rectangles dans un petit économiseur d’écran interactif, sans aucune prétention, qui servira seulement pour nous amuser et pour affiner notre technique. La nouvelle entrée de cette série est la fonction  pygame.time.wait(delay), qui nous sert pour faire écouler un certain nombre de millisecondes sans rien faire. Nous traiterons les événements relatifs à la pression des touches: R (carrées aux hasard rouges), B, V, E (tous les couleurs), G (gris) et D (pour effacer le tableau).

Exercice 1: Modifiez le programme pour gérer  les touches “+” et “-” de la façon suivante. Le délai entre la création d’un carre e le prochain est de 10 millisecondes. Avec la pression de la touche “+” ça augmentera de 10 millisecondes, jusqu’au maximum de 1 seconde; avec la touche “-” ça diminuera de 10 millisecondes, jusqu’au minimum de 10 millisecondes. 

Exercise 2: En lieux de carres, générez des rectangles avec la largeur et la longueur aux hasards entre TAILLE_MIN et TAILLE_MAX.  

# Importons la librairie pygame
import pygame

# Importons randint
from random import randint 

# Pour les constantes de pygame 
from pygame.locals import *

# On determine la taille minimle et maximale d'un coté du carré
TAILLE_MIN = 5
TAILLE_MAX = 100

# Les coordonnées du centre varieront entre 600 et 800
X_MAX = 800 
Y_MAX = 600

# Les valeurs RGB varient entre 0 et 255
COUL_MAX = 255

# Si on utilise des rouges, la variable booleenne rouges est True, 
# cela vaut aussi pour les autres couleurs
rouges = True
bleues = True
verts  = True

rouge  = 0
vert   = 0
bleue  = 0

# On joue avec les trois couleurs   
trois_couleurs = True 

# On Joue avec une echelle des gris 
gris = False 

# Initialisons la plateforme de jeux 
pygame.init()

# creeons une fenetre de jeux 
gameDisplay = pygame.display.set_mode((800, 600))

# Notre titre pour le jeux...
pygame.display.set_caption("Un Screensaver avec des carrés!")

# Mettons-la à jour (visualizons-la) 
pygame.display.update()

# Condition de sortie 
sortieDuJeux=False 

# Boucle de gestion des évenements
# La réference pour les evenements est ici: https://www.pygame.org/docs/ref/event.html
while not sortieDuJeux :
    
    # On genere des entiers, aux hasard...
    rouge = randint (0, COUL_MAX) 
    vert  = randint (0, COUL_MAX)
    bleue = randint (0, COUL_MAX)
        
    # Nous generons aussi une taille et un point central aux hasards...
    x = randint (0, X_MAX+1)
    y = randint (0, Y_MAX+1)
        
    taille = randint(TAILLE_MIN, TAILLE_MAX)

    for event in pygame.event.get():
        
        # On intercepte une touche 
        if event.type == pygame.KEYDOWN:
            # r pour rouges
            if event.key==K_r:
               trois_couleurs = False
               rouges         = True
               bleues         = False
               verts          = False 
               gris           = False
               
            # b pour bleu
            if event.key==K_b:
               trois_couleurs = False
               rouges         = False 
               bleues         = True
               verts          = False 
               gris           = False
               
            # v pour vert
            if event.key==K_v:
               trois_couleurs = False
               rouges         = False
               bleues         = False
               verts          = True 
               gris           = False

            # e pour ensemble: nous varions les trois couleurs! 
            if event.key==K_e:
               trois_couleurs = True
               rouges         = True
               bleues         = True
               verts          = True 
               gris           = False
               
            # g pour gris
            if event.key==K_g:
               trois_couleurs = False
               rouges         = True
               bleues         = True
               verts          = True 
               gris           = True               
        
            # d pour Delete!
            if event.key==K_d:
               pygame.draw.rect(gameDisplay, (0,0,0) , (0,0,800,600), 0)
        
        # Manage the "quit" event 
        if event.type == pygame.QUIT :
            sortieDuJeux = True
    
    # On attend un peu... 
    pygame.time.wait(100)
    
    # On initialise la couleur à NOIR! 
    couleur = (0,0,0)
    
    # Les couleurs en Pygame sont des "tuples" de 3 valeurs (rouge, Vert, Bleu). les valeurs sont comprises entre 0 et 255. 
    # En realité il y a la quatrième composante, la transparence, mais on discuterà de ça plus tard. 
    # On produit notre couleur
    if  not gris :
        couleur = (rouge * rouges, vert * verts, bleue * bleues)
    else :
        couleur = (rouge * rouges, rouge * rouges, rouge * rouges)
    
    # Note: Ici on a triché un peu en multipliant une valeur booleenne (True ou False) 
    # pour un entier. En realité ça est faisable car True vaut 1 et False 0 
    
    # On visualize notre rectangle...  
    pygame.draw.rect(gameDisplay, couleur, (x,y,taille, taille), 0)
            
    pygame.display.update()
    
# Sortons de Pygame
pygame.quit()

# Sortons du programme
quit()

Et voilà le résultat!