#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Jan 25 22:33:33 2023

@author: vincentleprince

Implémentation de l'exemple vu en cours.
Remarque : les scores des positions du jeu sont vus du point de vue du joueur 1.
Donc la fonction (min-max) donnant le meilleur score et le coup optimal
du point de vue de cette stratégie donne ce score pour le joueur 1.
"""
import numpy as np


# on représente le graphe par un dictionnaire
dicoGraph = {}
for i in [1,2]: # numéro du joueur 
    for j in range(1,6):
        dicoGraph[(i,j)] = [ (3-i , j), (3-i , j+1)]
        
# un dictionnaire contient également les valeurs de l'heuristique pour chaque position       
dicoH  = { (1,1) : 5 , (2,1) : -3 ,
                    (1,2) : 12 , (2,2) : 1 ,
                    (1,3) : -4 , (2,3) : -2 ,
                    (1,4) : -5 , (2,4) : 3 ,
                    (1,5) : 7  , (2,5) : 8
                   }

def minMax( pos , nbCoups  ):
    """pos :  position de départ dans l'arène
    nbCoups : horizon de la stratégie
    La fonction renvoie le    score attribué à chaque position
    en appliquent la stratégie min/max à horizon nbCoups 
    à partir de la position pos.
    """
    if nbCoups == 0: # jeu à 0 coup
        return dicoH[pos]
    elif dicoGraph[pos] == []: # cas où la position n'a pas de successeurs
        return dicoH[pos]
    else : 
        if pos[0] == 1 : # position où le premier joueur doit jouer
                        # on maximise le score parmi ceux des positions atteignables 
            maxi = -np.inf
            # A compléter
            return ...
        elif # A compléter
        
        

#print(minMax((1,1) , 4) )  

