# module pour gérer la fenêtre turtle comme une grille
from turtle import *


# pour se déplacer sans écrire
def va(x,y):
    up()
    goto(x,y)
    down()

# initialise la grille en fonction
# du nombre de lignes, nombre de colonnes, et de la marge
# initialise les variables globales qui définissent la grille 
def initialiseGrille(monAction,mesDonnees=[],nbL=5,nbC=5,m=20,t="Jeu de grille"):
    # pour que la tortue aille vite !
    speed(0)
    # le titre
    title(t)
    # on va modifier les variables globales
    global largeur,hauteur,nbLigne,nbColonne,largeurColonne,hauteurLigne,xgau,ybas
    # taille de la grille (5,5) par défaut
    nbLigne = nbL
    nbColonne = nbC
    # par défaut, on prend une marge de 20 pixels
    marge = m
    # largeur et hauteur de la fenêtre
    # si grille (n,n), alors elle est carrée
    # sinon, elle prend toute la fenêtre moins la marge
    if nbL==nbC :
        largeur = min( window_width(),window_height())-2*marge
        hauteur = largeur
    else:
        largeur = window_width()-2*marge
        hauteur = window_height()-2*marge
    # (xgau,ybas) est le point en bas à gauche
    xgau = -largeur/2
    ybas = -hauteur/2
    # taille des colonnes et des lignes
    largeurColonne = largeur/nbColonne
    hauteurLigne = hauteur/nbLigne
    # action associée au click
    actionOnclick(monAction,mesDonnees)

    
# pour que la fonction activée quand on clique sur l'écran soit
# "monAction" appliquée à "mesDonnees"
def actionOnclick(monAction,mesDonnees):
    action = lambda x,y : monAction(x,y,mesDonnees)
    sc=getscreen()
    sc.onclick(action)

# dessine la grille qui a été définie par initialiseGrille
def dessineGrille(c):
    color(c)
    x=xgau
    y=ybas
    va(x,y)

    # les lignes
    for i in range(0,nbLigne+1) :
        forward(largeur)
        y=y+hauteurLigne
        va(x,y)
    
    # les colonnes
    y=ybas
    va(x,y)
    left(90)

    for i in range(0,nbColonne+1) :
        forward(hauteur)
        x=x+largeurColonne
        va(x,y)    

# calcule la case (i,j) de la grille qui correspond au point turtle (x,y)
# i est en abscisse, j en ordonnée
def positionDansGrille(x,y) :
    xRelatif = x-xgau
    yRelatif = y-ybas
    return [int(xRelatif//largeurColonne),int(yRelatif//hauteurLigne)]

# calcule le point (bas,gauche) dans la fenêtre turtle associé
# à la case (i,j) de la grille
def positionDansFenetre(i,j):
   return [xgau + i*largeurColonne,ybas+j*hauteurLigne]

# renvoie vrai si (x,y) est un point de la grille g
def estDedans(x,y) :
    return xgau<=x and x<xgau+largeur and ybas<=y and y<ybas+hauteur


