Exclusif Premium

Débloquez votre potentiel ! ✨

Cette session fait partie de notre programme Premium exclusif

+100h de formations exclusives
+180 exercices de code avancés
+100h de mentorats en réécriture
20 projets guidés pas à pas
Mentorats groupés hebdomadaires
Support individuel avec nos mentors

Prêt à passer au niveau supérieur ?

Découvrez tous les avantages Premium et transformez votre apprentissage dès aujourd'hui!

Inscris-toi

(c'est gratuit !)

Un compte est nécessaire pour participer aux discussions.

Créer un compte

Toutes les questions

Alan MATHIEU

29 juillet 2024

Résolue
2 réponses

Optimisation de code et questions

Et bien je me suis ECLATE à faire cet exo, je l'ai plié en moins d'une heure, je sens vraiment que je suis beaucoup plus à l'aise avec les if, elif, else et la boucle while. Je me suis amusé à rajouter ma petite touche perso (annonce de coup critique sur les coups du joueur, ennemi, critique sur la potion et empêcher le joueur d'aller au dessus de 50hp) ``` from random import randint #Variables principales HP_PLAYER = 50 HP_OPPONENT = 50 POTIONS = 3 ACTION_MENU = "Souhaitez-vous attaquer (1) ou vous soigner (2) ? " ACTION_CHOICE = ["1", "2"] #Boucle principale main_game = True while main_game == True: player_choice = "" while player_choice not in ACTION_CHOICE: player_choice = input(ACTION_MENU) if player_choice not in ACTION_CHOICE: print("Veuillez choisir une action valide.") if player_choice == "1": #boucle d'attaque joueur attack_player = randint(5, 10) HP_OPPONENT = HP_OPPONENT - attack_player if attack_player <= 9: #print critique si coup 10 print(f"""Vous infligez {attack_player} de dégats à l'ennemi. Il reste {HP_OPPONENT} points de vie à l'ennemi.""") else: print(f""" WOW ! Tu as infligé un coup critique ! Vous infligez {attack_player} de dégats à l'ennemi. Il reste {HP_OPPONENT} points de vie à l'ennemi.""") if HP_OPPONENT <= 0: # Condition pour gagner print("Vous avez vaincu votre ennemi ! GG") break else: #boucle attaque ennemi attack_opponent = randint(5, 15) HP_PLAYER = HP_PLAYER - attack_opponent if attack_opponent <= 13: print(f""" Votre ennemi vous inflige {attack_opponent} point de dégats. Il vous reste {HP_PLAYER} points de vie.""") else: print(f""" Aie... Coup critique ! Votre ennemi vous inflige {attack_opponent} point de dégats. Il vous reste {HP_PLAYER} points de vie.""") if HP_PLAYER <= 0: # condition pour perdre print("NOOB T'AS PERDU LOL") break elif player_choice == "2": #boucle de potion if POTIONS > 0: POTIONS -= 1 potion_hp = randint(15, 50) HP_PLAYER = HP_PLAYER + potion_hp if HP_PLAYER > 50: HP_PLAYER = 50 print("Votre nombre de points de vie ne peut excéder 50.") elif potion_hp >= 40: print("\nVous sentez que la potion fait plus d'effet qu'à son habitude !\n") print(f"Vous passez votre tour pour vous soigner de {potion_hp}. Il vous reste : {HP_PLAYER}.") #Retour à l'attaque de l'attaque de l'ennemi attack_opponent = randint(5, 15) HP_PLAYER = HP_PLAYER - attack_opponent if attack_opponent <= 13: print(f"""Votre ennemi vous inflige {attack_opponent} point de dégats. Il vous reste {HP_PLAYER} points de vie.""") else: print(f""" Aie... Coup critique ! Votre ennemi vous inflige {attack_opponent} point de dégats. Il vous reste {HP_PLAYER} points de vie.""") if HP_PLAYER == 0: #Condition de défaite print("NOOB T'AS PERDU LOL") break else: # Plus de potion print("Vous n'avez plus de potion...") continue print("-" * 50) ``` Comment pensez-vous que je peux améliorer mon code ?

Marc

12 mars 2024

Résolue
5 réponses

