from random import randint

Replay = True

MAXLIFE = 50

Life = MAXLIFE
Attack = 6
Defense = 1

#Armes
Dagger = ['Dague', 3]
Sword = ['Epée', 6]
Bow = ['Arc', 5]
Weapons = [Dagger, Sword, Bow]

#Boucliers
Shield = ['Bouclier', 3]

#Potions
PotiondeVieLow = ('petite potion de vie', 10)
PotiondeViePow = ('grande potion de vie', 25)
Potions = [PotiondeVieLow, PotiondeViePow]

Alive = True
Inventaire = [Dagger, Shield]

def setCharData():
        global Life, Attack, Defense, Weapon, Shield, Alive
        Life = MAXLIFE
        Attack = 6
        Defense = 1
        Weapon = 3
        Shield = 3
        Alive = True

def inventaire():
    GetIntoInv = True
    while GetIntoInv:
        print('Voici votre inventaire :')
        for i in range(len(Inventaire)):
            print(Inventaire[i][0])
        choice = input('Avez-vous terminé ? (1) Oui (2) Non\n')
        if choice == '1':
            GetIntoInv = False
            '''
        Inventaire.append('Arme du Magicien')
        '''

Name = 'name'
ELife = 'life'
Atk = 'atk'
Def = 'def'

Enemies = [{Name:'Le squelette', ELife: 30, Atk: 4, Def: 3},
            {Name:'Le gobelin', ELife: 40, Atk: 5, Def: 4},
             {Name: 'La liche', ELife: 60, Atk: 6, Def: 4}]


def chooseAction(): 
	print('Que voulez-vous faire ?')
	print('1: Vous battre')
	print('2: Ramasser un objet')
	print('3: Avancer')
	print('4: Accéder à l\'inventaire')
	choice = int (input())
	return (choice)

def chooseSecondAction():
        print("Que voulez-vous faire ?")
        print('1: Prendre son arme et avancer')
        print('2: Ne pas la prendre')
        choice2 = int (input())
        return (choice2)
    
def fight(Enemy): #Enemy est un élément de la liste Enemies
    global Life, Alive
    while Life > 0 and Enemy[ELife] > 0:
        choice = int(input('Voulez-vous attaquer (1) ou défendre (2) ?'))
        EnemyChoice = randint(1, 2)
        if choice == 1 and EnemyChoice == 1:
            print('Vous attaquez !', Enemy[Name],'perd', (Attack + Weapon) - Enemy [Def], 'pv.')
            Enemy[ELife] -= (Attack + Weapon) - Enemy [Def]
            if Enemy[ELife] > 0:
                print(Enemy[Name], 'n\'a plus que', Enemy[ELife], 'pv, courage !')
            if Enemy[ELife] <= 0:
                continue 
            print(Enemy[Name], 'attaque! Vous perdez', Enemy[Atk] - Defense, ('pv.'))
            Life -= Enemy[Atk] - Defense
            if Life < 0:
                Life = 0
            print('Il vous reste', Life, 'pv.')
        elif choice == 1 and EnemyChoice == 2:
            print('Vous attaquez... mais', Enemy[Name].lower(), 'défend, il perd', (Attack + Weapon) - Enemy [Def] * 2,'pv.')
            Enemy[ELife] -= (Attack + Weapon) - Enemy [Def] * 2
            if Enemy[ELife] > 0:
                print(Enemy[Name], 'n\'a plus que', Enemy[ELife], 'pv, courage !')
        elif choice == 2 and EnemyChoice == 1:
            print(Enemy[Name], 'attaque mais vous defendez, vous perdez', Enemy[Atk] - (Defense + Shield), 'pv')
            Life -= Enemy[Atk] - (Defense + Shield)
            if Life < 0:
                Life = 0
            print('Il vous reste', Life, 'pv.')
        elif choice == 2 and EnemyChoice == 2:
            print('Vous et le', Enemy, 'êtes en train de défendre, la tension est palpable...')
        else:
            print('Votre choix n\'est pas valide. Tapez 1 ou 2')
        if Enemy[ELife] <= 5 and Enemy[ELife] >= 4:
            print('Vous y êtes presque !')
        elif Enemy[ELife] <= 3 and Enemy[ELife] >= 1:
            print('Encore un petit effort')
    if Enemy[ELife] <= 0:
        print('Félicitation ! Vous avez battu', Enemy[Name].lower() + '.')
    else:
        Alive = False

