La bibliothèque Pygame offre des outils puissants pour mainpuler des graphismes en 2D. L'un des modules les plus utilisés est pygame.draw, qui permet de tracer des formes géométriques directement sur une surface ou dans la fenêtre principale de l'application.
1. Tracer des lignes droites
La fonction pygame.draw.line() est utilisée pour relier deux points par un segment. Sa syntaxe requiert la surface de destination, la couleur, les coordonnées de départ et d'arrivée, ainsi que l'épaisseur du trait.
import pygame
import sys
# Initialisation
pygame.init()
ecran = pygame.display.set_mode((400, 400))
couleur_ligne = (50, 150, 255) # Bleu ciel
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
ecran.fill((255, 255, 255)) # Fond blanc
# Dessiner une ligne verticale au centre
pygame.draw.line(ecran, couleur_ligne, (200, 0), (200, 400), 8)
pygame.display.flip()
2. Création d'une grille
En utilisant des boucles itératives, nous pouvons automatiser le tracé de lignes pour générer une grille, ce qui est très utile pour les jeux de plateau ou les éditeurs de niveaux.
import pygame
import sys
pygame.init()
largeur, hauteur = 600, 600
surface = pygame.display.set_mode((largeur, hauteur))
teinte_grille = (100, 100, 100)
intervalle = 40
while True:
for e in pygame.event.get():
if e.type == pygame.QUIT:
pygame.quit()
sys.exit()
surface.fill((240, 240, 240))
# Boucle pour les colonnes et les rangées
for x in range(0, largeur, intervalle):
pygame.draw.line(surface, teinte_grille, (x, 0), (x, hauteur))
for y in range(0, hauteur, intervalle):
pygame.draw.line(surface, teinte_grille, (0, y), (largeur, y))
pygame.display.update()
3. Dessiner des cercles
La fonction pygame.draw.circle() nécessite un point central et un rayon. Si l'argument d'épaisseur est omis ou mis à 0, le cercle sera plein.
import pygame
pygame.init()
fenetre = pygame.display.set_mode((500, 500))
centre = (250, 250)
rayon_cercle = 80
vert = (46, 204, 113)
while True:
for ev in pygame.event.get():
if ev.type == pygame.QUIT:
pygame.quit()
exit()
fenetre.fill((0, 0, 0))
# Dessin d'un cercle avec une bordure de 5 pixels
pygame.draw.circle(fenetre, vert, centre, rayon_cercle, 5)
pygame.display.update()
4. Manipulation de rectangles
Le tracé de rectangles s'effectue via pygame.draw.rect(). Cette fonction prend en paramètre un objet ou un tuple définissant la position (x, y) et la taille (largeur, hauteur).
import pygame
pygame.init()
zone_affichage = pygame.display.set_mode((600, 400))
rouge_corail = (255, 127, 80)
# Définition du rectangle : x, y, largeur, hauteur
mon_rect = (150, 100, 300, 200)
while True:
if pygame.event.peek(pygame.QUIT):
break
zone_affichage.fill((255, 255, 255))
pygame.draw.rect(zone_affichage, rouge_corail, mon_rect)
pygame.display.flip()
5. Animation d'une forme
Pour animer une forme, il suffit de modifier ses coordonnées à chaque itération de la boucle principale et de redessiner le fond pour éviter les effets de traînée.
import pygame
import sys
pygame.init()
fenetre = pygame.display.set_mode((800, 600))
pos_x, pos_y = 50, 50
vitesse_x, vitesse_y = 0.2, 0.2
couleur_carre = (255, 215, 0)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# Mise à jour de la position
pos_x += vitesse_x
pos_y += vitesse_y
# Gestion des rebonds sur les bords
if pos_x < 0 or pos_x > 750:
vitesse_x *= -1
if pos_y < 0 or pos_y > 550:
vitesse_y *= -1
fenetre.fill((30, 30, 30))
# Dessiner le carré en mouvement
pygame.draw.rect(fenetre, couleur_carre, (pos_x, pos_y, 50, 50))
pygame.display.update()
Autres méthodes de dessin disponibles
Outre les formes basiques, Pygame propose des fonctions spécialisées pour des tracés plus complexes :
- pygame.draw.polygon() : Dessine une forme à partir d'une liste de points de sommets.
- pygame.draw.ellipse() : Trace un ovale à l'intérieur d'un rectangle de référence.
- pygame.draw.arc() : Permet de dessiner une portion de circonférence d'ellipse.
- pygame.draw.aaline() : Trace des lignes avec anti-aliasing pour un rendu plus lisse (uniquement pour une épaisseur de 1 pixel).