"""
Larve et pious

"""

#ATTENTION : COMMENCEZ OBLIGATOIREMENT PAR ENREGISTRER CE FICHIER SOUS LE NOM chasse.py

from math import inf

LARVE = 1
PIOUS = 0

configuration = ((3,0) ,((0,7),(2,7),(4,7),(6,7)))

def valide(case) :
    """renvoie un booleen si la case 'case'' est une case blanche DANS le plateau de jeu""" 
    
    return -1
    

def mouvements_larve(config) : 
    """ renvoie la liste des mouvements possibles pour la larve 
        sous forme d'une liste [ (dx,dy), ...] """ 


    return -1
    
    
def deplacer_larve(config, mouvement) : 
    """ config est une configuration du plateau de jeu.
        renvoie la nouvelle configuration après déplacement de la larve
    """
    
    return -1
    
    

def mouvements_pious(config) :
    """ config est une configuration du plateau de jeu.
        renvoie les mouvements possible des pious
        sous forme d'une listes de tuples [(n,(dx, dy))]
        n est le numero du piou et (dx, dy) les mouvements 
    """
    
    return -1


def deplacer_piou(config, mouvement) :
    """ renvoie la configuration obtenue après déplacement du piou"""    
    
    return -1


def larve_gagne(position) :
    """ calcule si la position est gagnante pour la larve
        c'est à dire si la larve est sur la dernière ligne
        ou si c'est le tour des pious de jouer et ils n'ont pas de mouvements
    """
    
    return -1

def pious_gagnent(position) :
    """ calcule si la position est gagnante pour les pious
        c'est à dire si c'est le tour de la larve et qu'elle n'a plus de mouvement
    """   
    
    return -1


def mouvements(position) :
    """ renvoie la liste des mouvements possibles à partir d'une position de jeu
        si un des joueurs est en position gagnante le jeu s'arrête et il n'y a plus de mouvement possible
    """

    joueur, config = position
    if larve_gagne(position) or pious_gagnent(position) : 
        return []
    if joueur == LARVE :
        return mouvements_larve(config)
    else :
        return mouvements_pious(config)


def deplacer(position, mouvement) :
    """ renvoie la position  (joueur, configuration) obtenue après le mouvement """

    joueur, config = position
    if joueur == LARVE :
        return (PIOUS, deplacer_larve(config, mouvement))
    else :
        return (LARVE, deplacer_piou(config, mouvement))


def successeurs(position) :
    
    return -1


def heuristique(position) :
    """ renvoie l'évaluation heuristique de la position
        position favorable à la larve : ++
        position favorable aux pious : --
    """
    # heuristique triviale

    if larve_gagne(position) : return 10000
    if pious_gagnent(position) : return -10000


    joueur, (larve, pious) = position
    x,y = larve
    (x1,y1),(x2,y2),(x3,y3),(x4,y4) = pious

    return 0
    

def minmax(position, n):
    
    return -1

def maxmin(position, n):
    
    return -1





    

    


# # test 
# 
# 
# if __name__ == '__main__' :
#     assert not valide((8,0))   
#     assert not valide((0,8))   
#     assert not valide((-1,0))  
#     assert not valide((0,-1))        
#     assert not valide((3,5))
#     assert not valide((4,6))
#     assert valide((1,2))
#     assert valide((4,5))
# 
# # déplacement de la larve
#     config = ((3,0) ,((0,7),(2,7),(4,7),(6,7)))
#     print( mouvements_larve(config) ) 
# 
#     config = ((4,1) ,((0,7),(2,7),(4,7),(6,7)))
#     print( mouvements_larve(config) ) 
# 
#     config = ((0,1) ,((0,7),(2,7),(4,7),(6,7)))
#     print( mouvements_larve(config) ) 
# 
#     config = ((3,6) ,((0,7),(2,7),(4,7),(6,7)))
#     print( mouvements_larve(config) ) 
# 
#     config = ((0,1) ,((0,7),(2,7),(4,7),(6,7)))
#     print( mouvements_larve(config) ) 
# 
# # déplacement des oiseaux
# # déplacement de la larve
#     config = ((3,0) ,((0,7),(2,7),(4,7),(6,7)))
#     print( mouvements_pious(config) ) 
# 
#     config = ((3,6) ,((0,7),(2,7),(4,7),(6,7)))
#     print( mouvements_pious(config) ) 
# 
# # deplacement des oiseaux 
#     config = ((3,0) ,((0,7),(2,7),(4,7),(6,7)))
#     move = (0,(1,-1))
#     print( deplacer_piou(config,move ) )
# 
#     move = (1,(-1,-1))
#     print( deplacer_piou(config,move ) )
# 
# 
# 
# # Test des successeurs 
#     config = ((3,0) ,((0,1),(2,1),(4,1),(6,1)))
#     position = (LARVE, config) 
#     assert successeurs(position) == []
# 
#     config = ((3,7) ,((0,5),(2,5),(4,5),(6,5)))
#     position = (PIOUS, config) 
#     assert successeurs(position) == []
# 
#     config = ((3,6) ,((0,5),(2,5),(4,5),(6,5)))
#     position = (LARVE, config) 
#     print(heuristique(position))
#     print(successeurs(position))
# 
