"""
    Convention :
    Toute I.A. possède une méthode calculer_coup. Celle-ci prend en argument le plateau de la situation courante et la liste des coups autorisés. Elle retourne un indice.

"""

from random import randint
from Outils.Moteur_de_jeu.Coup import *    #Utilisé dans IA_random


class Joueur :  #Quentin 13/10/2016
    def __init__(self, jtype, nom) : #Quentin 14/10/2016
        self.type = jtype     #"H" ou "O"
        self.nom = nom
        self.num = 0      #Par défaut, est modifié au début de la partie

    def est_humain(joueur) :
        return joueur.type == "H"



class Humain(Joueur) :  #Quentin 14/10/2016
    def __init__(self,nom) : #Quentin 14/10/2016
        Joueur.__init__(self,"H",nom)
        



class IA_random(Joueur) :
    """ I.A. aléatoire, pour tester. Hérite de la classe Joueur. """
    def __init__(self, nom) :   #Quentin 13/10/2016
        Joueur.__init__(self, "O", nom)

    def calculer_coup(self, plateau, liste_coups) :  #Quentin 13/10/2016
        indices_M = []
        indices_B = []
        for i in range(len(liste_coups)) :
            if liste_coups[i].type == "M" :
                indices_M.append(i)
            else :
                indices_B.append(i)
    
    
        #On choisit un des deux types de mouvement, on mélange la liste qui lui correspond et on en retourne le premier élément sous forme de coup
        if randint(0,1) == 1 or indices_B == [] :   #Si aucune barrière ne peut être placée, on est obligé de se déplacer
            i = randint(0, len(indices_M) - 1)
            return indices_M[i]
        else :
            return randint(0, len(indices_B) - 1)
            return indices_B[i]