Avec Pygame, un objet de type
rect = pygame.Rect(x, y, width, height)
où
Les coordonnées
# Exemple : un rectangle de dimensions 100x200 aux coordonnées (20,20)
>>> R = pygame.Rect(20, 20, 100, 200)
>>> R.x
20
>>> R.bottom
220
>>> R.centerx
70
Pour déplacer notre rectangle, rien de plus facile : il suffit de donner une valeur à une des coordonnées décrites ci-dessus.
# Exemple : un rectangle de dimensions 100x200, de centre (100,300)
>>> R = pygame.Rect(0, 0, 100, 200)
>>> R.centerx = 100
>>> R.centery = 300
>>> R.x
50
>>> R.y
150
Pour afficher le rectangle, on utilise la fonction
pygame.draw.rect(surface, color, rect)
Voici un premier code affichant un rectangle rouge s'éliognant progressivement de l'écran, jusqu'à disparaître...
import pygame
pygame.init()
W,H = 800,600
screen = pygame.display.set_mode((W, H))
clock = pygame.time.Clock()
# Création du rectangle et positionnement
R = pygame.Rect(0,0,100,200)
R.centery = H // 2
BACKGROUND_COLOR = (0,0,0)
RECT_COLOR = (255,0,0)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill(BACKGROUND_COLOR)
# Déplacement du rectangle d'1 pixel vers la droite
R.x += 1
# Affichage du rectangle
pygame.draw.rect(screen, RECT_COLOR, R)
pygame.display.flip()
clock.tick(60)
pygame.quit()
if R.right < WPour faire rebondir le rectangle sur le côté droit, on peut utiliser le programme suivant.
import pygame
pygame.init()
W,H = 800,600
screen = pygame.display.set_mode((W, H))
clock = pygame.time.Clock()
R = pygame.Rect(0,0,100,200)
R.centery = H // 2
# Vitesses horizontale et verticale du rectangle
vx, vy = 3, 0
BACKGROUND_COLOR = (0,0,0)
RECT_COLOR = (255,0,0)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill(BACKGROUND_COLOR)
# Déplacement du rectangle
R.x += vx
R.y += vy
# Si collision avec le bord droit, on replace le rectangle contre le bord, et on inverse sa vitesse horizontale
if R.right >= W:
R.right = W
vx *= -1
# Affichage du rectangle
pygame.draw.rect(screen, RECT_COLOR, R)
pygame.display.flip()
clock.tick(60)
pygame.quit()
elif R.x < 0:
R.x = 0
vx *= -1
if R.y < 0:
R.y = 0
vy *= -1
elif R.bottom >= H:
R.bottom = H
vy *= -1
Reprenons le code précédent, avec la gestion des rebonds sur les bords, en rajoutant un carré bleu sur l'écran. Lorsque le rectangle est en contact avec le carré, ce dernier devient jaune.
import pygame, random
pygame.init()
W,H = 800,600
screen = pygame.display.set_mode((W, H))
clock = pygame.time.Clock()
R = pygame.Rect(0,0,100,200)
R.centery = H // 2
vx, vy = 4, 3
C = pygame.Rect(0,0,50,50) # Carré de côté 50, au centre de l'écran
C.centerx = W // 2
C.centery = H // 2
BACKGROUND_COLOR = (0,0,0)
RED = (255,0,0)
BLUE = (0,0,255)
YELLOW = (255,255,0)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill(BACKGROUND_COLOR)
# Déplacement du rectangle
R.x += vx
R.y += vy
# Collisions avec les bords
if R.right >= W:
R.right = W
vx *= -1
elif R.left < 0:
R.left = 0
vx *= -1
if R.top < 0:
R.top = 0
vy *= -1
elif R.bottom >= H:
R.bottom = H
vy *= -1
# Affichage du rectangle
pygame.draw.rect(screen, RED, R)
# Affichage du carré
if R.colliderect(C):
pygame.draw.rect(screen, YELLOW, C)
else:
pygame.draw.rect(screen, BLUE, C)
pygame.display.flip()
clock.tick(60)
pygame.quit()
On souhaite écrire un programme qui fait tomber de la neige depuis le haut de l'écran. Un flocon de neige sera représenté par un objet de type


