NSI, mini-jDR

#### mini-projet JDR
from random import randint

### les personnages ont 4 capacités 
### la Force, l'Agilité, la Magie qui sont déterminées par un 1D20
### Les PV sont déterminés par la somme de ses 3 caractéristiques
### il y a 3 types de personnages : Guerrier, Voleur, Mage
### le type est déterminé par un tirage aléatoire.


def creation_perso(nom):
    '''
    >>>creation_perso("Gandalf")
    {nom:"Gandalf",type:"Guerrier",
    "Force": 15 , "Agilité": 9  ,"Magie":  5  ,"PV": 29
    }
    '''


 ### pour les combats, on regarde la caractéristique propre à chaque type :guerrier->Force, mage->Magie, voleur -> agilité
### celui qui a la caractéristique propre la plus élevée commence
### en cas d'égalité, on procède à un tirage aléatoire pour déterminer celui qui commence
### les points de dégats infligés sont déterminés par la différence des caractéristiques propres auquel on ajoute un d6, ils sont enlevés aux pv du personnage en défense
### on permute les rôles attaquant et défenseur, on continue jusqu'à ce qu'un des perso ait moins de 0 pv


def combat(perso1,perso2):
    '''
    >>>combat(perso1,perso2)
    "perso1 attaque, il met 5 pts de dégats à perso2"
    "perso2 attaque, il met 3 pts de dégats à perso1"
    ....
    "Perso2 a 0 pv, il fuit à grandes enjambées."
    '''

Proposition de correction

#### mini-projet JDR
from random import randint

### les personnages ont 4 capacités 
### la Force, l'Agilité, la Magie qui sont déterminées par un 1D20
### Les PV sont déterminés par la somme de ses 3 caractéristiques
### il y a 3 types de personnages : Guerrier, Voleur, Mage
### le type est déterminé par un tirage aléatoire.


from random import randint
def creation_perso(nom):
    '''
    >>>creation_perso("Gandalf")
    {nom:"Gandalf",type:"Guerrier",
    "Force": 15 , "Agilité": 9  ,"Magie":  5  ,"PV": 29
    }
    '''
    types=('Guerrier','Voleur','Mage')
    caracts=('Force','Magie','Agilité')
    reponse="non"
    while reponse!="ok":
        retour={}
        retour['nom']=nom
        retour['type']=types[randint(0,2)]
        retour['pv']=0
        for i in range(3):
            retour[caracts[i]]=randint(0,20)
            retour['pv']+=retour[caracts[i]]
        print(retour)
        reponse=input("ça vous va "+nom+" ?")
        return retour
        


 ### pour les combats, on regarde la caractéristique propre à chaque type :guerrier->Force, mage->Magie, voleur -> agilité
### celui qui a la caractéristique propre la plus élevée commence
### en cas d'égalité, on procède à un tirage aléatoire pour déterminer celui qui commence
### les points de dégats infligés sont déterminés par la différence des caractéristiques propres auquel on ajoute un d6, ils sont enlevés aux pv du personnage en défense
### on permute les rôles attaquant et défenseur, on continue jusqu'à ce qu'un des perso ait moins de 0 pv

def caract_principale(perso):
    type=perso["type"]
    caract_prin={'Guerrier':'Force','Voleur':'Agilité','Mage':'Magie'}
    return perso[caract_prin[type]]
    
def premier(perso1,perso2):
    c1=caract_principale(perso1)
    c2=caract_principale(perso2)
    if c1==c2:
        if randint(1,2)==1:
            return perso1,perso2
        else:
            return perso2,perso1
    if c1>c2:
         return perso1,perso2
    return perso2,perso1

perso1={'nom': 'Gandalf', 'type': 'Guerrier', 'pv': 15, 'Force':12, 'Magie': 14, 'Agilité': 9}
perso2={'nom': 'Faenor', 'type': 'Mage', 'pv': 29, 'Force': 6, 'Magie': 19, 'Agilité': 9}

print("Affrontement entre")
print(perso1)
print("et")
print(perso2)

def combat(perso1,perso2):
    '''
    >>>combat(perso1,perso2)
    "perso1 attaque, il met 5 pts de dégats à perso2"
    "perso2 attaque, il met 3 pts de dégats à perso1"
    ....
    "Perso2 a 0 pv, il fuit à grandes enjambées."
    '''
    attaquant,defenseur=premier(perso1,perso2)
    while attaquant["pv"]>0 and defenseur["pv"]>0:
        degats=caract_principale(attaquant)/(caract_principale(attaquant)+caract_principale(defenseur))
        degats=int(degats*randint(1,6))
        print(attaquant["nom"]+" inflige "+str(degats)+" pts de dégats à "+defenseur["nom"])
        defenseur["pv"]-=degats
        print(defenseur["nom"]+ " a "+str(defenseur["pv"])+" pv")
        a=input("round suivant")
        attaquant,defenseur=defenseur,attaquant
    

combat(perso1,perso2)