Projet - PokéNSI (Partie 1) 🎮
Le but de ce projet est de créer un jeu inspiré de Pokémon en utilisant Python. Dans cette première partie, nous allons nous concentrer sur la création du Pokédex et la mise en place du système de combat.
Le Pokédex 📱
Le Pokédex est une base de données qui contient tous les Pokémon du jeu. Chaque Pokémon possède les caractéristiques suivantes :
- nom (chaîne de caractères) 📝
- hp (points de vie) ❤️
- atq (points d'attaque) ⚔️
- def (points de défense) 🛡️
- attaques (liste des attaques disponibles) 💥
- evolution (nom du Pokémon évolué) ✨
- niveau_evolution (niveau requis pour évoluer) 📈
- niveau (niveau actuel du Pokémon) 📊
- xp (points d'expérience) ⭐
Création du Pokédex 🛠️
Création du Pokédex
Créer une liste vide pokedex
qui contiendra tous les Pokémon du jeu.
Remplissage du Pokédex
On dispose de la fonction remplir_pokedex
suivante. Elle permet de récupérer toutes les informations des pokemons pour en faire une liste de dictionnaires.
def remplir_pokedex(filename:str)->list:
pokedex = []
with open(filename,'r') as f:
reader = csv.DictReader(f)
for row in reader:
if row["nom"] != '' or pokemon_dans_pokedex(row["nom"]) == None:
pokedex.append({"nom":row["nom"],"hp":int(row["hp"]),
"atq":int(row["atq"]),"def":int(row["def"]),"attaques":row["attaques"].split(";"),
"evolution":row["evolution"],"niveau_evolution":int(row["niveau_evolution"]),"niveau":int(row["niveau"]), "xp":int(row["xp"])})
return pokedex
Vous utiliserez le fichier csv suivant : pokedex.csv.
Vous retrouverez comment importer un fichier csv
dans le cours suivant : cours sur le CSV
Créer un Pokemon 🔍
Créer la fonction creer_pokemon
qui prend en paramètre un nom de Pokémon (str) et renvoie le dictionnaire correspondant au Pokémon s'il existe dans le pokédex, None sinon.
Test du Pokédex ✅
Tester vos fonctions de création du Pokédex :
1. Créer le Pokédex vide
2. Remplir le Pokédex avec le fichier CSV fourni
3. Afficher tous les Pokémon du Pokédex pour vérifier leur importation
4. Tester la fonction pokemon_dans_pokedex
avec "Pikachu" puis avec "Mewtwo"
Le système de combat ⚔️
Les attaques 💥
Dictionnaire d'attaques
L'ensemble des attaques des pokemons est disponible dans le fichier CSV suivant Attaques des pokemons. Le bloc de code suivant permet de créer le dictionnaire des attaques à l'instar des pokemon ci dessus:
Gestion des dégâts 💢
Lors d'un combat, un pokemon doit en attaquer un autre avec une attaque. Cette attaque retire des points de vie au pokemon et les dégats sont calculés suivant la formule ci-après :
Avec :
- N : Niveau du Pokémon attaquant 📊
- Atq : L'attaque du pokemon attaquant ⚔️
- Deg : Les dégats de base de l'attaque reçue 💥
- Def : La défense du pokémon défenseur 🛡️
Gestion des points de vie ❤️
Créer la fonction retirer_hp
qui prend en paramètre un Pokémon et un malus, et retire ces points de vie au Pokémon si les dégats est positif, c'est-à-dire si le pokemon defenseur réussit à tanker
les dégats.
Système d'attaque ⚔️
Créer la fonction attaquer
qui prend en paramètre un Pokémon attaquant, un Pokémon défenseur et une attaque.
Cette fonction doit :
1. Récupérer les dégâts de base de l'attaque
2. Calculer les dégâts finaux selon la formule précédente
3. Retirer les points de vie au défenseur
Test d'une attaque ⚡
- Créer un Pikachu niveau 1.
- Créer un Bulbizarre niveau 1.
- Faire attaquer le Bulbizarre par le Pikachu grâce à son attaque
Tonnerre
. - Afficher les point de vie du Bulbizarre pour vérifier le bon fonctionnement.
Interface de combat 🎮
Affichage des attaques 📝
Créer la fonction afficher_attaques
qui prend en paramètre un Pokémon et affiche la liste numérotée de ses attaques disponibles.
Choix d'attaque 🎯
Créer la fonction choisir_attaque
qui prend en paramètre un Pokémon et un type de joueur ("Joueur" ou "Ordi") et renvoie l'attaque choisie.
- Pour le joueur humain : afficher les attaques et demander un choix (1,2,3 ou 4) suivant le nombre d'attaques disponibles
- Pour l'ordinateur : choisir une attaque aléatoirement
Système d'expérience 📈
Augmentation des statistiques 💪
Créer la fonction augmenter_stats
qui prend en paramètre un Pokémon et augmente ses statistiques selon les formules :
- hp = hp + (1/50 * hp * niveau)
- atq = atq + (1/50 * atq * niveau)
- def = def + (1/50 * def * niveau)
Système d'évolution ✨
Créer la fonction evolution
qui prend en paramètre un Pokemon et le fait évoluer si son niveau actuel est supérieur au niveau requis pour évoluer.
Cette fonction demande à l'utilisateur s'il veut faire évoluer son pokemon via un choix (input
).
- Si le joueur indique
Oui
, alors cette fonction devra modifier le nom, l'attaque, la défense, le niveau pour sa prochaine évolution et le nom de son évolution - Si le joueur indique
Non
, alors il ne se passe rien
Evoluer un pokemon 🤔
Il existe de nombreuses raisons de ne pas faire évoluer un pokemon. Certains apprennent des attaques plus rapidement que leur version évoluée. D'autres comme Ningale, s'il atteint le 20, il évoluera en Munja mais si le joueur a un slot de libre dans son équipe, il obtiendra en plus le pokemon Munjask.
Un pokemon peut monter de niveau si et seulement si :
\(\texttt{Experience} = 0.8*(\texttt{Niveau} +5)^3\)
Gestion des niveaux 📊
Créer la fonction niveau_superieur
qui prend en paramètre un Pokemon et augmente son niveau.
Cette fonction a un rôle clef dans l'évolution du jeu car elle permet de faire monter les niveaux d'un pokemon, de modifier ses stats comme il monte de niveau et de le faire évoluer.
Cette fonction devra utiliser les 2 précédentes :
- Si le pokemon peut évoluer, alors on propose au joueur de le faire évoluer avec la fonction
evolution
- Augmente les stats du pokemon avec la fonction
augmenter_stats
Test du système d'expérience 🌟
Tester le gain d'expérience et la montée de niveau :
1. Créer un Pikachu niveau 1.
2. Attribuer 300 xp au Pikachu.
3. Utiliser la fonction niveau_superieur
et vérifier qu'il passe bien niveau 2.
4. Mettre Pikachu niveau 25.
5. Utiliser la fonction evolution
et vérifier, en indiquant le bon choix, qu'il devient bien un Raichu et que ses stats sont bien actualisées en fonction de son niveau.
Combat complet 🏆
Système de combat contre un Pokémon sauvage 🆚
Créer la fonction combat_pokemon_sauvage
qui prend en paramètre une équipe de Pokémon et un Pokémon sauvage.
La fonction doit gérer un combat complet selon les étapes suivantes:
-
Initialisation 🎬
- Sélectionner le premier Pokémon de l'équipe
- Sauvegarder les HP initiaux du Pokémon sauvage
-
Boucle de combat ⚔️
- Afficher l'état du combat (HP des deux Pokémon)
- Tour du joueur:
- Choisir une attaque
- Appliquer les dégâts au Pokémon sauvage
- Vérifier si le Pokémon sauvage est K.O.
- Tour du Pokémon sauvage:
- Choisir une attaque aléatoire
- Appliquer les dégâts au Pokémon du joueur
- Vérifier si le Pokémon du joueur est K.O.
-
Gestion des K.O. 💫
- Si le Pokémon sauvage est K.O.:
- Attribuer l'expérience au Pokémon vainqueur
- Vérifier la montée de niveau
- Terminer le combat (Victoire)
- Si le Pokémon du joueur est K.O.:
- Passer au Pokémon suivant dans l'équipe
- Si plus de Pokémon disponible, terminer le combat (Défaite)
- Sinon, continuer le combat avec le nouveau Pokémon
- Si le Pokémon sauvage est K.O.:
La fonction doit renvoyer:
- True
si le joueur gagne 🏆
- False
si tous les Pokémon de l'équipe sont K.O. 💔
Test d'un combat contre un Pokémon sauvage 🎯
Réaliser un combat entre votre équipe et un Pokémon sauvage: 1. Créer une équipe avec au moins 2 Pokémon (par exemple: Pikachu niveau 5 et Bulbizarre niveau 5) 2. Créer un Pokémon sauvage (par exemple: Salamèche niveau 5) 3. Lancer le combat et observer: - L'affichage des états de combat - Le système de changement de Pokémon en cas de K.O. - Le gain d'expérience en cas de victoire