Combat de héros

Présentation :

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.

quelques héros de league of legends

Caractéristiques de chaque héros

Chaque héros est caractérisé par :

Déroulement des combats

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 !

Numérisation des caractéristiques des héros

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.

Programmer le jeu en python

Importation des modules :

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éclaration des variables globales :

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]]

Définition de la procédure de gestion d'un combat :

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.

Définition de la procédure de gestion de plusieurs combats :

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 !