Combat de héros est un jeu dans lequel s'affronte des héros dans des combats épiques. Ce jeu, très simple, est dérivé des grands jeux de cartes qui ont marqué le genre Heroïc Fantasy.
Chaque héros est caractérisé par :
Le principe de base de Combat de héros est le suivant :
Un des héros est choisi aléatoirement pour attaquer un autre héros. Ces 2 héros sont appelés respectivement attaquant et défenseur.
Si les points d'attaque de l'attaquant sont supérieurs aux points d'armure du défenseur,
alors l'attaquant remporte son combat et inflige des dégâts au défenseur.
Les dégâts sont calculés ainsi :
dégâts = points d'attaque de l'attaquant - points d'armure du défenseur
En cas de défaite, les points de vie du défenseur diminuent autant que la valeur des dégâts reçus.
Si le défenseur n'a plus de point de vie (0 ou moins), le défenseur meurt (et ne pourra donc plus combattre).
Les combats alétoires s'enchainent jusqu'à ce qu'il ne reste plus qu'un seul héros qui est alors désigné Grand Vainqueur !
Les caractéristiques d'un héros sont stockées dans un tableau (= liste) de longueur 4, de la forme :
[ nom (chaine de caractères), point d'attaque (entier) , point d'armure (entier) , point de vie (entier) ]
Ex : ["Braum",5,2,7]
Les caractéristiques de tous les héros sont stockées dans un tableau (= liste) appelé caracteristique
: il s'agit d'une liste de listes.
caracteristique=[["Ahri",5,3,7],["Corki",9,3,3],["Azir",4,4,4],["Braum",5,2,7],["Ashe",4,2,13]]
La longueur de cette liste de listes caracteristiques
est égale au nombre de héros (qui a tendance au diminué lors des combats).
On se limitera à 5 héros pour ce jeu.
Commençons par importer la fonction randint
depuis le module random
afin de pouvoir
gérer le tirage aléatoire:
from random import randint
Ne pas hésiter à consulter sa documentation help(randint)
Déclarons la liste de listes caracteristiques
des 5 héros initialement présents:
caracteristique=[["Ahri",5,3,7],["Corki",9,3,3],["Azir",4,4,4],["Braum",5,2,7],["Ashe",4,2,13]]
Ecrire la procédure lancer_un_combat_aleatoire()
qui déclarera une variable attaquant
et lui
affectera un nombre entier aléatoire compris entre 0 et la longueur du tableau caractéristique
- 1 !!!
Rajouter un print(attaquant)
dans cette procédure pour la tester.
Compléter la procédure lancer_un_combat_aleatoire()
en déclarant à la suite une variable defenseur
à laquelle on
affectera un nombre entier aléatoire compris entre 0 et la longueur du tableau caractéristique
- 1 !!!
Rajouter un print(defenseur)
dans cette procédure pour la tester.
Il faut éviter que l'attaquant attaque l'attaquant...
Compléter la procédure lancer_un_combat_aleatoire()
en rajoutant à la suite une boucle qui tirera à nouveau le
numero du defenseur tant qu'il sera identique (==) à celui de l'attaquant.
Rajouter un print(defenseur)
dans cette procédure, après la boucle, pour la tester.
Compléter la procédure lancer_un_combat_aleatoire()
en rajoutant à la suite un print
pour afficher la phrase :
" ... attaque ..."
dans laquelle apparaissent le nom de l'attaquant et celui du défenseur.
Tester la procédure.
Compléter la procédure lancer_un_combat_aleatoire()
en rajoutant à la suite une structure conditionnelle
:
si ????? :
alors on affiche "... a réussi son attaque contre ..."
sinon
on affiche "... a échoué dans son attaque contre ..."
Tester la procédure pour vérifier que le nom de l'attaquant et le nom du défenseur apparaissent bien.
Compléter la structure conditionnelle en rajoutant dans le alors
:
Modifier la phrase "... a a réussi son attaque contre ... a qui il ne reste que ... points de vie" et tester la procédure.
Compléter la structure conditionnelle en rajoutant dans le alors
une autre structure conditionnelle :
si ????? :
alors on supprime la liste des caractéristiques du défenseur de la liste caractéristique
Tester la procédure.
Ecrire la procédure lancer_les_combats()
qui répétera le lancement d'un combat aléatoire jusqu'à qu'il ne reste qu'un seul héros
( c'est-à-dire tant qu'il n'en reste pas 1)
En Python, "différent" ce code par le symbole !=
Compléter la procédure lancer_les_combats()
en rajoutant à la suite un print
pour afficher la phrase:
"... a remporté les combats et est nommé Grand Vainqueur"
Tester cette procédure.
Appeler fièrement votre enseignant pour lui montrer votre travail !