Détecter plusieurs collisions avec des carrés

En repartant des exercices précédents nous allons détecter les collisions avec plusieurs carrés.

    3ttr
  • Découverte

Rappelle-toi, la méthode que nous utilisons pour détecter les collisions consiste à comparer les positions de deux rectangles entre eux:

if player_rect.colliderect(carre):
    # Collision détectée

Pour détecter les collisions avec tous les objets qu'on a créés, il suffit de passer chacun d'eux en revue à l'aide d'une boucle.

for carre in liste_carres:
    if player_rect.colliderect(carre):
        print("Le joueur touche une pièce !")

Ceci doit se faire bien sûr dans la boucle de jeu. Le code a été ajouté à la ligne 56 ci-dessous:

import pygame
import random
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("Collisions multiples")

# Joueur (image)
joueur_image = pygame.image.load("joueur.png")
player_x = 100
player_y = 100
vitesse = 5
player_largeur = joueur_image.get_width()
player_hauteur = joueur_image.get_height()

# Couleur et taille des pièces
couleur_carre = (255, 215, 0)  # doré
taille_carre = 20

# Génération de plusieurs carrés aléatoires
liste_carres = []
for _ in range(5):
    x = random.randint(0, largeur_ecran - taille_carre)
    y = random.randint(0, hauteur_ecran - taille_carre)
    rect_carre = pygame.Rect(x, y, taille_carre, taille_carre)
    liste_carres.append(rect_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

    # Déplacements
    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 à chaque boucle
    player_rect = pygame.Rect(player_x, player_y, player_largeur, player_hauteur)

    # Vérifier les collisions avec chaque carré
    for carre in liste_carres:
        if player_rect.colliderect(carre):
            print("Le joueur touche une pièce !")

    # Affichage
    screen.fill((0, 0, 0))  # fond noir

    # Dessiner les carrés
    for carre in liste_carres:
        pygame.draw.rect(screen, couleur_carre, carre)

    # Afficher le joueur
    screen.blit(joueur_image, (player_x, player_y))

    pygame.display.flip()
    clock.tick(60)

pygame.quit()
sys.exit()

Pour aller plus loin