Simulation combat - dragon vs chevalier
But
Modifier un code.
Travailler encore et encore sur les fonctions.
Utilisation de boucles whiles et for.
Utilisation de base des listes.
Déboguer et corriger les erreurs.
Faire de la gestion d'exceptions.Introduction aux modules (random).
Durée : 4 heures
Matériel
Un projet vous a été fourni, il contient :
Un fichier nommé "simulation_combat.py" dans lequel il y a le code source que vous devez corriger et compléter.
[ ⭐Optionnel mais conseillé] Un fichier nommé "test_simulation_combat.py" content quelques tests automatiques pour vérifier vos solutions. Vous n'avez pas besoin de le modifier, il vous servira à des fins de vérification simplement pour l'instant. On vous montrera comment exécuter les tests unitaires.
Pour utiliser les tests unitaires, vous avez besoin d'installer le module pytest. Les étapes sont montrées ici, vous avez le choix entre la méthode en ligne de commande et la méthode dans l’IDE.
Téléchargez et décompressez ce fichier zip, puis copiez-le dans votre dépôt local git projets-python-1-g-3-[votre_nom].
Énoncé
On vous demande de programmer une simulation de combat entre un chevalier et un dragon. Chaque personnage a un certain nombre de points de vie (PV) et peut infliger des dégâts à son adversaire à chaque tour.
Voici le programme qui permet de faire différentes attaques :
Réutilisabilité
Comme vous avez dû le remarquer, un bloc de code se répète plusieurs fois. Que feriez-vous pour résoudre cette répétition qui rend votre programme disgracieux ?
Vous devez simplifier ce programme en créant une fonction en suivant le processus suivant :
Définissez la signature de la fonction (nom de la fonction et ses paramètres).
Complétez le corp de la fonction.
Ajoutez le docstring.
Exécutez le test unitaire de la fonction avant de la vérifier.
Fonctionnalité : Plusieurs attaques successives
Nous pourrions aussi imaginer un scénario où un attaquant réalise plusieurs attaques successives contre une victime. Lorsque les points de vie son épuisés, la victime est vaincue.
Quelle est la structure de données que vous utiliserez pour avoir plusieurs attaques successives?
Modifiez la signature de votre fonction de façon à prendre en paramètre une liste de dégâts à la place d'un seul dégât.
Vous pouvez aussi la copier, lui changer de nom et faire le reste des ajustements.
Faites les ajustement nécessaires dans la fonction. Un petit bout de pseudo-code vous a été fourni, complétez le pseudo-code puis implémentez le code Python.
N'oubliez pas d'ajuster la description du docstring de la fonction.
Fonctionnalité : attaques à tour de rôle
Vous devez mettre à jour votre programme afin d'avoir un combat à tour de rôle où l'utilisateur spécifie à chaque tour quel personnage est l'attaquant. La combat s'arrête lorsque l'un des deux est vaincu et on doit afficher qui est vaincu.
Lorsque l'utilisateur se trompe d'attaquant (ni chevalier, ni dragon), on doit le mettre au courant en lui affichant un message.
Il est possible que vous ayez à appeler la fonction qui permet de faire l'attaque (attaquer)dans votre nouvelle fonction 😉.
Débogage
La fonction evaluer_combat simule un combat entre un attaquant et une victime en prenant en compte plusieurs facteurs qui influencent l'issue de l'attaque.
Effectuer des attaques puissantes qui infligent à la victime le double des dégâts. Les dégâts sont réduits lorsque la victime à un bouclier (augmentés que de 50%).
L'attaquant est déclaré trop faible pour continuer lorsque ses points de vie atteignent 30.
Plusieurs attaques successives sont faites tant que les personnages sont en état de santé.
Votre travail est
d'utiliser le débogueur pour déboguer une fonction qui évalue le résultat d'une attaque,
d'expliquer brièvement votre raisonnement lorsque vous avez trouvé un bogue à l'aide du débogueur,
de corriger le bogue.
d'archiver et pousser chacune de vos corrections de bogue dans GitLab avec un beau message de commit.
100
20
True
False
Victoire de l'attaquant
1
100
20
False
True
Victoire de l'attaquant
2
20
40
False
False
Défaite de l'attaquant
3
100
30
True
False
Victoire de l'attaquant
4
10
40
False
True
Défaite de l'attaquant
5
Nouvelle fonctionnalité : Potion de soin
[À suivre ...]
Fonctionnalité : générer aléatoirement la liste de dégâts
Actuellement, dans votre système de combat entre un chevalier et un dragon, les attaques sont réalisées à l'aide de listes de dégâts prédéfinies. Désormais, vous allez ajouter une nouvelle fonctionnalité qui génère automatiquement les dégâts des attaques de manière aléatoire.
[À suivre...]
Last updated