Zelda Nes en python (défi final)
| Site: | Le labo numérique de M. MIGNOTTE – Cours, projets et ressources pour les élèves de seconde SNT et STI2D |
| Cours: | Chapitre 6 : Python |
| Livre: | Zelda Nes en python (défi final) |
| Imprimé par: | Visiteur anonyme |
| Date: | samedi 14 mars 2026, 07:00 |
1. Introduction
Vous allez réaliser un jeu zelda en python.
Voici l'arborescence du projet :
- zelda_python
- Audio
- Code
- Graphics
- Map
2. Main.py
Le premier fichier a réaliser dans le dossier "code".
Ce code Python utilise la bibliothèque Pygame.
Voici une explication de chaque partie du code vous avez à les reprendre et les compléter :
Imports :
import pygame, sys from Settings import * from Level import Level import os pygameest une bibliothèque populaire pour le développement de jeux en Python.sysest utilisé pour accéder à certaines fonctionnalités spécifiques du système.SettingsetLevelsont des modules définis ailleurs dans le projet.
Changement du répertoire de travail :
os.chdir(os.path.dirname(os.path.abspath(__file__))) -
- Cette ligne change le répertoire de travail actuel pour le répertoire du script en cours d'exécution. Cela est généralement fait pour faciliter l'importation de fichiers, en particulier des images ou d'autres ressources.
Classe Game :
class Game: def __init__(self): # Initialisation générale pygame.init() self.screen = pygame.display.set_mode((WIDTH, HEIGTH)) pygame.display.set_caption("Zelda with Python") pygame_icon = pygame.image.load("../Graphics/Test/Player.png") pygame.display.set_icon(pygame_icon) self.clock = pygame.time.Clock() self.level = Level() # Musique main_sound = pygame.mixer.Sound("../Audio/Main.ogg") main_sound.set_volume(0.5) main_sound.play(loops=-1) -
__init__est le constructeur de la classeGame.- Il initialise Pygame, configure la fenêtre du jeu, charge une icône, crée une horloge pour gérer le temps du jeu, et instancie un objet de la classe
Level. - Il charge également un fichier audio (Main.ogg) et le joue en boucle.
Méthode run :
def run(self): while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_m: self.level.toggle_menu() self.screen.fill(WATER_COLOR) self.level.run() pygame.display.update() self.clock.tick(FPS) -
- Cette méthode gère la boucle principale du jeu.
- Elle vérifie les événements Pygame, tels que la fermeture de la fenêtre ou l'appui sur la touche 'm' pour activer/désactiver le menu.
- Elle remplit l'écran avec une couleur d'eau définie (
WATER_COLOR), exécute la logique du niveau, met à jour l'affichage, puis attend un certain temps pour maintenir un taux de rafraîchissement constant (FPS).
Point d'entrée du programme :
if __name__ == "__main__": game = Game() game.run() - Le programme principal instancie la classe
Gameet exécute sa méthoderunlorsque le script est exécuté.
3. Settings.py
import os os: Utilisé pour effectuer des opérations liées au système d'exploitation, notamment le changement du répertoire de travail.
-
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.
-
Paramètres du jeu :
python
# Game setup WIDTH = 1280 HEIGHT = 720 FPS = 60 TILESIZE = 64 HITBOX_OFFSET = { "player": -26, "object": -40, "grass": -10, "invisible": 0 } -
WIDTHetHEIGHTdéfinissent la largeur et la hauteur de la fenêtre du jeu.FPSdéfinit le nombre d'images par seconde du jeu.TILESIZEdéfinit la taille d'une tuile dans le jeu.HITBOX_OFFSETest un dictionnaire définissant des décalages pour différentes types d'objets.
-
Paramètres de l'interface utilisateur (UI) :
python
# UI BAR_HEIGHT = 20 HEALTH_BAR_WIDTH = 200 ENERGY_BAR_WIDTH = 140 ITEM_BOX_SIZE = 80 UI_FONT = "../Graphics/Font/Joystix.ttf" UI_FONT_SIZE = 18 Différents paramètres liés à l'interface utilisateur tels que la hauteur des barres, la taille des boîtes d'objets, la police utilisée, etc.
-
Couleurs générales :
python
# General Colors WATER_COLOR = "#71ddee" UI_BG_COLOR = "#222222" UI_BORDER_COLOR = "#111111" TEXT_COLOR = "#EEEEEE" Définition de certaines couleurs utilisées dans le jeu.
-
Couleurs spécifiques à l'interface utilisateur :
python
# UI Colors HEALTH_COLOR = "Red" ENERGY_COLOR = "Blue" UI_BORDER_COLOR_ACTIVE = "Gold" Définition de couleurs spécifiques pour les barres de santé et d'énergie, ainsi que pour la bordure active.
-
Paramètres du menu d'amélioration :
python
# Upgrade Menu TEXT_COLOR_SELECTED = "#111111" BAR_COLOR = "#EEEEEE" BAR_COLOR_SELECTED = "#111111" UPGRADE_BG_COLOR_SELECTED = "#EEEEEE" Paramètres de couleurs pour le menu d'amélioration.
-
Données des armes :
python
# Weapons weapon_data = { "sword": {"cooldown": 100, "damage": 15, "graphic": "../Graphics/Weapons/Sword/Full.png"}, "lance": {"cooldown": 400, "damage": 30, "graphic": "../Graphics/Weapons/Lance/Full.png"}, "axe": {"cooldown": 300, "damage": 20, "graphic": "../Graphics/Weapons/Axe/Full.png"}, "rapier": {"cooldown": 50, "damage": 8, "graphic": "../Graphics/Weapons/Rapier/Full.png"}, "sai": {"cooldown": 80, "damage": 10, "graphic": "../Graphics/Weapons/Sai/Full.png"} } -
- Une collection de données pour différentes armes, spécifiant des informations telles que le temps de recharge, les dégâts, et l'image graphique associée.
-
Données de la magie :
python
# Magic magic_data = { "flame": {"strength": 5, "cost": 20, "graphic": "../Graphics/Particles/Flame/Fire.png"}, "heal": {"strength": 20, "cost": 10, "graphic": "../Graphics/Particles/Heal/Heal.png"} } -
- Une collection de données pour différents types de magie, spécifiant des informations telles que la force, le coût, et l'image graphique associée.
-
Données des ennemis :
# Enemies monster_data = { "squid": {"health": 100, "exp": 180, "damage": 20, "attack_type": "slash", "attack_sound": "../Audio/Attack/Slash.wav", "speed": 3, "resistance": 3, "attack_radius": 80, "notice_radius": 360}, "raccoon": {"health": 300, "exp": 300, "damage": 40, "attack_type": "claw", "attack_sound": "../Audio/Attack/Claw.wav", "speed": 2, "resistance": 3, "attack_radius": 120, "notice_radius": 400}, "spirit": {"health": 100, "exp": 200, "damage": 8, "attack_type": "thunder", "attack_sound": "../Audio/Attack/Fireball.wav", "speed": 4, "resistance": 3, "attack_radius": 60, "notice_radius": 350}, "bamboo": {"health": 70, "exp": 150, "damage": 6, "attack_type": "leaf_attack", "attack_sound": "../Audio/Attack/Slash.wav", "speed": 3, "resistance": 3, "attack_radius": 50, "notice_radius": 300} } - Une collection de données pour différents types d'ennemis, spécifiant des informations telles que la santé, l'expérience, les dégâts, etc.
Ces paramètres et données sont utilisés dans le jeu pour définir des caractéristiques telles que la taille de la fenêtre, les couleurs, les propriétés des objets, les informations sur les armes, la magie et les ennemis.
4. Level.py
import pygame from Settings import * from Tile import Tile from Player import Player from Debug import debug from Support import * from random import choice, randint from Weapon import Weapon from UI import UI from Enemy import Enemy from Particles import AnimationPlayer from Magic import MagicPlayer from Upgrade import Upgrade import os -
- Importe les modules nécessaires pour la création du niveau, y compris les classes de tuiles, de joueur, d'armes, d'ennemis, de particules, etc.
Changement du répertoire de travail :
os.chdir(os.path.dirname(os.path.abspath(__file__))) -
- Change le répertoire de travail actuel pour le répertoire du script en cours d'exécution.
Classe Level :
class Level: def __init__(self): # ... (voir explications ci-dessous) def create_map(self): # ... (voir explications ci-dessous) def create_attack(self): # ... (voir explications ci-dessous) def create_magic(self, style, strength, cost): # ... (voir explications ci-dessous) def destroy_attack(self): # ... (voir explications ci-dessous) def player_attack_logic(self): # ... (voir explications ci-dessous) def damage_player(self, amount, attack_type): # ... (voir explications ci-dessous) def trigger_death_particles(self, pos, particle_type): # ... (voir explications ci-dessous) def add_exp(self, amount): # ... (voir explications ci-dessous) def toggle_menu(self): # ... (voir explications ci-dessous) def run(self): # ... (voir explications ci-dessous) Initialisation de la classe Level :
def __init__(self): # Get the display surface self.display_surface = pygame.display.get_surface() self.game_paused = False # Sprite Group Setup self.visible_sprites = YSortCameraGroup() self.obstacle_sprites = pygame.sprite.Group() # Attack Sprites self.current_attack = None self.attack_sprites = pygame.sprite.Group() self.attackable_sprites = pygame.sprite.Group() # Sprite Setup self.create_map() # User Interface self.ui = UI() self.upgrade = Upgrade(self.player) # Particles self.animation_player = AnimationPlayer() self.magic_player = MagicPlayer(self.animation_player) -
- Initialise la classe
Levelavec des attributs tels quedisplay_surface, des groupes de sprites, des objets pour la gestion des attaques, de l'interface utilisateur, des particules, etc.
- Initialise la classe
Création de la carte (méthode create_map) :
def create_map(self): # ... (voir explications ci-dessous) -
- Cette méthode crée la carte du niveau en chargeant différentes dispositions (layouts) à partir de fichiers CSV. Elle crée des tuiles, des objets, des entités (joueur et ennemis) en fonction de ces dispositions.
Création d'une attaque (méthode create_attack) :
def create_attack(self): # ... (voir explications ci-dessous) -
- Cette méthode crée une nouvelle instance d'attaque (
Weapon) pour le joueur.
- Cette méthode crée une nouvelle instance d'attaque (
Création de la magie (méthode create_magic) :
def create_magic(self, style, strength, cost): # ... (voir explications ci-dessous) -
- Cette méthode crée de la magie pour le joueur en fonction du style spécifié.
Destruction de l'attaque actuelle (méthode destroy_attack) :
def destroy_attack(self): # ... (voir explications ci-dessous) -
- Cette méthode détruit l'attaque actuelle du joueur.
Logique d'attaque du joueur (méthode player_attack_logic) :
def player_attack_logic(self): # ... (voir explications ci-dessous) -
- Cette méthode gère la logique d'attaque du joueur, détectant les collisions avec des sprites attaquables et infligeant des dégâts.
Dommage au joueur (méthode damage_player) :
def damage_player(self, amount, attack_type): # ... (voir explications ci-dessous) -
- Cette méthode gère les dégâts infligés au joueur.
Déclenchement de particules de mort (méthode trigger_death_particles) :
def trigger_death_particles(self, pos, particle_type): # ... (voir explications ci-dessous) -
- Cette méthode déclenche la création de particules lorsqu'un ennemi meurt.
Ajout d'expérience (méthode add_exp) :
def add_exp(self, amount): # ... (voir explications ci-dessous) -
- Cette méthode ajoute de l'expérience au joueur.
Basculement du menu (méthode toggle_menu) :
def toggle_menu(self): # ... (voir explications ci-dessous) -
- Cette méthode bascule l'état du menu (en pause ou en cours d'exécution).
Exécution du niveau (méthode run) :
def run(self): # ... (voir explications ci-dessous) - Cette méthode exécute le niveau, met à jour les sprites visibles, gère la logique d'attaque du joueur et affiche l'interface utilisateur ou le menu d'amélioration en fonction de l'état du jeu.
5. UI.py
Ce code définit une classe UI qui gère l'interface utilisateur du jeu. Voici une explication détaillée du code :
-
Imports :
python
-
import pygame from Settings import * import ospygameest la bibliothèque de jeu utilisée.Settingsest un module défini ailleurs dans le projet, contenant des constantes et des configurations.
-
Changement du répertoire de travail :
python -
os.chdir(os.path.dirname(os.path.abspath(__file__)))- Comme dans le code précédent, cela change le répertoire de travail actuel pour le répertoire du script en cours d'exécution.
-
Classe
UI:python -
class UI: def __init__(self): # Initialisation générale self.display_surface = pygame.display.get_surface() self.font = pygame.font.Font(UI_FONT, UI_FONT_SIZE) # Configuration des barres self.health_bar_rect = pygame.Rect(10, 10, HEALTH_BAR_WIDTH, BAR_HEIGHT) self.energy_bar_rect = pygame.Rect(10, 34, ENERGY_BAR_WIDTH, BAR_HEIGHT) # Conversion du dictionnaire des armes self.weapon_graphics = [] for weapon in weapon_data.values(): path = weapon["graphic"] weapon_image = pygame.image.load(path).convert_alpha() self.weapon_graphics.append(weapon_image) # Conversion du dictionnaire des magies self.magic_graphics = [] for magic in magic_data.values(): magic_image = pygame.image.load(magic["graphic"]).convert_alpha() self.magic_graphics.append(magic_image)- Le constructeur initialise l'interface utilisateur avec des éléments tels que la surface d'affichage, la police, les rectangles des barres de santé et d'énergie, et les images des armes et des magies.
-
Méthodes de la classe
UI:show_bar(self, current, max_amount, bg_rect, color): Affiche une barre avec la couleur spécifiée.show_exp(self, exp): Affiche le niveau d'expérience du joueur.selection_box(self, left, top, has_switched): Affiche une boîte de sélection avec ou sans bordure active, en fonction de la valeur dehas_switched.weapon_overlay(self, weapon_index, has_switched): Affiche l'arme actuelle du joueur avec une boîte de sélection.magic_overlay(self, magic_index, has_switched): Affiche la magie actuelle du joueur avec une boîte de sélection.display(self, player): Affiche l'ensemble de l'interface utilisateur, y compris les barres de santé et d'énergie, l'expérience du joueur, l'arme et la magie actuelles.
-
Utilisation de la classe
UI:python
-
def display(self, player): self.show_bar(player.health, player.stats["health"], self.health_bar_rect, HEALTH_COLOR) self.show_bar(player.energy, player.stats["energy"], self.energy_bar_rect, ENERGY_COLOR) self.show_exp(player.exp) self.weapon_overlay(player.weapon_index, not player.can_switch_weapon) self.magic_overlay(player.magic_index, not player.can_switch_magic)- Cette méthode est probablement appelée ailleurs dans le code du jeu pour afficher l'interface utilisateur en fonction de l'état actuel du joueur.
En résumé, la classe UI gère l'affichage des éléments de l'interface utilisateur du jeu, tels que les barres de santé et d'énergie, l'expérience, les armes et les magies.
6. Debug.py
Ce code définit une fonction de débogage pour afficher des informations à l'écran dans un jeu Pygame. Voici une explication détaillée du code :
-
Imports :
python
-
import pygame import ospygameest la bibliothèque de jeu utilisée.osest utilisé pour effectuer des opérations liées au système d'exploitation, notamment le changement du répertoire de travail.
-
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.
-
Initialisation de Pygame et création d'une police :
python -
pygame.init() font = pygame.font.Font(None, 30)pygame.init()initialise la bibliothèque Pygame.pygame.font.Font(None, 30)crée un objet police Pygame avec une taille de police de 30 pixels. La police est utilisée pour rendre le texte lors du débogage.
-
Fonction de débogage (
debug) :python
-
def debug(info, y=10, x=10): display_surface = pygame.display.get_surface() debug_surf = font.render(str(info), True, "White") debug_rect = debug_surf.get_rect(topleft=(x, y)) pygame.draw.rect(display_surface, "Black", debug_rect) display_surface.blit(debug_surf, debug_rect)- La fonction
debugprend trois paramètres :info: L'information à afficher (peut être n'importe quel type, car elle est convertie en chaîne avecstr(info)).y: La position verticale du coin supérieur gauche du texte (par défaut à 10 pixels depuis le haut de la fenêtre).x: La position horizontale du coin supérieur gauche du texte (par défaut à 10 pixels depuis la gauche de la fenêtre).
- La fonction utilise la surface d'affichage actuelle de Pygame (
pygame.display.get_surface()). - Elle crée une surface de texte (
debug_surf) à partir de l'information fournie, avec une couleur blanche. - Un rectangle (
debug_rect) est créé pour délimiter la zone où le texte sera affiché, avec la position spécifiée par les paramètresxety. - Ce rectangle est rempli avec une couleur noire (
"Black") à l'aide depygame.draw.rect(). - Enfin, la surface de texte est blittée (copiée) sur la surface d'affichage à la position définie par le rectangle.
- La fonction
Cette fonction est utile pour afficher des informations de débogage à l'écran pendant le développement du jeu. Elle peut être appelée à différents endroits du code pour afficher des variables, des états ou d'autres informations importantes.
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 :
import pygame from Settings import * from Entity import Entity from Support import * import os -
pygameest la bibliothèque de jeu utilisée.Settings,Entity, etSupportsont 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
Enemyhéritant deEntity:python
8. Entity.py
Ce code définit la classe Entity, qui est une classe de base pour les entités du jeu. Voici une explication ligne par ligne :
Imports :
from cmath import rect import pygame from math import sin import os -
- Importe les modules nécessaires, y compris la bibliothèque Pygame pour la création de jeux.
Changement du répertoire de travail :
os.chdir(os.path.dirname(os.path.abspath(__file__))) -
- Change le répertoire de travail actuel pour le répertoire du script en cours d'exécution.
Classe Entity :
class Entity(pygame.sprite.Sprite): def __init__(self, groups): # ... (voir explications ci-dessous) def move(self, speed): # ... (voir explications ci-dessous) def collision(self, direction): # ... (voir explications ci-dessous) def wave_value(self): # ... (voir explications ci-dessous) Initialisation de la classe Entity :
def __init__(self, groups): super().__init__(groups) self.frame_index = 0 self.animation_speed = 0.15 self.direction = pygame.math.Vector2() -
- Initialise la classe
Entityavec des attributs tels que l'index du frame, la vitesse d'animation et la direction de l'entité.
- Initialise la classe
Méthode move :
def move(self, speed): if self.direction.magnitude() != 0: self.direction = self.direction.normalize() self.hitbox.x += self.direction.x * speed self.collision("Horizontal") self.hitbox.y += self.direction.y * speed self.collision("Vertical") self.rect.center = self.hitbox.center -
- Cette méthode permet à l'entité de se déplacer en fonction de sa direction et de la vitesse donnée. Elle vérifie également les collisions horizontales et verticales avec d'autres sprites.
Méthode collision :
def collision(self, direction): if direction == "Horizontal": # ... (voir explications ci-dessous) if direction == "Vertical": # ... (voir explications ci-dessous) -
- Cette méthode gère les collisions de l'entité avec les sprites environnants, ajustant sa position en fonction de la direction de déplacement.
Méthode wave_value :
def wave_value(self): value = sin(pygame.time.get_ticks()) if value >= 0: return 255 else: return 0 - Cette méthode renvoie une valeur basée sur une onde sinusoïdale, qui peut être utilisée pour des effets visuels comme le clignotement ou la variation de l'opacité.
9. Magic.py
import pygame from Settings import * from random import randint import os -
- Importe les modules nécessaires, y compris Pygame pour la création de jeux.
Changement du répertoire de travail :
os.chdir(os.path.dirname(os.path.abspath(__file__))) -
- Change le répertoire de travail actuel pour le répertoire du script en cours d'exécution.
Classe MagicPlayer :
class MagicPlayer: def __init__(self, animation_player): # ... (voir explications ci-dessous) def heal(self, player, strength, cost, groups): # ... (voir explications ci-dessous) def flame(self, player, cost, groups): # ... (voir explications ci-dessous) Initialisation de la classe MagicPlayer :
def __init__(self, animation_player): self.animation_player = animation_player self.sounds = { "heal": pygame.mixer.Sound("../Audio/Heal.wav"), "flame": pygame.mixer.Sound("../Audio/Fire.wav") } -
- Initialise la classe
MagicPlayeravec un lecteur d'animations et des effets sonores pour les sorts.
- Initialise la classe
Méthode heal :
def heal(self, player, strength, cost, groups): if player.energy >= cost: # ... (voir explications ci-dessous) -
- Cette méthode permet au joueur de lancer un sort de guérison s'il a suffisamment d'énergie. Elle restaure la santé du joueur, réduit son énergie et crée des particules d'effet visuel.
Méthode flame :
def flame(self, player, cost, groups): if player.energy >= cost: # ... (voir explications ci-dessous) - Cette méthode permet au joueur de lancer un sort de flamme s'il a suffisamment d'énergie. Elle réduit l'énergie du joueur et crée des particules de flamme qui se propagent dans la direction du joueur.
10. Particles.py
import pygame from Support import import_folder from random import choice import os -
- Importe les modules nécessaires, y compris Pygame pour la création de jeux, et les fonctions d'assistance.
-
Changement du répertoire de travail :
python
os.chdir(os.path.dirname(os.path.abspath(__file__))) -
- Change le répertoire de travail actuel pour le répertoire du script en cours d'exécution.
-
Classe
AnimationPlayer:python
class AnimationPlayer: def __init__(self): # ... (voir explications ci-dessous) def reflect_images(self, frames): # ... (voir explications ci-dessous) def create_grass_particles(self, pos, groups): # ... (voir explications ci-dessous) def create_particles(self, animation_type, pos, groups): # ... (voir explications ci-dessous) -
Initialisation de la classe
AnimationPlayer:python
def __init__(self): self.frames = { # ... (voir explications ci-dessous) } -
- Initialise la classe
AnimationPlayeravec un dictionnaire contenant différents types d'animations pour les particules.
- Initialise la classe
-
Méthode
reflect_images:python
def reflect_images(self, frames): new_frames = [] for frame in frames: flipped_frame = pygame.transform.flip(frame, True, False) new_frames.append(flipped_frame) return new_frames -
- Cette méthode retourne une liste de frames d'animation reflétées horizontalement.
-
Méthode
create_grass_particles:python
def create_grass_particles(self, pos, groups): animation_frames = choice(self.frames["leaf"]) ParticleEffect(pos, animation_frames, groups) -
- Cette méthode crée des particules d'herbe en choisissant aléatoirement parmi les animations de feuilles.
-
Méthode
create_particles:python
def create_particles(self, animation_type, pos, groups): animation_frames = self.frames[animation_type] ParticleEffect(pos, animation_frames, groups) -
- Cette méthode crée des particules en fonction du type d'animation spécifié et de la position donnée.
-
Classe
ParticleEffect:python
class ParticleEffect(pygame.sprite.Sprite): def __init__(self, pos, animation_frames, groups): # ... (voir explications ci-dessous) def animate(self): # ... (voir explications ci-dessous) def update(self): # ... (voir explications ci-dessous) -
Initialisation de la classe
ParticleEffect:python
def __init__(self, pos, animation_frames, groups): super().__init__(groups) self.sprite_type = "magic" self.frame_index = 0 self.animation_speed = 0.15 self.frames = animation_frames self.image = self.frames[self.frame_index] self.rect = self.image.get_rect(center = pos) -
- Initialise la classe
ParticleEffectavec différentes propriétés pour gérer l'animation des particules.
- Initialise la classe
Méthode animate :
def animate(self): self.frame_index += self.animation_speed if self.frame_index >= len(self.frames): self.kill() else: self.image = self.frames[int(self.frame_index)] - Cette méthode anime les particules en changeant les images à un certain rythme. Si l'animation est terminée, la particule est supprimée.
Méthode update :
def update(self): self.animate() - Cette méthode met à jour l'animation des particules lorsqu'elle est appelée dans la boucle principale du jeu.
11. Player.py
import pygame from Support import import_folder from Settings import * import os, sys -
- Importe les modules nécessaires pour le jeu, y compris Pygame pour la création de jeux, et les fonctions d'assistance.
Changement du répertoire de travail :
os.chdir(os.path.dirname(os.path.abspath(__file__))) -
- Change le répertoire de travail actuel pour le répertoire du script en cours d'exécution.
Définition de la classe Player :
class Player(Entity): def __init__(self, pos, groups, obstacle_sprites, create_attack, destroy_attack, create_magic): # ... (voir explications ci-dessous) def import_player_assets(self): # ... (voir explications ci-dessous) def input(self): # ... (voir explications ci-dessous) def get_status(self): # ... (voir explications ci-dessous) def cooldowns(self): # ... (voir explications ci-dessous) def animate(self): # ... (voir explications ci-dessous) def get_full_weapon_damage(self): # ... (voir explications ci-dessous) def get_full_magic_damage(self): # ... (voir explications ci-dessous) def get_value_by_index(self, index): # ... (voir explications ci-dessous) def player_death(self): # ... (voir explications ci-dessous) def get_cost_by_index(self, index): # ... (voir explications ci-dessous) def energy_recovery(self): # ... (voir explications ci-dessous) def update(self): # ... (voir explications ci-dessous) Initialisation de la classe Player :
def __init__(self, pos, groups, obstacle_sprites, create_attack, destroy_attack, create_magic): super().__init__(groups) # ... (voir explications ci-dessous) -
- Initialise la classe
Playeravec différentes propriétés, y compris l'image, la position, les attributs de mouvement, les statistiques du personnage, etc.
- Initialise la classe
Méthode import_player_assets :
def import_player_assets(self): character_path = "../Graphics/Player/" self.animations = { "up": [], "down": [], "left": [], "right": [], "right_idle": [], "left_idle": [], "up_idle": [], "down_idle":[], "right_attack": [], "left_attack": [], "up_attack": [], "down_attack": [] } for animation in self.animations.keys(): full_path = character_path + animation self.animations[animation] = import_folder(full_path) -
- Importe les animations du joueur à partir des dossiers correspondants.
Méthode input :
def input(self): # ... (voir explications ci-dessous) -
- Gère les entrées du joueur, y compris les mouvements, les attaques et les changements d'arme/magie.
Méthode get_status :
def get_status(self): # ... (voir explications ci-dessous) -
- Détermine le statut actuel du joueur en fonction de ses actions, comme les mouvements ou les attaques.
Méthode cooldowns :
def cooldowns(self): # ... (voir explications ci-dessous) -
- Gère les temps de recharge des attaques, des changements d'arme/magie et de l'invulnérabilité après avoir été touché.
Méthode animate :
def animate(self): # ... (voir explications ci-dessous) -
- Anime le joueur en changeant les images en fonction de son statut et de ses actions.
Méthodes get_full_weapon_damage et get_full_magic_damage :
def get_full_weapon_damage(self): # ... (voir explications ci-dessous) def get_full_magic_damage(self): # ... (voir explications ci-dessous) -
- Calcule les dégâts totaux du joueur en combinant les dégâts de base et ceux de l'arme ou de la magie utilisée.
Méthode get_value_by_index :
def get_value_by_index(self, index): # ... (voir explications ci-dessous) -
- Renvoie la valeur d'une statistique du joueur en fonction de son index.
Méthode player_death :
def player_death(self): # ... (voir explications ci-dessous) -
- Vérifie si le joueur est mort et quitte le jeu si c'est le cas.
Méthode get_cost_by_index :
def get_cost_by_index(self, index): # ... (voir explications ci-dessous) -
- Renvoie le coût d'une amélioration en fonction de son index.
Méthode energy_recovery :
def energy_recovery(self): # ... (voir explications ci-dessous)