Zelda Nes en python (défi final)

7. Enemy.py

Ce code définit une classe Enemy qui représente les ennemis dans le jeu. Voici une explication détaillée du code :

Imports :

python
import pygame from Settings import * from Entity import Entity from Support import * import os
    • pygame est la bibliothèque de jeu utilisée.
    • Settings, Entity, et Support sont des modules définis ailleurs dans le projet.
  • Changement du répertoire de travail :

    python
os.chdir(os.path.dirname(os.path.abspath(__file__)))
    • Comme dans les exemples précédents, cela change le répertoire de travail actuel pour le répertoire du script en cours d'exécution.
  • Classe Enemy héritant de Entity :

    python
class Enemy(Entity): def __init__(self, monster_name, pos, groups, obstacle_sprites, damage_player, trigger_death_particles, add_exp): # Initialisation générale super().__init__(groups) self.sprite_type = "enemy" # Configuration graphique self.import_graphics(monster_name) self.status = "idle" self.image = self.animations[self.status][self.frame_index] # Mouvement self.rect = self.image.get_rect(topleft=pos) self.hitbox = self.rect.inflate(0, -10) self.obstacle_sprites = obstacle_sprites # Statistiques self.monster_name = monster_name monster_info = monster_data[self.monster_name] # (D'autres initialisations de statistiques sont également présentes) # Interaction avec le joueur self.can_attack = True self.attack_time = None # (D'autres initialisations liées au combat) # Timer d'invincibilité self.vulnerable = True self.hit_time = None # (D'autres initialisations liées à l'invincibilité) # Sons self.death_sound = pygame.mixer.Sound("../Audio/Death.wav") self.hit_sound = pygame.mixer.Sound("../Audio/Hit.wav") self.attack_sound = pygame.mixer.Sound(monster_info["attack_sound"]) # (D'autres initialisations de sons)
    • La classe Enemy hérite de la classe Entity (qui pourrait être une classe de base pour d'autres types d'entités dans le jeu).
    • Le constructeur initialise diverses propriétés liées aux graphismes, au mouvement, aux statistiques, à l'interaction avec le joueur, aux timers, et aux sons.

Méthodes spécifiques à Enemy :

    • import_graphics(self, name): Importe les animations de l'ennemi à partir d'un répertoire spécifié.
    • get_player_distance_direction(self, player): Calcule la distance et la direction entre l'ennemi et le joueur.
    • get_status(self, player): Détermine l'état actuel de l'ennemi en fonction de la distance par rapport au joueur.
    • actions(self, player): Définit les actions à effectuer en fonction de l'état de l'ennemi.
    • animate(self): Anime l'ennemi en fonction de son état actuel.
    • cooldowns(self): Gère les temps de recharge pour les attaques et l'invincibilité.
    • get_damage(self, player, attack_type): Inflige des dégâts à l'ennemi en fonction du type d'attaque.
    • check_death(self): Vérifie si l'ennemi est mort et effectue des actions en conséquence.
    • hit_reaction(self): Gère la réaction de l'ennemi lorsqu'il est touché.
    • update(self): Met à jour l'état de l'ennemi (mouvement, animation, cooldowns, etc.).
    • enemy_update(self, player): Met à jour l'état spécifique à l'ennemi en fonction du joueur.

La classe Enemy encapsule la logique liée aux ennemis du jeu, notamment leur apparence, leur mouvement, leurs statistiques, leurs interactions avec le joueur, etc. Elle utilise également des fichiers audio pour les sons associés aux actions de l'ennemi.