Commencer par la détection de collision avec un seul carré est parfait débuter.
Maintenant que tu sais déplacer un personnage dans PyGame, voyons comment détecter si le joueur touche un objet à l’écran. On commence avec un seul objet : un carré doré qui représente une pièce à ramasser.
On dessine un carré jaune à l’écran avec :
carre_x = 300
carre_y = 200
taille_carre = 20
couleur_carre = (255, 215, 0)
# Pour détecter une collision, on crée un rectangle :
carre_rect = pygame.Rect(carre_x, carre_y, taille_carre, taille_carre)
Ce rectangle représente la zone où la pièce est dessinée. Dans l'exemple du code précédent, on s'est contenté de dessiner un carré. Ici pour pouvoir détecter La collision avec le personnage, il faut enregistrer ce carré dans une variable pour effectuer nos tests plus tard.
Même si le joueur est une image, on doit créer un rectangle invisible autour de lui avec :
player_rect = pygame.Rect(player_x, player_y, joueur_image.get_width(), joueur_image.get_height())
Ceci doit se faire dans la boucle. A chaque fois que le joueur a changé de position.
On utilise la méthode .colliderect() pour savoir si les deux rectangles se touchent :
if player_rect.colliderect(carre_rect):
print("Le joueur touche la pièce !")
Voici un petit jeu complet : un joueur (image) peut se déplacer et toucher un carré jaune. Quand c’est le cas, un message s’affiche dans la console.
import pygame
import sys
# Initialisation
pygame.init()
# Fenêtre
largeur_ecran = 800
hauteur_ecran = 600
screen = pygame.display.set_mode((largeur_ecran, hauteur_ecran))
pygame.display.set_caption("Collision simple")
# Joueur (image)
joueur_image = pygame.image.load("joueur.png")
player_x = 100
player_y = 100
vitesse = 5
# Taille du joueur (automatique via l’image)
player_largeur = joueur_image.get_width()
player_hauteur = joueur_image.get_height()
# Carré doré (pièce)
carre_x = 300
carre_y = 200
taille_carre = 20
couleur_carre = (255, 215, 0)
# Créer le rectangle du carré
carre_rect = pygame.Rect(carre_x, carre_y, taille_carre, taille_carre)
# Boucle de jeu
clock = pygame.time.Clock()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Gérer les touches
touches = pygame.key.get_pressed()
if touches[pygame.K_LEFT]:
player_x -= vitesse
if touches[pygame.K_RIGHT]:
player_x += vitesse
if touches[pygame.K_UP]:
player_y -= vitesse
if touches[pygame.K_DOWN]:
player_y += vitesse
# Créer le rectangle du joueur (à jour à chaque boucle)
player_rect = pygame.Rect(player_x, player_y, player_largeur, player_hauteur)
# Vérifier la collision
if player_rect.colliderect(carre_rect):
print("Le joueur touche la pièce !")
# Affichage
screen.fill((0, 0, 0)) # fond noir
# Dessiner le carré doré
pygame.draw.rect(screen, couleur_carre, carre_rect)
# Dessiner le joueur
screen.blit(joueur_image, (player_x, player_y))
pygame.display.flip()
clock.tick(60)
pygame.quit()
sys.exit()
pygame.Rect().colliderect() renvoie True si deux rectangles se touchentTu es prêt à passer à :