En repartant des exercices précédents nous allons détecter les collisions avec plusieurs carrés.
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()