def entrance() : 
    print ("Vous êtes un chevalier face à un donjon.")
    choice = -1
    while choice != 3:
        choice = chooseAction()
        if choice == 1:
            print ('Il n\'y a pas d\'ennemi')
        elif choice == 2:
            print('Il n\'y a pas d\'objet à ramasser!')
        elif choice == 3:
            print ('Vous entrez dans le donjon')
        elif choice == 4:
            inventaire()
        else:
            print('Votre choix n\'est pas valide. Tapez 1,2 ou 3')


            
#première salle, combat squelette
def room1():
    Enemy = Enemies[randint(0, len(Enemies) -1)]
    print (Enemy[Name])
    print(Enemy[Name], 'se tient face à vous!')
    Fight = False 
    choice = -1
    while choice != 3 and Alive:
        choice = chooseAction()
        if choice == 1:
            if not Fight:
                Fight = True
                fight(Enemy)
            else:
                print('Vous avez déjà tué', Enemy[Name].lower() + '! Il n\'y a rien à faire de plus...')
        elif choice == 2:
            print('Il n\'y a pas d\'objet à ramasser')
        elif choice == 3:
            if not Fight:
                print(Enemy[Name], 'vous barre la route')
                choice = -1
            else:
                print('Vous avancez dans la salle suivante')
        else:
            print('Votre choix n\'est pas valide. Tapez 1,2 ou 3')
            
#deuxième salle, potion de vie       
def room2():
    global Life
    print('Il semble y avoir des choses interessantes dans cette salle')
    Potion = Potions[randint(0, len(Potions) - 1)]
    TakePotion = False
    choice = -1
    while choice != 3:
        choice = chooseAction()
        if choice == 1:
            print('Il n\'y a pas d\'adversaire dans cette salle.')
        elif choice == 2:
            if not TakePotion:
                TakePotion = True
                print('Vous avez trouvé une', Potion[0] + '! Voulez-vous la boire (1) ou la stocker (2) ?')
                choice = input()
                if choice == 1:
                    Life += 10
                    if Life > MAXLIFE:
                        Life = MAXLIFE
                    print('Vous récupérez', Potion[1], 'pv') 
                    print('Vous avez maintenant', Life, 'pv.')
                    print('Vous êtes totalement remis de vos blessures')
                else:
                    Inventaire.append(Potion)
            else:
                print('Il n\'y a rien d\'autre dans la salle')     
        elif choice == 3:
            print('Vous avancez dans la salle suivante.')
        elif choice == 4:
            inventaire()
        else:
            print('Votre choix n\'est pas valide. Tapez 1,2 ou 3')

#troisième salle, combat contre un gobelin
def room3():
    global Life
    Enemy = 'gobelin'
    print('Un', Enemy, 'armé se tient face à vous !')
    Fight = False
    TakeSecondPotion = False 
    choice = -1
    while choice != 3 and Alive:
        choice = chooseAction()
        if choice == 1:
            if not Fight:
                Fight = True
                fight(Enemy, 40, 5, 4)
            else:
                print('Vous avez déjà tué le', Enemy, '! Il n\'y a rien à faire de plus...')
        elif choice == 2:
            if Fight:
                if not TakeSecondPotion:
                    print('Vous avez trouvé et bu une potion de vie... vous regagnez 10 pv !')
                    Life += 5
                    if Life > MAXLIFE:
                        Life = MAXLIFE
                    TakeSecondPotion = True
            else:
                print('Le', Enemy, 'vous empêche de prendre l\'objet')
        elif choice == 3:
            if not Fight:
                print('Le', Enemy, 'vous barre la route')
                choice = -1
            else:
                print('Vous avancez dans la salle suivante')
        else:
            print('Votre choix n\'est pas valide. Tapez 1,2 ou 3')

