Pokémon Eclipse est un jeu Pokémon 2D développé en Python avec la bibliothèque Pygame, inspiré des versions classiques de la Game Boy Advance. Il propose un système de combat au tour par tour fidèle aux jeux originaux, avec gestion complète des attaques, effets de statut, objets, XP, montée de niveau et évolutions. Le joueur peut capturer des Pokémon, gérer son équipe et utiliser des objets pendant les combats via une interface rétro fidèle à l’ergonomie GBA. Les données des Pokémon, attaques et objets sont extraites et traduites automatiquement depuis la PokéAPI, puis stockées en JSON pour une utilisation hors ligne. L’interface graphique est enrichie d’animations fluides à 60 FPS, avec des sprites dynamiques en GIF et des effets de capture ou de lancement de Poké Ball. Le jeu utilise une architecture modulaire organisée par dossiers (core, battle, ui, data…), facilitant l’évolution et la maintenance du code. Enfin, une barre de messages différés permet de gérer l’enchaé«nement des événements de combat avec un système d’animations textuelles immersif.
Compétences associées :Gérer le patrimoine informatiqueRépondre aux incidents et aux demandes d’assistance et d’évolutionOrganiser son développement professionnel
Système de gestion de la base de données Pokémon
Le système de base de données de Pokémon Eclipse centralise l'ensemble des informations du jeu en modélisant chaque entité essentielle du gameplay. Il intègre les données des Pokémon, des attaques, des objets, des types, ainsi que la gestion des Pokémon capturés, de l’équipe du joueur et de ses inventaires. Chaque Pokémon possède des statistiques de base, un ensemble d’attaques apprises par niveau, une évolution, des types, et des sprites animés. Les attaques ont des caractéristiques détaillées telles que puissance, précision, effets secondaires et priorités. Le joueur peut capturer des Pokémon, leur donner des objets, gérer leur statut et les déplacer entre l’équipe active, les boé«tes ou l’inventaire. Ce système relationnel assure une cohérence parfaite entre les mécaniques de jeu et les données stockées, facilitant l’extension et la maintenance du jeu.
Structuration relationnelle des entités de jeu
Lorsqu’un Pokémon est rencontré et capturé, une entrée est ajoutée dans la table captured_pokemon, référencée depuis la table pokemon. Ce Pokémon capturé peut ensuite être intégré à l’équipe (player_party) ou déplacé vers une boé«te (player_box). Chaque Pokémon capturé possède ses propres stats (XP, IVs, PV, niveau, statut, objet tenu). Les attaques disponibles sont liées via la table pokemon_moves et les objets du joueur sont gérés dans player_inventory.
Modèle relationnel complet de la base de données du jeu Pokémon Eclipse, illustrant les liens logiques entre les entités principales (Pokémon, attaques, objets, équipe, boé«te).
Système de capture des Pokémon
Le système de capture de Pokémon Eclipse permet au joueur de tenter de capturer un Pokémon sauvage durant un combat. Ce mécanisme repose à la fois sur des probabilités calculées (HP, statut, type de Ball) et sur une animation complète du lancer de Poké Ball. Le processus suit une logique fluide, depuis la sélection de la Ball jusqu'à la vérification de réussite et l’intégration dans l’équipe. Le jeu gère les cas d’échec, les équipes pleines, ainsi que l'ajout direct du Pokémon capturé avec un message animé. Ce système améliore l'immersion gróce à une animation réaliste (vol, secousses, décision finale) et s’intègre naturellement au déroulement du combat. L’implémentation repose sur une série de classes bien séparées (BallThrow, BallAnimation, effet visuel, résolution logique).
Déclenchement de la capture
Lorsque le joueur sélectionne une Poké Ball, la fonction throw_ball est appelée. Elle prépare les données du Pokémon adverse (PV, statut), appelle la fonction attempt_capture() avec ces paramètres, et stocke le résultat (success, shakes, messages...). Elle initialise aussi une animation visuelle BallAnimation et passe l’état du combat à "throwing_ball".
Ce screenshot montre l’appel à la fonction throw_ball, qui initialise la tentative de capture. On y voit le stockage du résultat de capture (attempt_capture) et l'assignation de l'animation BallAnimation.
On voit ici l’import et la création de l’objet BallAnimation, avec la position de départ et le type de Ball sélectionné. Cela prépare l’animation de vol.
Animation de la phase de vol de la Poké Ball
La classe BallThrow gère le mouvement parabolique de la Ball du joueur vers le Pokémon. Cette phase utilise un système de courbe avec gestion du pic de hauteur, de la position cible, et du temps écoulé pour fluidifier l’animation. Dès que le mouvement de vol est terminé, la phase passe à l’animation de secousses.
Affiche la classe BallThrow qui contré┤le l'animation du lancer de Ball avec sa trajectoire courbe. Elle gère les phases throw, shake, wait, done.
Animation des secousses et décision de la capture
Selon le nombre de "shakes" renvoyés par la fonction de capture, la Poké Ball effectue des secousses gauche-droite. Une fois les secousses terminées ou la tentative échouée, le système détermine si la capture a réussi. Un petit délai est introduit avant de révéler visuellement l’état de la capture (capture ou libération).
Ce média montre la méthode _update_shake_phase, oé╣ la Poké Ball effectue des secousses successives en fonction du nombre d’essais (shakes) renvoyé par la fonction de capture.
On observe ici la phase wait, avec un petit délai avant de révéler si la capture a réussi (captured = True) ou non.
Résolution des effets et messages post-capture
Une fois l’animation terminée, la méthode resolve_capture_result() applique les effets : affichage des messages, ajout du Pokémon à l’équipe si possible, ou message d’échec si l’équipe est pleine. Si la capture a réussi, la scène bascule en mode victoire et le Pokémon adverse disparaé«t de l'écran.
Affiche l’appel à resolve_capture_result, oé╣ le jeu traite les messages à afficher et prépare l'effet visuel (disparition du sprite ennemi).
Cette image montre la gestion de l’ajout à l’équipe via run_manager.add_pokemon_to_team, ou l’affichage d’un message si l’équipe est pleine.
Rendu final en jeu
Le joueur visualise le rendu complet de la scène : animation de capture réussie ou échouée, ajout du Pokémon à l’équipe, ou message bloquant si l’équipe est pleine. L’ensemble est synchronisé avec la musique et les effets sonores, et la scène revient ensuite au menu de commande du combat.
La vidéo montre le rendu en jeu de toute la scène de capture : vol, secousses, succès/échec, et retour au menu de combat ou fin du match.
Montée de niveau et évolution des Pokémon
Le système de montée de niveau de Pokémon Eclipse est déclenché automatiquement à la fin d’un combat gagné. Chaque Pokémon de l’équipe reéºoit un gain d’expérience basé sur l’ennemi vaincu, ce qui peut provoquer une montée de niveau. Lorsqu’un Pokémon monte de niveau, ses statistiques sont recalculées et, si les conditions sont réunies, une évolution est déclenchée via la base d’évolution du jeu. L’animation d’évolution est intégrée à la file d’attente des messages pour garder le rythme immersif. Le Pokémon évolué reéºoit alors ses nouvelles statistiques, son sprite, ses types et ses attaques. L’ensemble du processus est géré en backend de manière fluide et invisible pour le joueur, tout en offrant un rendu fidèle aux jeux originaux.
Calcul de l’expérience gagnée et attribution
Dans la fonction handle_victory, le jeu calcule l’XP gagnée en fonction du niveau de l’ennemi et de l’XP de base. Cette valeur est ensuite distribuée à chaque Pokémon de l’équipe via une boucle, ce qui permet d’accumuler de l’XP même pour les Pokémon non actifs. Ce traitement est central pour déclencher la vérification de montée de niveau à l’étape suivante.
Affiche le début de la fonction handle_victory, oé╣ est calculée l'expérience gagnée (xp_gain) en fonction de l'ennemi vaincu et du niveau de l'allié.
On voit la boucle for qui parcourt l’équipe du joueur pour ajouter l’XP à chaque Pokémon via poke["xp"].
Ce média montre la fonction imbriquée process_post_xp, qui appelle ensuite check_level_up() pour chaque Pokémon après attribution de l’XP.
On y voit l’ajout de messages dans la file d’attente (self.message_queue.append(...)) qui informe le joueur des gains d’XP et déclenche le traitement post-levelling.
Vérification de la montée de niveau
La fonction check_level_up vérifie si la quantité d’XP actuelle dépasse le seuil nécessaire pour passer au niveau suivant. Si c’est le cas, le niveau est incrémenté, les statistiques sont recalculées en fonction des bases, et un message est affiché pour notifier la montée. C’est également ici que l’évolution est déclenchée si le niveau atteint correspond à une condition d’évolution.
Affiche la boucle while dans check_level_up, qui teste si le Pokémon peut monter de niveau. S'il le peut, son niveau augmente et un message est généré.
Montre le recalcul des stats dans base_stats, oé╣ chaque statistique augmente selon une règle fixe (ici : +base/50), avec mise à jour des PV actuels.
Détection de l’évolution (niveau atteint)
La fonction check_evolution parcourt l’arbre d’évolution du Pokémon et détermine si un niveau minimum est atteint. Si une évolution est possible, les données du Pokémon sont remplacées par celles de son évolution : ID, nom, statistiques, types, sprites, attaques. Cela se fait de manière automatique sans interrompre le flot du combat.
Affiche la fonction check_evolution, qui lit l’arbre d’évolution et vérifie si le niveau requis est atteint pour changer de forme.
Mise à jour des données du Pokémon évolué
Une fois l’évolution validée, le système met à jour l’état interne du Pokémon dans l’équipe : nouvelles stats, nouveau sprite et recalcul des PV. Si le Pokémon évolué est celui actuellement en combat, ses graphismes sont rechargés dynamiquement. Un message indique l’évolution et la transition se fait de manière fluide pour le joueur.
On y voit l’appel à p.update(...) dans handle_victory, qui remplace les données du Pokémon par celles de son évolution : ID, nom, stats, types, attaques, sprites.
Montre la mise à jour visuelle du Pokémon si c’est le starter actif, en rechargeant les sprites et en mettant à jour les PV max et actuels.
Rendu de la montée de niveau et de l’évolution
En jeu, le joueur assiste à une transition textuelle qui annonce la montée de niveau et l’évolution du Pokémon. Bien que l’évolution ne soit pas encore animée visuellement, le changement de sprite et de stats est immédiatement visible. Le jeu retourne ensuite à l’état post-combat avec éventuel choix d’objet.
Le joueur voit les messages s’afficher : gain d’XP, montée de niveau, et éventuelle évolution. Le sprite change immédiatement à l’écran et la transition se fait sans coupure.