TP
Sorciers

Le grand affrontement

Sommaire

01.

Les sorts

La classe sort

02.

Les sorciers

La classe sorcier

1. Les sorts
baguette magique

L'espace de travail


Préparation de l'espace de travail

  1. Créer un dossier tp_sorcier
  2. Dans ce dossier, créer les fichiers suivants :
    • sorts.py
    • sorciers.py
    • battle.py

La classe sort

Le but de cette partie est de créer une classe Sort qui représentera les sorts des sorciers. Mis à part le constructeur, elle est uniquement composée d'attributs. Ces attributs sont :
  • nom
  • degat
  • cout

sorts
  1. Ouvrir le fichier sorts.py
  2. Créer une classe nommée Sort
  3. Le constructeur (__init__) de la classe Sort doit prendre en paramètre dans cet ordre :
    • nom
    • degat (avec pour valeur par défaut 100)
    • cout (avec pour valeur par défaut 5)


    Remarque : Pour donner une va leur par défaut à un paramétre, il faut la lui attribuer lors de la déclaration.
    Ces paramètres sont déclarés après les paramètres par défauts.
    Voir en fin de cette page




Quizz :


Quel instruction permet de crée une instance abracadrabra de la classe Sort ayant le nom Abracadrabra avec une valeur de dégat de 150 et un cout de 5



La listes des sortilèges sorts

Pour peupler la liste des sortilèges, on copier coller le code suivants :
Accio = Sort("Accio")
Amplificatum = Sort("Amplificatum")
Avada_kedavra = Sort("Avada kedavra",  degat = 1000, cout = 50)
Collaporta = Sort("Collaporta")
Crache_limace = Sort("Crache limace")
Croque_cheville = Sort("Croque cheville")
Destructum = Sort("Destructum")
Dissensium = Sort("Dissensium")
Ectoplasmus = Sort("Ectoplasmus")
Elasticus = Sort("Elasticus")
Endoloris = Sort("Endoloris", degat = 500, cout = 20)
Enervatum = Sort("Enervatum")
Expelliarmus = Sort("Expelliarmus")
Failamal = Sort("Failamal")
Flambois = Sort("Flambois")
Flipendo = Sort("Flipendo")
Impédimenta = Sort("Impédimenta")
Imperium = Sort("Imperium", degat = 300, cout = 20)
Incarcerem = Sort("Incarcerem")
Incendio = Sort("Incendio")
Imobilis = Sort("Imobilis", degat=150) 
Lumos = Sort("Lumos", degat=50, cout=2)
Mobilicorpus = Sort("Mobilicorpus")
Morsmordre = Sort("Morsmordre")
Mutismus = Sort("Mutismus")
Nox = Sort("Nox")
Oubliette = Sort("Oubliette")
Oqulus_reparo = Sort("Oqulus reparo" , degat = 50, cout = 2)
Petrificus_totalus = Sort("Petrificus totalus", degat = 150, cout = 20)
Portus = Sort("Portus")
Prior_incanta = Sort("Prior incanta",cout=8)
Protego = Sort("Protego")
Recurvite = Sort("Recurvite")
Reducto = Sort("Reducto")
Serpentasortia = Sort("Serpentasortia")
Silencio = Sort("Silencio")
Stupefix = Sort("Stupefix")
Waddiwasi = Sort("Waddiwasi")
On créer une liste sorts contenenant l'ensemble des sortilèges grâce au code suivant :
sorts = [Accio , Amplificatum, Avada_kedavra, Collaporta, Crache_limace, Croque_cheville, Destructum, Dissensium, Ectoplasmus, Elasticus, Endoloris, Enervatum, Expelliarmus, Failamal, Flambois, Flipendo, Impédimenta, Imperium, Incarcerem, Incendio, Imobilis, Lumos, Mobilicorpus, Morsmordre, Mutismus, Nox, Oubliette, Oqulus_reparo, Petrificus_totalus, Portus, Prior_incanta, Protego, Recurvite, Reducto, Serpentasortia, Silencio, Stupefix, Waddiwasi] 

Quizz :


Quels sont les dégâts infligés par le sort Prior_incanta ?



Quel le cout d'uilisation du sort Prior_incanta ?




2. Les sorciers

La classe Sorcier

Le but de cette partie est de créer une classe Sorcier qui représentera les sorciers.
Elle est composée d'attributs et de méthodes
sorts

