Tu vas créer un jeu Zelda interactif !

5. ÉTAPE 4 : Gérer les collisions (Game Over)

Objectif

L'élève apprend à détecter quand deux rectangles se touchent pour déclencher une action (ici, arrêter le jeu ou réinitialiser la position).

Question motivante

"À quoi servent des ennemis si on peut leur passer au travers sans danger ? Comment faire pour que le jeu sache quand le joueur est touché ?"

Concepts clés à maîtriser

  • La détection de collision (AABB) : Vérifier si les coordonnées d'un rectangle chevauchent celles d'un autre.

  • La structure conditionnelle if complexe : Utiliser des opérateurs logiques pour comparer les positions.

  • La gestion de l'état du jeu : Savoir quand stopper la boucle ou modifier une variable.


Code à compléter (Suite du TP)

Vous pouvez demander à vos élèves d'ajouter ce bloc juste après la section du déplacement des ennemis :

Python
    # ===== DÉTECTION DES COLLISIONS =====
    for enemy in enemies:
        # On vérifie si le rectangle du joueur touche le rectangle de l'ennemi
        # Formule simplifiée : (A.gauche < B.droite) et (A.droite > B.gauche) ...
        if (player['x'] < enemy['x'] + enemy['width'] and
            player['x'] + player['width'] > enemy['x'] and
            player['y'] < enemy['y'] + enemy['height'] and
            player['y'] + player['height'] > enemy['y']):
            
            print("TOUCHÉ ! Game Over")
            # Option 1 : Arrêter le jeu
            # running = False 
            
            # Option 2 : Réinitialiser le joueur au centre
            player['x'], player['y'] = 600, 400

Pour l'affichage (Fin de votre code précédent)

Voici ce qu'ils devaient compléter pour l'affichage des ennemis dans la boucle :

Python
    # Dessiner les ennemis
    for enemy in enemies:
        pygame.draw.rect(screen, RED, (enemy['x'], enemy['y'], enemy['width'], enemy['height']))

    # Mettre à jour l'écran
    pygame.display.flip()

pygame.quit()
sys.exit()