Résolue

Bonjour. je voulais vous exposer ma version pour voir si elle est optimiser et ce que vous en pensee

# Boucles # Variables # Scripting
import random
import os
rules = """\t📜RULES📜
1) Le jeu comporte deux joueurs, donc vous et un ennemi
2) Vous, comme le joueur, vous commencez avec le même nombre de points de vie, donc avec 50 points de vie
3) Vous avez un avantage, c'est que vous avez trois potions qui vous permettent de récupérer des points de vie (15 ~ 50 HP)tandis que l'ennemi, lui ne dispose d'aucune potion.
4) Pour un equilibre des forces l'enemis peut vous infliger 5 ~ 15 point de degat tandis que vous ne pouvez infliger que 5 ~ 10 point de degat
5) Également, lorsque vous choisissez d'utiliser une potion plutôt que d'attaquer, vous récupérez des points de vie, sauf que l'ennemi va vous attaquer au même tour et le tour d'après
\t😊Bonne chance a vous😊
\t\tVeuillez taper entrer pour commencer le jeux """
a = input(rules)
if a == "":
    os.system('cls')
else:
    os.system('cls')
user = ""
user_HP = AI_HP = 50
item = 3
choix = str(list(range(1, 3)))
choix = choix[1: -1]
choix = choix.replace(" ", "")
choix = choix.replace(",", "")
user_extra_HP = 0
while AI_HP > 0 or user_HP > 0:
    AI_ATK = random.randint(5, 15)
    text_2 = f"""l'enemi vous a infliger {AI_ATK} de degat🔥🐉."""
    text_4 = "Votre tour fu passe suite a votre derniere action🙃🙃\n"
    if user_extra_HP == 0:
        text_1 = f"Souhaitez-vous attaquer ({choix[0]}) ou utiliser une poiton ({choix[1]})? "
        user_ATK = random.randint(5, 10)
        text_3 = f"""Vous avez infliger {user_ATK} de degat a l'ennemi.🤺⚔️\n"""
        print('-' * 50)
        user = input(text_1)
        if user not in choix:
            continue
        elif user == choix[0]:
            print(text_3)
            AI_HP -= user_ATK
            if AI_HP >0:
                print(text_2)
            user_HP -= AI_ATK
            if user_HP > 0 and AI_HP > 0: 
                text_6 = f"""il vous reste {user_HP} de point de vie🩸💓.
il reste a l'ennemi {AI_HP} de point de vie🩸💓."""
                print(text_6)
            else:
                if user_HP <= 0:
                    print("Vous avez perdu😓😓 \n Fin du jeux")
                if AI_HP <= 0:
                    print("Vous avez gagner💪💪 \n Fin du jeux")
                break
        elif user == choix[1]:
            user_HP -= AI_ATK
            item -= 1
            if item > 0:
                user_extra_HP = random.randint(10, 20)
                text_5 = f"Vous recuperer {user_extra_HP} de point de vie🩸💓 (il vous reste {item} potion🧪🧫{'s' if item >1 else ''})\n"
                user_HP += user_extra_HP
                text_2 = f"""l'enemi vous a infliger {AI_ATK} de degat🔥🐉.\n"""
                print(text_5, text_2)
                if user_HP <= 0:
                    print("Vous avez perdu😓😓 \n Fin du jeux")
                    break
                else:
                    text_6 = f"""il vous reste {user_HP} de point de vie🩸💓.
il reste a l'ennemi {AI_HP} de point de vie🩸💓."""
                    print(text_6, "\n", "-" * 50)
                continue
            else:
                print("Vous n'avez plus de potion.")
                continue
    else:
        user_HP -= AI_ATK
        text_6 = f"""\nil vous reste {user_HP} de point de vie🩸💓.
il reste a l'ennemi {AI_HP} de point de vie.🩸💓"""
        print(text_4, text_2)
        if user_HP >0:
            print(text_6)
        else:
            print("Vous avez perdu😓😓 \n Fin du jeux")
            break
        user_extra_HP = 0
        user = "2"
        continue

Thibault houdon

Mentor

Salut Issiaka !

Voilà un petit résumé de remarques et conseils sur ce que tu pourrais améliorer dans ton script. Mais déjà bravo d'être arrivé jusque là, c'est super d'arriver à un code fonctionnel et ne t'en fais pas, c'est vraiment en pratiquant et avec le temps que tu pourras écrire directement du code mieux formaté, mais c'est un super début, continue comme ça !