Le constructeur

  1. Ouvrir le fichier sorciers.py
  2. Créer une classe nommée Sorciers
  3. La classe Sorciers contient les attributs suivants :
    • nom : str
    • prenom : str
    • age : str
    • pv : int par défaut 1000
    • endurance : int par defaut 150
    • __sorts : list par defaut vide
    Le constructeur (__init__) doit permettre de créer les sorciers avec leur attribut et les valeurs par défaut.

Les méthodes

La classe Sorcier dispose de 3 méthodes :
  • apprendre : méthode qui est appelée pour ajouter un sort à un sorcier.
    • Cette méthode prend en paramètre un objet de type Sort et qui l'ajoute à l'attribut sorts de l'instance.
    • Elle affiche "{Nom du sorcier} possède dorénavant le sort {nom du sort}"
  • lancer : méthode qui est appelée pour lancer un sort à un autre sorcier.
    • Cette méthode prend en paramètre un objet de type Sort et un objet de type Sorcier.
    • Si le cout du sort est inférieur à l'endurance de l'instance sorcier lance le sort sur le sorcier (en fait elle appelle la méthode maj_pv du sorcier visé)
    • Elle affiche : "{Nom du sorcier} lance {nom du sort} sur {nom du socier visé}"
      ou
      "{Nom du sorcier} n'a plus assez d'endurance pour utiliser le sort {nom du sort}"
  • set_pv : méthode qui est appelée quand un sorcier est visé par sortilège.
    • Cette méthode prend en paramètre sortilege un objet de type Sort
    • Elle enleve aux points de vie du sorcier les points de dégat infligés par le sort.
      • S'il reste des points de vie au sorcier, elle affichera :
        "{nom du sorcier} est touché par {nom du sort}. Points de vie restant {pv}"
      • S'il ne reste plus de points de vie, elle affichera :
        "{nom du sorcier} est mort !"

La liste des sorciers


albus = Sorcier("Albus Dumbledore", "Gryffondor", pv=1500, endurance=200)
harry = Sorcier("Harry Potter", "Gryffondor", pv=1500, endurance=150)
sirius = Sorcier("Sirius Black", "Gryffondor")
minerva = Sorcier("Minerva McGonagall", "Gryffondor")
hermione = Sorcier("Hermione Granger", "Gryffondor")
neville = Sorcier("Neville Londubat", "Gryffondor")
remus = Sorcier("Remus Lupin", "Gryffondor")
severus = Sorcier("Severus Rogue", "Serpentard", pv=1500, endurance=150)
tom = Sorcier("Tom Jedusor", "Serpentard", endurance=250)
bellatrix = Sorcier("Bellatrix Lestrange", "Serpentard")
drago  = Sorcier("Drago Malefoy", "Serpentard")
regulus   = Sorcier("Regulus Black", "Serpentard")
albus =   Sorcier("Albus Potter", "Serpentard")
dolores =  Sorcier("Dolores Ombrage", "Serpentard")
                    
On créer une liste sorciers contenenant l'ensemble des sortilèges grâce au code suivant :
    sorciers = [albus , harry, sirius, minerva, hermione, neville, remus, severus, tom, bellatrix, drago , regulus  , albus, dolores]
    
3. Préparation du Battle

Importer les sorciers et les sortileges

  1. Ouvrir le fichier battle.py
  2. Copier coller le code suivant :
  3. 
    from  sorts import sorts # importation de la listes des sortileges
    from  sorciers import sorciers # importation de la listes des sorciers
    from random import choice, sample
    
    
                

    Ajouter les sortileges aux sorciers

  4. Pour chaque sorciers, choisir 5 sorts au hasard (utilisation du module random) et les ajouter à la liste des sorts du sorciers.

    Les maisons

    • Créer 2 listes gryffondor et serpentard
    • Pour chaque sorcier, l'ajouter à la liste correspondant à sa maison

4. L'affrontement

Déroulement

L'affrontement à lieu tour par tour.
  • A chaque tour on sélectionne 2 sorciers qui se lance mutuellement un sort choisi au hazard parmi les sorts qu'il possède
  • si l'un des sorciers n'a plus de points de vie après le duel, il ne fait plus parti de la maison
  • si une maison n'a plus de sorcier, elle est déclarée perdante