Bienvenue dans le monde des Pokémon, jeune dresseur !
Je suis le Professeur Chen. Les gens m'appellent le dingo des Pokémon !
Ce monde est peuplé de créatures appelées Pokémon. Pour certaines personnes, les Pokémon sont des animaux de compagnie. Pour d'autres, comme moi, ils sont des objets d'étude...
🎯 Fonctionnalités • 📦 Installation • 🎮 Gameplay • 🏗️ Architecture • 🐛 Dépannage
POOKEMON est un jeu de combat Pokémon développé en Python avec une architecture Programmation Orientée Objet (POO) robuste. Ce projet éducatif met en pratique les concepts avancés de la POO tout en offrant une expérience de jeu authentique inspirée des classiques Pokémon Rouge/Bleu.
- Combat au tour par tour avec phases joueur/IA
- Système de types complet (Feu 🔥, Eau 💧, Plante 🌿, Électrik ⚡, etc.)
- Multiplicateurs de dégâts selon les forces/faiblesses de types
- Actions variées : Attaque, Soin, Changement de Pokémon, Capture
- IA adaptative qui soigne son Pokémon quand ses PV sont bas
- Équipe de 6 Pokémon maximum avec système de positions
- Changement stratégique en plein combat
- Statistiques évolutives : HP, Attaque, Défense, Vitesse
- Système d'évolution au niveau requis avec choix multiples
- Pokémon Shiny ultra-rares (1/200 de chance !)
- Système d'XP avec gains de niveau
- Stats dynamiques qui augmentent à chaque niveau
- Évolutions débloquables selon le niveau atteint
- Historique de combat : Victoires et défaites trackées
- Application web Flask avec interface responsive
- Sprites animés pour chaque Pokémon (normaux et chromatiques)
- Authentification sécurisée avec mots de passe hashés
- Sessions persistantes pour sauvegarder la progression
- Flash messages informatifs pour chaque action
- Pokémon sauvages aléatoires pour des combats variés
- Capture système avec taux de succès de 30%
- Soin intelligent : 30% de récupération si < 50% HP, sinon 10%
- Centre Pokémon pour soigner son équipe
- Gestion de profil : modifier username, email, mot de passe
Avant de commencer ton aventure, assure-toi d'avoir ces outils installés :
| Outil | Version Minimale | Commande de Vérification |
|---|---|---|
| Python | 3.7+ | python --version |
| pip | 20.0+ | pip --version |
| MySQL | 5.7+ ou MariaDB 10.2+ | mysql --version |
| Git | 2.0+ | git --version |
Le projet utilise les packages suivants (voir requirements.txt) :
Flask==3.1.0- Framework webPyMySQL==1.1.1- Driver MySQL pour Pythonpython-dotenv==1.0.1- Gestion des variables d'environnementWerkzeug==3.1.3- Utilitaires WSGI et sécuritécryptography==44.0.0- Chiffrementbeautifulsoup4==4.12.3- Parsing HTML
git clone https://github.com/FahZohh/POOKEMON.git
cd POOKEMONUn bon dresseur isole ses expériences ! Crée un environnement virtuel :
Sur Windows :
python -m venv venv
venv\Scripts\activateSur macOS/Linux :
python3 -m venv venv
source venv/bin/activate✅ Tu verras (venv) apparaître dans ton terminal !
pip install -r requirements.txtOption A - Depuis le terminal :
mysql -u root -p < db.sqlOption B - Depuis MySQL Workbench/phpMyAdmin :
- Ouvre ton client MySQL
- Créez une nouvelle requête SQL
- Copie le contenu de
db.sql - Exécute le script
Cela va créer :
- Une base de données
pokemondb - Les tables :
player,pokemon,sprites,evolution,team,team_pokemon
Crée un fichier .env à la racine du projet :
# Configuration MySQL
MYSQL_HOST=localhost
MYSQL_USER=root
MYSQL_PASSWORD=ton_mot_de_passe
MYSQL_DB=pokemondb
# Clé secrète Flask (génère une clé aléatoire sécurisée)
FLASK_SECRET_KEY=ta_cle_secrete_super_longue_et_aleatoire🔐 Génération d'une clé secrète Flask :
import secrets
print(secrets.token_hex(32))Le projet utilise une base SQLite (dbBrother/pokemon.db) qui contient tous les Pokémon. Tu dois migrer ces données vers MySQL :
scriptMigration.py avec tes identifiants MySQL :
mysqlConn = pymysql.connect(
**{
"host": "localhost",
"user": "root", # TON utilisateur MySQL
"password": "ton_mot_de_passe", # TON mot de passe MySQL
"database": "pokemondb",
}
)Ensuite, lance la migration :
python scriptMigration.pyCe script va :
- ✅ Transférer tous les Pokémon de SQLite vers MySQL
- ✅ Migrer les évolutions possibles
- ✅ Importer les sprites (normaux et chromatiques)
⏱️ Cela prend environ 1-2 minutes selon ta machine.
Démarre le serveur Flask :
python app.pyTu verras :
* Running on http://0.0.0.0:80
* Debug mode: off
Ouvre ton navigateur et va sur :
- Clique sur "S'inscrire"
- Choisis un nom d'utilisateur unique
- Entre une adresse email valide
- Crée un mot de passe sécurisé (12+ caractères, majuscules, minuscules, chiffres, symboles)
- Après inscription, tu dois créer une équipe
- Choisis parmi 3 Pokémon aléatoires proposés
- Ce sera ton premier compagnon !
| Action | Description | Détails |
|---|---|---|
| ⚔️ Attaquer | Inflige des dégâts | Multiplicateur selon les types |
| 💊 Soigner | Récupère des HP | 30% si < 50% HP, sinon 10% |
| 🔄 Changer | Switch de Pokémon | Stratégique selon les types |
| 🎯 Capturer | Tente de capturer | 30% de chance de succès |
- Le Pokémon le plus rapide attaque en premier
- Phase joueur : Choisis ton action
- Phase IA : L'adversaire riposte
- Répète jusqu'à KO d'un des deux Pokémon
- Ton Pokémon gagne de l'XP (basée sur le niveau de l'adversaire)
- +1 Victoire dans ton profil
- Possibilité d'évolution si niveau requis atteint
- Si tous tes Pokémon sont KO, retour au menu
- +1 Défaite dans ton profil
- Soigne tes Pokémon avant de recommencer !
Quand un Pokémon atteint le niveau requis :
- Un écran d'évolution s'affiche automatiquement
- Choisis vers quelle forme évoluer (certains ont plusieurs options)
- Ou refuse l'évolution pour garder la forme actuelle
- L'ancien Pokémon est libéré (retourne à l'état sauvage)
Dans le menu "Mes Pokémon" :
- Voir les stats détaillées de chaque Pokémon
- Soigner un Pokémon blessé (HP à 100%)
- Relâcher un Pokémon (libère une place)
- Changer l'ordre de ton équipe (détermine qui combat en premier)
Ce projet est un exemple d'architecture Programmation Orientée Objet bien structurée.
POOKEMON/
│
├── 📂 entity/ # Entités métier (Classes POO)
│ ├── pokemon.py # Classe Pokemon (HP, attaque, types, etc.)
│ ├── player.py # Classe Player (utilisateur du jeu)
│ ├── types.py # Enum Types + Tableau d'efficacité
│ └── customConnection.py # Wrapper de connexion MySQL
│
├── 📂 managers/ # Gestionnaires (Logique métier)
│ └── loggingManager.py # Configuration des logs
│
├── 📂 memory/ # Cache en mémoire
│ └── player.py # Gestion des joueurs en RAM
│
├── 📂 routes/ # Routes Flask (Endpoints)
│ ├── fight.py # Routes de combat (/battle/*)
│ ├── player.py # Routes joueur (/profil, /logout)
│ ├── userMenu.py # Menu utilisateur (/menu, /pokemons)
│ └── evolution.py # Routes d'évolution (/evolve)
│
├── 📂 templates/ # Templates HTML (Jinja2)
│ ├── home.html # Page d'accueil (login/register)
│ ├── battle.html # Interface de combat
│ ├── evolve.html # Écran d'évolution
│ └── player/ # Sous-dossier profil utilisateur
│ ├── userMenu.html
│ ├── profile.html
│ ├── viewPokemons.html
│ └── ...
│
├── 📂 static/ # Assets statiques
│ ├── css/ # Feuilles de style
│ ├── js/ # Scripts JavaScript
│ └── images/ # Sprites Pokémon
│
├── 📂 dbBrother/ # Base de données SQLite source
│ └── pokemon.db # Données Pokémon originales
│
├── app.py # Point d'entrée Flask
├── utils.py # Utilitaires généraux (DB, sessions, etc.)
├── pokeUtils.py # Utilitaires Pokémon (combats, captures, etc.)
├── exception.py # Exceptions personnalisées
├── db.sql # Schéma MySQL
├── scriptMigration.py # Migration SQLite → MySQL
├── requirements.txt # Dépendances Python
├── .env # Variables d'environnement (à créer)
└── README.md # Ce fichier !
Les classes encapsulent leurs données et comportements.
# entity/pokemon.py
class Pokemon:
def __init__(self, id, name, pa, maxHealth, speed, level, ...):
self.__id = id # Attributs privés
self.__name = name
self.__pa = pa
self.__currentHealth = maxHealth
# ...
def takeDamage(self, damage): # Méthode publique
"""Inflige des dégâts au Pokémon"""
self.__currentHealth = max(0, self.__currentHealth - damage)
def heal(self, amount):
"""Soigne le Pokémon"""
self.__currentHealth = min(self.__maxHealth, self.__currentHealth + amount)Les managers abstraient la complexité.
# pokeUtils.py
def executeTurn(attacker, victim, action, newPokemon=None):
"""
Abstraction complète d'un tour de combat.
Le code appelant n'a pas besoin de connaître la logique interne.
"""
if action == "attack":
coefficient = getCoefficient(attacker, victim)
damage = int(attacker.pa * coefficient)
victim.takeDamage(damage)
# ...
elif action == "heal":
# Logique de soin
# ...Chaque module a une responsabilité claire :
| Module | Responsabilité |
|---|---|
entity/ |
Modèles de données (Pokemon, Player, Types) |
routes/ |
Endpoints HTTP (réception des requêtes) |
utils.py |
Utilitaires généraux (DB, sessions, validation) |
pokeUtils.py |
Logique Pokémon (combats, captures, évolutions) |
memory/ |
Cache (optimisation des accès DB) |
managers/ |
Services (logging, configuration) |
# exception.py
class GlobalDatabaseException(Exception):
"""Erreur lors de l'accès à la base de données."""
class PlayerMemoryException(Exception):
"""Erreur lors de la gestion en mémoire des joueurs."""
# Utilisation dans le code
try:
with getDbConnection() as conn:
# ...
except GlobalDatabaseException as e:
logger.error(f"Database error: {e}")
flash("Une erreur est survenue.", "error")- Python 3.7+ - Langage principal
- Flask 3.1.0 - Framework web WSGI
- PyMySQL 1.1.1 - Driver MySQL pur Python
- Werkzeug 3.1.3 - Utilitaires WSGI + hash de mots de passe
- python-dotenv 1.0.1 - Gestion des variables d'environnement
- HTML5 - Structure sémantique
- CSS3 - Styles et animations
- JavaScript - Interactivité côté client
- Jinja2 - Moteur de templating Flask
- MySQL 8.0+ - Base de données relationnelle
- SQLite 3 - Base source pour la migration
- Werkzeug Security - Hash bcrypt pour les mots de passe
- Flask Sessions - Sessions côté serveur chiffrées
- Validation stricte - Email, mot de passe, inputs utilisateur
Cause : Les dépendances ne sont pas installées.
Solution :
# Active l'environnement virtuel
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
# Réinstalle les dépendances
pip install -r requirements.txtCause : Identifiants MySQL incorrects.
Solution : Vérifie ton fichier .env :
MYSQL_HOST=localhost
MYSQL_USER=ton_vrai_utilisateur
MYSQL_PASSWORD=ton_vrai_mot_de_passe
MYSQL_DB=pokemondbCause : Le port 80 est déjà utilisé.
Solution 1 - Tuer le processus :
# Linux/Mac
sudo lsof -ti:80 | xargs kill -9
# Windows
netstat -ano | findstr :80
taskkill /PID <PID> /FSolution 2 - Changer de port :
Modifie app.py :
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True) # Utilise le port 5000Puis accède à http://localhost:5000
Cause : La clé secrète Flask n'est pas définie.
Solution :
Ajoute dans ton .env :
FLASK_SECRET_KEY=ta_cle_secrete_super_longue_et_aleatoire_minimum_32_caracteresOu génère-en une :
import secrets
print(secrets.token_hex(32))Cause : La migration n'a pas été exécutée.
Solution :
- Vérifie que
dbBrother/pokemon.dbexiste - Relance la migration :
python scriptMigration.pyCause : Le mot de passe ne respecte pas les critères.
Solution : Ton mot de passe DOIT contenir :
- ✅ Au moins 12 caractères
- ✅ Au moins 1 majuscule
- ✅ Au moins 1 minuscule
- ✅ Au moins 1 chiffre
- ✅ Au moins 1 caractère spécial (!@#$%^&*, etc.)
Astuce : Utilise le bouton "Générer un mot de passe" sur la page d'inscription !
Cause : Le Pokémon n'a pas atteint le niveau requis.
Solution :
- Continue à combattre pour gagner de l'XP
- L'évolution se déclenchera automatiquement au bon niveau
- Tu peux refuser l'évolution si tu veux
Cause : Les URLs des sprites sont peut-être invalides.
Solution :
- Vérifie la table
spritesdans MySQL :
SELECT * FROM sprites LIMIT 5;- Les URLs doivent commencer par
https:// - Si nécessaire, re-migre les données
Ce projet est parfait pour apprendre :
- ✅ POO en Python - Classes, méthodes, encapsulation
- ✅ Flask - Routes, templates, sessions, blueprints
- ✅ SQL - Requêtes complexes, jointures, transactions
- ✅ Architecture logicielle - Séparation des responsabilités,
- ✅ Gestion d'erreurs - Try/except, exceptions personnalisées
- ✅ Logging - Traçabilité et débogage
Tu veux continuer le développement ? Voici des pistes :
- Arènes et Champions - Combats contre des boss
- Système de badges - Collection après chaque victoire
- Pokédex - Enregistrement automatique des Pokémon rencontrés
- Talents - Capacités spéciales par Pokémon
- Objets - Potions, Balls variées, Pierres d'évolution
- Météo - Affecte les combats (pluie booste Eau, etc.)
- Chat en ligne - Discuter avec d'autres joueurs
- API REST - Endpoints JSON pour un client mobile
- WebSockets - Combat en temps réel
- Tests unitaires - PyTest pour la couverture de code
- Docker - Containerisation de l'application
- CI/CD - GitHub Actions pour le déploiement auto
- Multijoueur - Combat entre joueurs réels
- Échanges - Trading de Pokémon
- Classement - Leaderboard des meilleurs dresseurs
- Notifications - Emails ou push pour les événements
Tu veux améliorer le jeu ? Super !
- Fork le projet sur GitHub
- Crée une branche pour ta fonctionnalité :
git checkout -b feature/SystemeDeCapacites
- Commit tes changements :
git commit -m "✨ Ajout du système de capacités spéciales" - Push vers ta branche :
git push origin feature/SystemeDeCapacites
- Ouvre une Pull Request avec une description détaillée
Utilise les préfixes suivants :
- ✨
feat:- Nouvelle fonctionnalité - 🐛
fix:- Correction de bug - 📝
docs:- Documentation - 💄
style:- CSS/UI - ♻️
refactor:- Refactoring de code - ⚡️
perf:- Amélioration des performances - ✅
test:- Ajout de tests
- Données Pokémon : Base SQLite préexistante
- Inspiration : Pokémon Rouge/Bleu (Game Boy, 1996)
- Framework : Flask
- Sprites : Pokémon officiel © Game Freak/Nintendo
"Félicitations, jeune dresseur ! Tu as installé ton propre jeu Pokémon et tu es maintenant prêt à partir à l'aventure !"
"Mais souviens-toi : être un dresseur Pokémon ne se résume pas à gagner des combats. C'est créer des liens avec tes Pokémon, comprendre leurs forces et faiblesses, et grandir ensemble."
"Ce projet t'aidera aussi à devenir un meilleur programmeur. La POO, c'est comme dresser des Pokémon : il faut de la pratique, de la patience, et de la passion pour ce que tu fais !"
"Tu as désormais toutes les connaissances nécessaires pour :"
- Comprendre l'architecture d'une application web complète
- Maîtriser les concepts de la Programmation Orientée Objet
- Gérer une base de données relationnelle
- Sécuriser une application avec authentification
"Maintenant, va ! Le monde des Pokémon t'attend !"
⭐ Si ce projet t'a plu, donne-lui une étoile sur GitHub ! ⭐
🐛 Un bug ? Une idée ? Ouvre une issue !
💬 Des questions ? N'hésite pas à me contacter !
Bon courage, et n'oublie pas : Attrapez-les tous !.. enfin les 6 meilleurs
"Certaines personnes collectionnent des timbres. D'autres collectionnent des pièces de monnaie. Moi, je collectionne les connaissances sur les Pokémon !"
— Professeur Chen