Structure du code

  1. Noms des variables
    Essaie de donner des noms plus descriptifs aux variables pour faciliter la lecture et la compréhension du code, là avec text_1 et text_2 ce n'est pas très clair dans le code de ce à quoi ces variables correspondent, il faut retourner voir la déclaration pour savoir ce qu'elles contiennent.

    text_1 = f"Souhaitez-vous attaquer ({choix[0]}) ou utiliser une poiton ({choix[1]})? "
    text_2 = f"""l'enemi vous a infliger {AI_ATK} de degat🔥🐉."""
    

  2. Répétition de code
    Cette partie est répétée plusieurs fois dans le code. À ce stade-ci tu n'as pas encore vu les fonctions, et tu pourrais les utiliser par la suite pour éviter la répétition de code, mais c'est possible de le faire également sans utiliser de fonction (voir ma solution proposée à la fin) :

    if AI_HP > 0 and user_HP > 0: 
       text_6 = f"""il vous reste {user_HP} de point de vie🩸💓.
    il reste a l'ennemi {AI_HP} de point de vie🩸💓."""
       print(text_6)
    

  3. Condition sur a inutile
    La condition n'est pas utile ici puisque dans les deux cas, l'écran est effacé.

    if a == "":
       os.system('cls')
    else:
       os.system('cls')
    

Clarté et lisibilité

  1. Séparation des tâches
    Là encore, même sans avoir vu les fonctions, n'hésite pas à aérer un peu plus ton code en rajoutant des commentaires ou des sauts de ligne entre différents blocs de logique (voir ma solution).

  2. Messages d'état du jeu
    Ces messages sont dispersés dans le code :

    print(text_6)
    

    Tu peux essayer de centraliser cette logique pour améliorer la lisibilité.

Logique du jeu

  1. Gestion des potions
    Tu devrais vérifier s'il reste des potions avant d'en utiliser une ;)

    item -= 1
    

  2. Vérification des entrées de l'utilisateur
    Un message indiquant une entrée invalide serait utile ici car le continue n'est pas visible pour l'utilisateur quand il fait un choix invalide.

    if user not in choix:
       continue
    

  3. Fin du jeu
    La condition devrait plutôt être AI_HP > 0 and user_HP > 0 pour sortir de la boucle dès que l'un des deux atteint zéro ou moins.

    while AI_HP > 0 or user_HP > 0:
    

Voici un exemple de code qui intègre toutes ces recommandations (j'ai réintégré le "skip_turn" aussi), mais je te conseille d'essayer également de ton côté de reformater le code avec les conseils pour que ça s'ancre bien ;)

import random
import os

# Affichage des règles
rules = """\t📜RULES📜
...
\t\tVeuillez taper entrer pour commencer le jeux """

input(rules)
os.system('cls')

player_HP = enemy_HP = 50
potions = 3
skip_turn = False

while player_HP > 0 and enemy_HP > 0:
    if not skip_turn:
        user_choice = input("Souhaitez-vous attaquer (1) ou utiliser une potion (2) ? ")

        if user_choice not in ["1", "2"]:
            print("Choix invalide. Essaye encore.")
            continue

        if user_choice == "1":
            player_attack = random.randint(5, 10)
            print(f"Vous avez infligé {player_attack} points de dégats à l'ennemi ⚔️")
            enemy_HP -= player_attack

        elif user_choice == "2":
            if potions > 0:
                potion_health = random.randint(15, 50)
                print(f"Vous récupérez {potion_health} points de vie ❤️ ({potions} 🧪 restantes)")
                player_HP += potion_health
                potions -= 1
                skip_turn = True
            else:
                print("Vous n'avez plus de potions...")
                continue

    if skip_turn:
        print("Vous passez votre tour...")
        skip_turn = False

    enemy_attack = random.randint(5, 15)
    print(f"L'ennemi vous a infligé {enemy_attack} points de dégats ⚔️")
    player_HP -= enemy_attack

    print(f"Il vous reste {player_HP} points de vie.")
    print(f"Il reste {enemy_HP} points de vie à l'ennemi.")
    print("-" * 50)

if player_HP <= 0:
    print("Tu as perdu 😢")
else:
    print("Tu as gagné 💪")

print("Fin du jeu.")

Bonne continuation !

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.