# -*- coding:utf-8 -*-

from tkinter import *
from random import *

# Programme laissant apparaitre un échiquier sur lequel viendront se
# placer des pions de manière aléatoire.

# Fonctions nécessaires:

def ligne_carres(can, x, y, large):
    """
    Trace une ligne de 5 carrés noirs de largeur <large>
    à partir du point (x;y) dans le canevas <can>
    """
    i = 0
    while i < 5:
        can.create_rectangle(x, y, x+large, y+large, fill="black")
        x = x +2*large
        i = i + 1

def cercle(can, x, y, r, coul):
    """
    Trace un cercle de rayon <r> centré en (x;y)
    et de couleur <coul> dans le canevas <can>
    """
    can.create_oval(x-r, y-r, x+r, y+r, fill = coul)

# Classe principale:

class Echiquier(Tk):

    def __init__(self, largeurCase):
        # Tâchez de bien "paramétrer" vos programmes, comme nous l'avons
        # fait dans cette classe. Celle-ci permet en effet de tracer des damiers
        # de n'importe quelle taille en changeant seulement la valeur
        # du paramètre <largeurCase>:

        Tk.__init__(self)
        self.title("Echiquier")

        # Largeur des cases:
        self.largeur = largeurCase

        # Cases déjà remplies:
        self.occupees = []

        # Création des widgets "esclaves" :
        self.can = Canvas(master=self, width =largeurCase*10, height =largeurCase*10, bg ='white')
        self.can.pack(side =TOP, padx =5, pady =5)

        # Bouton générant le damier
        bou1 = Button(master=self, text = 'damier', command = self.damier)
        bou1.pack(side =LEFT, padx =3, pady =3)

        # Bouton générant les pions
        bou2 = Button(master=self, text ='pions', command = self.pion)
        bou2.pack(side =RIGHT, padx =3, pady =3)

        # Bouton pour quitter l'application
        bou3 = Button(master=self, text = 'Quitter', command = self.quit)
        bou3.pack()

        
    # Gestionnaire d'événements:

    def damier(self):
        "Dessine 10 lignes de carrés avec décalage alterné"
        i = 0
        while i < 10:
            if i % 2 == 0:                                                          # Pour les lignes d'indice pair
                ligne_carres(self.can, 0, i*self.largeur, self.largeur)             # on commence par un carré noir
            else:                                                                   # Pour les lignes d'indice impair
                ligne_carres(self.can, self.largeur, i*self.largeur, self.largeur)  # on commence par un carré blanc
            i = i + 1

    def pion(self):
        "Dessine un pion de manière aléatoire"
        if len(self.occupees) < 100:
            ligne = randrange(10)                           # Choisir la ligne sur laquelle se trouvera le pion
            col = randrange(10)                             # Choisir la colonne dans laquelle se trouvera le pion
            
            while (ligne, col) in self.occupees:            # S'assurer que la case choisie n'est pas déjà occupée
                ligne = randrange(10)
                col = randrange(10)

            self.occupees.append((ligne, col))              # Enregistrer les coordonnées de la case choisie
            x = self.largeur/2 + col*self.largeur           # Abscisse du centre du pion
            y = self.largeur/2 + ligne*self.largeur         # Ordonnée du centre du pion
            cercle(self.can, x, y, self.largeur/3, 'red')

  
##### Programme principal : ############

fen = Echiquier(50)

# Lancement du réceptionnaire d'événements:

fen.mainloop()
fen.destroy()