Evaluation des variables dans une chaîne de caractères

Bonjour, Afin d'éviter de saisir plusieurs fois dans le code le même texte à afficher à l'écran, j'ai ajouté ces textes dans des constantes en début de code comme indiqué ci-après : ``` points_vie_infliges = 0 MES_RESULTATS = f"Vous avez infligé {points_vie_infliges} points de dégats à l'ennemi" SES_RESULTATS = f"L'ennemi vous a infligé {points_vie_infliges} points de dégats" ``` Plus loin dans le code, j'exploite les constantes de la manière suivante : ``` if user_choice == "1": points_vie_infliges = randint(5, 10) ses_points_vie = ses_points_vie - points_vie_infliges if ses_points_vie > 0: print(MES_RESULTATS) points_vie_infliges = randint(5, 15) mes_points_vie = mes_points_vie - points_vie_infliges if mes_points_vie > 0: print(SES_RESULTATS) ``` Le résultat est le suivant : *Souhaitez-vous attaquer (1) ou utiliser une potion (2) ?1 Vous avez infligé 0 points de dégats à l'ennemi L'ennemi vous a infligé 0 points de dégats Il vous reste 20 points de vie Il reste 11 points de vie à l'ennemie* J'en conclue que ma variable points_vie_infliges est évaluée dans ma chaîne de caractères au moment de l'initialisation de ma constante et non pas au moment où j'utilise ma constante dans le print. Ce qui est logique. Existe t-il un moyen d'indiquer à quel moment on souhaite évaluer les variables inclus dans une chaîne de caractèrs ? Merci

Farouk

29 août 2023

Résolue
2 réponses

Avis sur le code

Bonjour, Je viens de finir le petit jeu, je n'ai pas encore regarder la correction. J'ai essayé de rendre le code lisible... 😅 ça a l'air de fonctionner, j'ai essayé tous les cas auxquel j'ai pensé mais il est possible que j'en ai oublié certains. Est-il possible d'avoir un avis sur le code global ? Merci encore ! 🙂 ```python import random #Définition des variables globales player_health = enemy_health = max_health = 50 potion = 3 player_attack = enemy_attack = None care = None #Afficher les règles du jeu print("Vous devez battre votre ennemie, voici les règles du jeux :\n" "- Le jeu comporte deux joueurs : vous et un ennemi.\n" "- Vous commencez tous les deux avec 50 points de vie ❤️.\n" "- Votre personnage dispose de 3 potions 🧪 qui vous permettent de récupérer des points de vie.\n" "- L'ennemi ne dispose d'aucune potion.\n" "- Chaque potion vous permet de récupérer un nombre aléatoire de points de vie, compris entre 15 et 50.\n" "- Votre attaque inflige à l'ennemi des dégâts aléatoires compris entre 5 et 10 points de vie.\n" "- L'attaque de l'ennemi vous inflige des dégâts aléatoires compris entre 5 et 15 points de vie.\n" "- Lorsque vous utilisez une potion, vous passez le prochain tour.") #Début de la boucle while player_health &gt; 0 and enemy_health &gt; 0: print("-" * 105) player_choice = input("Souhaitez-vous attaquer (1) ou utiliser une potion (2) ? ") #Vérifier que le joueur rentre le bon choix if player_choice != "1" and player_choice != "2": print("Veuillez rentrez un choix valide.") else: #Attaque if player_choice == "1": player_attack = random.randint(5, 10) enemy_health = enemy_health - player_attack enemy_attack = random.randint(5, 15) player_health = player_health - enemy_attack print(f"Vous avez infliger {player_attack} points de dégats à l'énnemie ⚔️") print(f"L'ennemi vous a infligé {enemy_attack} points de dégats ⚔️") #On vérifie si les deux joueurs ont plus de 0 de santé if player_health &gt; 0 and enemy_health &gt; 0: print(f"Il vous reste {player_health} points de vie") print(f"Il reste {enemy_health} points de vie à l'ennemie") #Soin else: if potion &gt; 0: care = random.randint(15, 50) player_health = player_health + care potion -= 1 #Vérifier on a atteint le maximum en santé if player_health &gt;= max_health: player_health = max_health print(f"Votre santé est au maximum ({potion} 🧪 restantes)") else: print(f"Vous récupérez {care} points de vie ❤️ ({potion} 🧪 restantes)") enemy_attack = random.randint(5, 15) player_health = player_health - enemy_attack print(f"L'ennemi vous a infligé {enemy_attack} points de dégats ⚔️") #On vérifie si le joueur a toujour plus de 0 en santé if player_health &gt; 0: print(f"Il vous reste {player_health} points de vie") print(f"Il reste {enemy_health} points de vie à l'ennemie") print("-" * 105) print("Vous avez passer votre tour...") enemy_attack = random.randint(5, 15) player_health = player_health - enemy_attack print(f"L'ennemi vous a infligé {enemy_attack} points de dégats ⚔️") print(f"Il vous reste {player_health} points de vie") print(f"Il reste {enemy_health} points de vie à l'ennemie") else: print("Vous n'avez plus de potion...") else: if enemy_health &lt;= 0 and player_health &lt;= 0: print("Vous avez tous les deux perdu... 💀💀") elif enemy_health &lt;= 0: print("Bravo ! Vous avez gagné votre combat ! 💪") else: print("Vous perdu ce combat... 💀") ```

