Résolue

Exercice du jeu de rôle

# Exercices # Variables # Scripting

Bonjour !

Je me suis bloqué à cet exercice de jeu de rôle dans le terminal. Avant de voir le corrigé je pose mon problème.

Mon code n'a pas marché et je le savais d'avance car il manque de logique dans le déroulé de mon script.

Je le mets ici tout de même, s' il y a des suggestions à me faire, des conseils à prendre en compte pour une bonne logique, des concepts à revoir pour au moins être sur le chemin de la résolution du problème, je vois que j'ai encore à faire pour appréhender les concepts de bases.

Merci



from random import randint

# Le but de ce projet est de créer un jeu de rôle textuel dans le terminal.
choix_joueur = ""
# Le jeu comporte deux joueurs : vous et un ennemi.
"""Deux variables joueur & ennemi"""
# Vous commencez tous les deux avec 50 points de vie.
point_vie_ennemi = point_vie_joueur = 50
# Votre personnage dispose de 3 potions qui vous permettent de récupérer des points de vie.
""" joueur/ 03 potions """
nombre_potion = 0
# L'ennemi ne dispose d'aucune potion.
"""ennemi/ 0 potion"""
# Chaque potion vous permet de récupérer un nombre aléatoire de points de vie, compris entre 15 et 50.

potion = randint(15, 50)
# Votre attaque inflige à l'ennemi des dégâts aléatoires compris entre 5 et 10 points de vie.
degat_joueur = randint(5, 10)
# L'attaque de l'ennemi vous inflige des dégâts aléatoires compris entre 5 et 15 points de vie.
degat_ennemi = randint(5, 15)

while point_vie_joueur and point_vie_ennemi > 0 :
    input("Souhaitez-vous attaquer (1) ou utiliser une potion (2) ? ")
     if not choix_joueur.isdigit() and not 1 or not 2:
         print("Veuillez mettre un choix valide")
     continue

    point_vie_restant_joueur = ""
    point_vie_restant_ennemi = ""
# Lorsque vous utilisez une potion, vous passez le prochain tour.
if choix_joueur == 1 :
        point_vie_restant_joueur = point_vie_joueur - degat_ennemi
        point_vie_restant_ennemi = point_vie_ennemi - degat_joueur

        print(f"Vous avez infligé {degat_joueur} points de dégâts à l'ennemi 📍")
        print(f"L'ennemi vous a infligé {degat_ennemi} points de dégâts 📍")
        print(f"Il vous reste {point_vie_restant_joueur} points de vie 💚")
        print(f"Il reste {point_vie_restant_ennemi} de vie à l'ennemi 💚")

    elif choix_joueur == 2:

        while nombre_potion > 3: 
            print("vous ne disposez plus de potion")
            continue
while nombre_potion < 3 :
            point_vie_restant_joueur = point_vie_joueur + potion
            point_vie_restant_joueur = point_vie_restant_joueur + potion
            point_vie_restant_joueur = point_vie_joueur - degat_ennemi

        print(f"L'ennemi vous a infligé {degat_ennemi} dégâts de vie point_vie_restant_joueur = point_vie_restant_joueur + potion📍")
        print(f"Il vous reste {point_vie_restant_joueur} de vies 💚")
        print(f"Il reste {point_vie_restant_ennemi} de vies 💚")

        potion += 1
if int(point_vie_restant_joueur) < 0 :
        print("Vous avez perdu la partie 💘")

    if int(point_vie_restant_ennemi) < 0 :
        print("L'enemi a perdu la partie 💘")

    print("➖" * 30)



Bonjour Moise, dans un premier temps, as tu appris les fonctions dans ta formation ? Si oui, ça tourrait t'aider dans la conception de ton algorithme. Deplus, si je copie / colle tel quel, il y a des erreurs d'indentation, ce qui est primordial en python



Non, je ne suis pas encore arrivé sur les fonctions. Dans les fonctions c'est après si je me trompes pas.

Effectivement, le TP n'y fait pas mention. via un script ça devrait le faire. reste déjà à corriger les indentations.


Je remarque aussi deux boucles while, il y 'en a une de trop. Mais la correction est super bien faite :)

Hello,


je vois aussi ceci:


while point_vie_joueur and point_vie_ennemi > 0 :


cette condition ne va pas fonctionner comme tu le souhaites. Ici c'est comme si tu tester si la variable point_vi_joueur existe et si point_vie_ennemi est > 0 . Si ton intention et de tester si les 2 sont positives tu dois l'écrire 2 fois:


while (point_vie_joueur > 0) and (point_vie_ennemi > 0):


Le continue est inutile selon moi. Je n'ai pas pu tout tester à cause du problème d'indentation.

Bonjour Moïse :

  • déjà le nombre de potions est à 0. Mais le joueur commence avec 3 potions.
  • tu as des problèmes d'indentation à plusieurs endroits.
  • Le continue je pense que tu peux le retirer
  • if not choix_joueur.isdigit() and not 1 or not 2:

J'aurais fait autre chose genre si le choix du joueur est différent de 1 ou de 2. ça suffit, comme ça pas besoin de préciser le isdigit.

Ou tu créer une liste avec tes choix possible. Et tu fais un if not choix_joueur in taliste:

  • tu déclares des variables points de vie restant. Tu peux tout faire avec deux variables pv ennemi et pv joueur.
  • ta boucle avec le nombre de potion, il y a un problème. Tu devrais faire un si le nombre nbre de potions supérieur à 0 plutôt. Et sinon (else) tu fais quoi si tu n'as plus de potions ?
  • A la fin dans la logique tu n'aurais pas besoin de convertir en integer tes variables. Ta variable point de vie est de type integer.

Salit Moïse,


tu nous tiens au courant si ces différentes réponses te conviennent ? Merci. A plus

Merci de toutes vos réponses👍

j'ai pu avancer , mon script se lance et arrive à la fin, j'ai pas réussi à bien intégrer toutes les conditions mais c'est déjà un pas pour moi.

Je manque encore un peu de logique dans les indentations, cependant il y a un bug soit de mon côté soit sur le site quand je copie colle, j'ai pas la même chose.

while point_vie_joueur and point_vie_ennemi > 0 :  


Mon intention est de répéter ces opérations tant que le joueur et l'ennemi sont en vie.

Peut-être à la place de and j'aurai dû mettre or, puisque c'est soit l'un ou l'autre pas les deux en même temps

while point_vie_joueur or point_vie_ennemi > 0 :



Salut Moïse !


Cette condition ne fonctionne pas car le mot-clé "and" n'exécute pas la comparaison des deux variables avec 0, seulement celle de point_vie_ennemi.


Cette condition fonctionne en évaluant chaque variable comme un booléen, c'est-à-dire qu'elle vérifie si chaque variable est vraie ou fausse.


Tu dois donc évaluer chaque condition individuellement, en utilisant l'opérateur "and" pour combiner les deux conditions.


La bonne façon d'écrire la condition pour vérifier si les deux points de vie sont supérieurs à zéro serait la suivante :


while point_vie_joueur > 0 and point_vie_ennemi > 0:

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

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