#Quatrième salle, combat contre le magicien
def room4():
    global Weapon, Shield
    Enemy = 'magicien'
    print('Un', Enemy, 'armé se tient face à vous !')
    Fight = False
    TakeShield = False
    choice = -1
    while choice != 3 and Alive:
        choice = chooseAction()
        if choice == 1:
            if not Fight:
                Fight = True
                fight(Enemy, 35, 8, 3)
            else:
                print('Vous avez déjà tué le', Enemy, '!')
        elif choice == 2:
            if not TakeShield:
                print('Vous trouvez un bouclier !')
                Shield = 6
                TakeShield = True
            else:
                print('Il n\'y a plus rien à ramasser')
        elif choice == 3:
            if not Fight:
                print('Le', Enemy, 'vous barre la route')
                choice = -1
        else:
            print('Votre choix n\'est pas valide. Tapez 1,2 ou 3')

    if Alive:        
        TakeMagicianWeapon = False
        print('Voulez-prendre l\'arme du', Enemy, '?')
        choice2 = -1
        while choice2 != 2 and choice2 != 1:
            choice2 = chooseSecondAction()
            if choice2 == 1:
                if not TakeMagicianWeapon:
                    Weapon = 7
                    print('Vous obtener une arme plus puissante : celle du', Enemy, '!')
                    TakeMagicianWeapon = True
                    print('Vous avancer dans la salle suivante')
            elif choice2 == 2:
                print('Vous avancez dans la salle suivante')
            else:
                print('Votre choix n\'est pas valide. Tapez 1 ou 2')

#Salle finale !
def room5():
    global Life
    Enemy = 'mage maléfique, maitre du donjon'
    print('Un', Enemy, 'armé se tient face à vous !')
    Fight = False
    TakeTreasure = False
    choice = -1
    while choice != 3 and Alive:
        choice = chooseAction()
        if choice == 1:
            if not Fight:
                Fight = True
                fight(Enemy, 60, 8, 4)
            else:
                print('Vous avez déjà tué le', Enemy, '! Il n\'y a rien à faire de plus...')
        elif choice == 2:
            if not Fight:
                print('Il y a un trésor... mais le maitre du donjon vous empêche de le prendre.')
            elif not TakeTreasure:
                print('Le trésor du donjon vous appartient !')
                TakeTreasure = True
            elif TakeTreasure:
                print('Vous avez déjà pris le trésor, il n\'y a plus rien à prendre.')
        elif choice == 3:
            if not Fight:
                print('Il n\'y a plus nul part où aller, vous êtes dans la dernière salle.')
                choice = -1
            elif Fight:
                print('Vous sortez du donjon')
        else:
            print('Votre choix n\'est pas valide. Tapez 1,2 ou 3')
    if Fight and Alive:
        if not TakeTreasure:
            print('Vous avez gagné... mais vous n\'avez pas pris le trésor !')

while Replay:
    setCharData()
    entrance()
    #room1()
    if not Alive:
        choice = input('Vous avez perdu... Voulez-vous rejouer (1) pour oui et (2) pour non\n')
        if choice != '1':
            Replay = False
        continue
    room2()
    room3()
    if not Alive:
        choice = input('Vous avez perdu... Voulez-vous rejouer (1) pour oui et (2) pour non\n')
        if choice != '1':
            Replay = False
        continue
    room4()
    if not Alive:
        choice = input('Vous avez perdu... Voulez-vous rejouer (1) pour oui et (2) pour non\n')
        if choice != '1':
            Replay = False
        continue
    room5()
    if not Alive:
        print('Vous avez perdu...')
    else:
        print('Victoire ! Le donjon et son trésor sont à vous !')
    choice = input('Voulez-vous rejouer (1) pour oui et (2) pour non\n.')
    if choice != '1':
        Replay = False
        