Règles du jeu

Le but de ce projet est de créer un jeu de rôle textuel dans le terminal.

  • Le jeu comporte deux joueurs : vous et un ennemi.

  • Vous commencez tous les deux avec 50 points de vie.

  • Votre personnage dispose de 3 potions qui vous permettent de récupérer des points de vie.

  • L'ennemi ne dispose d'aucune potion.

  • Chaque potion vous permet de récupérer un nombre aléatoire de points de vie, compris entre 15 et 50.

  • Votre attaque inflige à l'ennemi des dégâts aléatoires compris entre 5 et 10 points de vie.

  • L'attaque de l'ennemi vous inflige des dégâts aléatoires compris entre 5 et 15 points de vie.

  • Lorsque vous utilisez une potion, vous passez le prochain tour.

Déroulé de la partie

Lorsque vous lancez le script, vous devez demander à l'utilisateur s'il souhaite attaquer ou utiliser une potion :

"Souhaitez-vous attaquer (1) ou utiliser une potion (2) ? "

Cette phrase sera demandée à l'utilisateur au début de chaque tour.

  • Si l'utilisateur choisi la première option (1), vous infligez des points de dégât à l'ennemi.

Ces points seront compris entre 5 et 10 et déterminés aléatoirement par le programme.

  • Si l'utilisateur choisi la deuxième option (2), vous prenez une potion.

Les points de vie que la potion vous donne doivent être compris entre 15 et 50 et générés aléatoirement par le programme Python.

Vous devez vérifier que l'utilisateur dispose de suffisamment de potion et décrémenter le nombre de potions qu'il a dans son inventaire lorsqu'il en boit une. Si l'utilisateur n'a plus de potions, vous devez lui indiquer et lui proposer de nouveau de faire un choix (attaquer ou prendre une potion).

Quand le joueur prend une potion, il passe le prochain tour.

Une fois l'action du joueur exécutée, et si l'ennemi est encore vivant, il vous attaque. Si l'ennemi est mort, vous pouvez terminer le jeu et indiqué à l'utilisateur qu'il a gagné 👏

L'attaque de l'ennemi inflige des dégâts au joueur compris entre 5 et 15, là encore déterminés aléatoirement par le script.

Si vous n'avez plus de points de vie, le jeu se termine et vous avez perdu la partie.

À la fin du tour, vous devez afficher le nombre de points de vie restants du joueur et de l'ennemi.

Toutes ces opérations se répètent tant que le joueur et l'ennemi sont en vie.

!!!note
À chaque tour, vous attaquez en premier. Il ne peut donc pas y avoir de match nul. Si lorsque vous attaquez, votre attaque fait descendre les points de vie de l'ennemi en dessous (ou égal à) 0, vous gagnez la partie sans que l'ennemi n'ait le temps de vous attaquer en retour.
!!!

Il te reste des vidéos à visionner

Tu n'as pas terminé toutes les vidéos de cette partie.

Rechercher sur le site

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.