from tkinter import *
from PIL import Image, ImageTk
from random import shuffle # en début de script

##########################
#       INTERFACE        #
# !! NE RIEN MODIFIER !! #
##########################

def affiche_cartes(cartes: list, debut: int, fin: int)->None:
    for e in fen.winfo_children():
        e.destroy()

    liste_cadres = []

    for i in range(debut, fin+1):
        carte = cartes[i]
        nom_fichier = carte[0] + ' ' + carte[1] + '.jpg'
        image = Image.open(nom_fichier)
        size = (100, 150)
        image = image.resize(size, resample = 3)
        photo = ImageTk.PhotoImage(image)
        can = Canvas(fen, width = 100, height = 150)
        can.grid(row = 0, column = i)
        can.create_image(0, 0, anchor = NW, image=photo)
        can.image = photo
        liste_cadres.append(can)
    fen.update()

fen = Tk()
fen.wm_attributes("-topmost", 1) # garde la fenêtre toujours au premier plan
fen.title('Petite Soeur')



##########################
#     VOTRE SCRIPT       #
#          ICI           #
##########################

def tire_n_cartes(jeu: list, N: int)->list:
    '''
    Tire au hasard N cartes dans un jeu de cartes.
    Entrées :
        jeu = le tableau complet des cartes d'un jeu
        N = le nombre de cartes à tirer
    Sortie :
        le tableaux des N cartes tirées au hasard
    '''

    shuffle(jeu)  # mélange aléatoirement les éléments du tableau du jeu

    return [jeu[i] for i in range(N)] # renvoi d'un tableau des N premiers éléments du tableau du jeu

def calcule_valeur(carte: tuple)->int:
    '''
    Renvoie la valeur associée à la figure d'une carte
    Entrée:
        carte = le tuple représentant la carte
    Sortie :
        la valeur associée à la figure de la carte
    '''

    figures = ['7','8','9','10','V','D','R','A'] # tableau des figures possibles
    valeurs = [7, 8, 9, 10, 11, 12, 13, 14] # valeurs entières correspondantes, DANS LE MÊME ORDRE : une figure et sa valeur ont donc LE MÊME INDICE dans les deux tableaux

    fig = carte[0] # figure de la carte passée en argument ( = 1er élément du tuple )
    indice = figures.index(fig) # détermination de l'indice de cette figure dans le tableau des figures

    return valeurs[indice] # renvoi de la valeur de l'élément AU MÊME INDICE dans le tableau des valeurs

# PROGRAMME PRINCIPAL DU JEU
jeu_cartes = [('7','Carreau'), ('8','Carreau'),('9','Carreau'), ('10','Carreau'),('V','Carreau'),('D','Carreau'),('R','Carreau'),('A','Carreau'),('7','Coeur'),('8','Coeur'),('9','Coeur'), ('10','Coeur'),('V','Coeur'),('D','Coeur'),('R','Coeur'),('A','Coeur'),('7','Pique'),('8','Pique'),('9','Pique'), ('10','Pique'),('V','Pique'),('D','Pique'),('R','Pique'),('A','Pique'),('7','Trèfle'),('8','Trèfle'),('9','Trèfle'), ('10','Trèfle'),('V','Trèfle'),('D','Trèfle'),('R','Trèfle'),('A','Trèfle')]

n_cartes = 15   # nombre de cartes en jeu
cartes = tire_n_cartes(jeu_cartes, n_cartes)    # cartes en jeu

joueur1 = input('Nom du joueur1 : ')
joueur2 = input('Nom du joueur2 : ')

joueur = joueur1 # le joueur1 commence

score_1 = 0 # score de chaque joueur
score_2 = 0

gauche = 0 # indice dans le tableau 'cartes', du début des cartes encore en jeu ( = indice du premier élement du tableau en début de jeu )
droite = n_cartes - 1 # indice dans le tableau 'cartes', de la fin des cartes encore en jeu( = indice du derner élément du tableau en début de jeu )

# Début du jeu
while gauche <= droite: # ou for i in range(n_cartes)
    print("C'est à " + joueur + " de jouer :")

    affiche_cartes(cartes, gauche, droite)

    choix = input('Prenez-vous la carte de Gauche ou de Droite ? ')
    if choix == 'G':
        carte_jouee = cartes[gauche] # récupération du tuple représentant la carte choisie ( à gauche )
        gauche += 1 # on incrémente le début de la liste des cartes encore en jeu
    elif choix == 'D':
        carte_jouee = cartes[droite] # récupération du tuple représentant la carte choisie ( à droite )
        droite -= 1 # on décrémente la fin de la liste des cartes encore en jeu

    if joueur == joueur1: # si c'est le joueur1 qui vient de jouer,
        score_1 += calcule_valeur(carte_jouee) # on ajoute au score du joueur 1 la valeur de la carte qu'il a choisie
        joueur = joueur2  # et on change de joueur
    else: # sinon ( c'est à dire si c'est le joueur2 qui vient de jouer ),
        score_2 += calcule_valeur(carte_jouee) # même chose.
        joueur = joueur1

    print() # saut d'une ligne pour améliorer l'affichage

print(joueur1 + ": " + str(score_1))
print(joueur2 + ": " + str(score_2))

if score_1 > score_2:
    print(joueur1 + " gagne !")
elif score_1 < score_2:
    print(joueur2 + " gagne !")
else:
    print("Egalité !")

##########################
#      A LAISSER         #
# TOUT EN FIN DE SCRIPT  #
##########################



fen.mainloop()










