Utilisation des fonctions : jeu de rôle
Bonsoir,
J'aurais souhaité refaire le jeu de rôle mais en utilisant des fonctions.
Le code de base :
import random
ENEMY_HEALTH = 50
PLAYER_HEALTH = 50
NUMBER_OF_POTIONS = 3
SKIP_TURN = False#quand on prendra une potion True
while True:
#jeu du joueur
if SKIP_TURN:#comme False début on entre pas dedans
print("Vous passez votre tour...")
SKIP_TURN = False
else:
user_choice =""
while user_choice not in ["1", "2"]:
user_choice = input("Souhaitez-vous attaquer (1) ou utiliser une potion (2) ? ")
if user_choice == "1": # attque
your_attack = random.randint(5, 10)
ENEMY_HEALTH -= your_attack
print(f"Vous avez infligé {your_attack} points à l'ennemi.")
elif user_choice == "2": # potion
if NUMBER_OF_POTIONS > 0:
potion_health = random.randint(15, 50)
PLAYER_HEALTH += potion_health
NUMBER_OF_POTIONS -= 1
SKIP_TURN = True#if skip turn va passer le tour
print(f"Vous récupérez {potion_health} points de vie ({NUMBER_OF_POTIONS} restantes)")
else:
print("Vous n'avez plus de potions")
continue#revenir à la boucle while true
if ENEMY_HEALTH <= 0:
print("Tu as gagné")
break
#attaque de l'ennemi
enemy_attack = random.randint(5, 15)
PLAYER_HEALTH -= enemy_attack
print(f"L'ennemi vous a infligé {enemy_attack} points de dégats.")
if PLAYER_HEALTH <= 0:
print("Vous avez perdu")
break
#stats
print(f"Il vous reste {PLAYER_HEALTH} points de vie.")
print(f"Il reste {ENEMY_HEALTH} points de vie à l'ennemi.")
print("_" * 50)
print("Fin du jeu.")
J'ai créé un module externe module_role.py.
import random
def player_attack():
your_attack = random.randint(5, 10)
ENEMY_HEALTH -= your_attack
print(f"Vous avez infligé {your_attack} points à l'ennemi.")
Et j'importe ma fonction dans le jeu de rôle.
Mais forcément, si je lance mon script et que je fais le choix 1, les points de vie de l'ennemi ne vont pas bouger, car ENEMY_HEALTH est immuable.
Je me demandais donc comment on peut utiliser des fonction dans ce cas ?
Merci d'avance
import random
import module_role
ENEMY_HEALTH = 50
PLAYER_HEALTH = 50
NUMBER_OF_POTIONS = 3
SKIP_TURN = False#quand on prendra une potion True
while True:
#jeu du joueur
if SKIP_TURN:#comme False début on entre pas dedans
print("Vous passez votre tour...")
SKIP_TURN = False
else:
user_choice =""
while user_choice not in ["1", "2"]:
user_choice = input("Souhaitez-vous attaquer (1) ou utiliser une potion (2) ? ")
if user_choice == "1": # attque
module_role.player_attack
elif user_choice == "2": # potion
if NUMBER_OF_POTIONS > 0:
potion_health = random.randint(15, 50)
PLAYER_HEALTH += potion_health
NUMBER_OF_POTIONS -= 1
SKIP_TURN = True#if skip turn va passer le tour
print(f"Vous récupérez {potion_health} points de vie ({NUMBER_OF_POTIONS} restantes)")
else:
print("Vous n'avez plus de potions")
continue#revenir à la boucle while true
if ENEMY_HEALTH <= 0:
print("Tu as gagné")
break
#attaque de l'ennemi
enemy_attack = random.randint(5, 15)
PLAYER_HEALTH -= enemy_attack
print(f"L'ennemi vous a infligé {enemy_attack} points de dégats.")
if PLAYER_HEALTH <= 0:
print("Vous avez perdu")
break
#stats
print(f"Il vous reste {PLAYER_HEALTH} points de vie.")
print(f"Il reste {ENEMY_HEALTH} points de vie à l'ennemi.")
print("_" * 50)
print("Fin du jeu.")
Bonjour Gabriel,
Il y a cette vidéo de Thierry Chappuis qui explique bien comment découper un programme en fonction (plutôt d’avoir un seul bloc).
En définissant la fonction principale - def main() - qui va appeler toutes les autres fonctions dont elle aura besoin.
En utilisant/expliquant également le principe de if __name__
Dans mes souvenirs il ne fait pas d’import dans cet exemple. Toutes les fonctions sont dans le même fichier. Mais ça donne un aperçu (très détaillé) de comment découper un programme.
La vidéo : https://www.dropbox.com/s/wdjvue5e98jrnry/Lunchinaire-structurer-son-programme-proc%C3%A9dural-avec-la-d%C3%A9composition-descendante-20210621.mp4?dl=0
Salut Gabriel !
Alors là effectivement tu rentres dans finalement ce qui sera le plus compliqué sur le long terme : comment écrire et organiser proprement son code. Car on a beaucoup de libertés avec Python et on peut faire plein de choses de différentes façons mais parfois on s'emmêle les pinceaux.
Dans ton cas, deux choses à noter :
- Pour un petit script comme celui-ci, tu n'as pas forcément besoin de créer un module externe : tu peux mettre tes fonctions dans le même fichier.
- La raison pour laquelle il est compliqué de séparer ce genre de code en fonction, c'est que ça reste un petit script, si tu commences à séparer ton code en fonction, tu risques fortement de te retrouver avec des fonctions qui font 1 ou 2 lignes maximum. Finalement tu vas donc rajouter de la complexité en séparant tout ton code dans une 10aine de fonction qui font une ligne plutôt que de tout faire directement dans ton script ligne après ligne.
Ce que je te conseille c'est de regarder cette correction que j'avais faite de différents projets d'étudiants sur le jeu de rôle :
Ça va te permettre de voir différentes approches directement avec les corrections.
Bonne continuation Gabriel, ne t'en fais pas, tu es dans la partie difficile dans laquelle tu commences à engranger beaucoup de connaissances et ça fait un peu tourner la tête parce qu'on ne sait pas encore comment les organiser. Mais ça va se placer petit à petit. Il faut vraiment multiplier les projets et consolider les bases avec des petits exercices (je te conseille vraiment de faire autant d'exercices disponibles sur Docstring que possible pour t'entraîner sur des sortes de petits projets pour consolider ces bases).
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte