from math import *
import tkinter as tk



################
##            ##
## Exercice 2 ##
##            ##
################


## Question 2.1

root = tk.Tk()
root.title("Jeu de go")
Hauteur = 700
Largeur = 700
Dessin=tk.Canvas(root,height=Hauteur,width=Largeur,bg="white")
Dessin.pack()


## Question 2.2

delta=Hauteur/22 # Hauteur=Largeur


## Question 2.3

Dessin.create_rectangle(delta,delta,Largeur-delta, Hauteur-delta,fill='#C8A165')

for i in range(2,21):
    Dessin.create_line((2*delta,delta*i) , (20*delta, delta*i))
    Dessin.create_line((delta*i,2*delta) , (delta*i, 20*delta))


## Question 2.4

def cercle(x,y,rayon,épaisseur,couleur):
    p1 = (x-rayon,y-rayon)
    p2 = (x+rayon,y+rayon)
    Dessin.create_oval(p1,p2,width=épaisseur,outline=couleur)


def disque(x,y,rayon,couleur):
    p1 = (x-rayon,y-rayon)
    p2 = (x+rayon,y+rayon)
    Dessin.create_oval(p1,p2,width=0,fill=couleur)

def place_étoile(x,y):
    disque((x+1)*delta,(y+1)*delta,delta/5,'black')

for i in range(4,17,6):
    for j in range(4,17,6):
        place_étoile(i,j)


## Question 2.5

def place_pierre(x,y,couleur):
    disque((x+1)*dx,(19-y+2)*dy,dx//2,couleur)
    cercle((x+1)*dx,(19-y+2)*dy,dx//2,1,'black') # c’est plus jolie


## Question 2.6
couleur='black'

def place_pierre(x,y):
    global couleur
    disque((x+1)*delta,(19-y+2)*delta,delta//2,couleur)
    cercle((x+1)*delta,(19-y+2)*delta,delta//2,1,'black') # c’est plus jolie
    if couleur=='black':
        couleur='white'
    else:
        couleur='black'


place_pierre(17,16)
place_pierre(4,16)
place_pierre(16,3)
place_pierre(4,4)
place_pierre(6,17)

root.mainloop()


################
##            ##
## Exercice 3 ##
##            ##
################


root = tk.Tk()
root.title("Traçons des segments")
Hauteur = 500
Largeur = 500
Dessin=tk.Canvas(root,height=Hauteur,width=Largeur,bg="white")
Dessin.pack()


def affiche_pixel(x,y,couleur):
    Dessin.create_rectangle(x,y,x,y,fill=couleur,outline='')

# question 1
def afficher_carré():
    xmin = 100
    ymin = 100
    xmax = xmin+200
    ymax = ymin+200
    # On trace les lignes horizontales
    for x in range(xmin,xmax+1):
        affiche_pixel(x,ymin,'black')
        affiche_pixel(x,ymax,'black')
    # On trace les lignes verticales
    for y in range(ymin,ymax+1):
        affiche_pixel(xmin,y,'black')
        affiche_pixel(xmax,y,'black')

afficher_carré()


# question 2
def entier_le_plus_proche(q):
    n = floor(q)
    if q<n+0.5:
        return n
    else:
        return n+1


# question 3
def affiche_segment_naïf(p1,p2):
    (x1,y1)=p1
    (x2,y2)=p2
    a = (y2-y1)/(x2-x1)
    b = y1-a*x1
    for x in range(x1,x2+1):
        y = entier_le_plus_proche(a*x+b)
        affiche_pixel(x,y,'black')


# question 4
p1=(100,100)
p2=(200,150)
p3=(150,300)
affiche_segment_naïf(p1,p2)
affiche_segment_naïf(p1,p3)

# question 5
def affiche_segment(p1,p2):
    (x1,y1)=p1
    (x2,y2)=p2
    if abs(y2-y1) >= abs(x1-x2):
        a = (x2-x1)/(y2-y1)
        b = x1-a*y1
        for y in range(y1,y2+1):
            x = entier_le_plus_proche(a*y+b)
            affiche_pixel(x,y,'black')
    else:
        a = (y2-y1)/(x2-x1)
        b = y1-a*x1
        for x in range(x1,x2+1):
            y = entier_le_plus_proche(a*x+b)
            affiche_pixel(x,y,'black')

p1=(100,100)
p2=(200,150)
p3=(125,200)
affiche_segment(p1,p2)
affiche_segment(p1,p3)

root.mainloop()


################
##            ##
## Exercice 4 ##
##            ##
################



root = tk.Tk()
root.title("Emploi du temps")
Hauteur = 700
Largeur = 900
Dessin=tk.Canvas(root,height=Hauteur,width=Largeur,bg="white")
Dessin.pack()

# question 1
dx = Largeur/6
dy = Hauteur/14

def jour(j):
        if j==1:
                return "Lundi"
        elif j==2:
                return "Mardi"
        elif j==3:
                return "Mercredi"
        elif j==4:
                return "Jeudi"
        else:
                return "Vendredi"


Dessin.create_rectangle(dx/2,dy,Largeur-dx/2, Hauteur-dy)


for i in range(8,21):
        Dessin.create_text(dx/4,dy*(i-8+1),text=str(i)+"h")
        Dessin.create_line((dx/2,dy*(i-8+1)) , (Largeur-dx/2, dy*(i-8+1)))


for i in range(1,6):
        Dessin.create_text(i*dx ,dy/2,text=jour(i))
        Dessin.create_line(i*dx+dx/2 , dy, i*dx+dx/2,Hauteur-dy)

# question 2
class UE:

        def __init__(self,nom,couleur):
                self.nom=nom
                self.couleur=couleur


        def séance(self,jour,début):
                (x1,y1)= (dx*(jour-.5),dy*(début-8+1))
                p1=(x1,y1)
                p2=(x1+dx,y1+2*dy)
                Dessin.create_rectangle(p1,p2,fill=self.couleur)
                Dessin.create_text(x1+.5*dx,y1+dy,text=self.nom,font="20pt")

math=UE("Math","#AAFFAA")
info=UE("Info","#AAAAFF")
belote=UE("Belote","#FFAAAA")

math.séance(1,8)
math.séance(2,10)
info.séance(3,17)
info.séance(4,9)
belote.séance(2,14)
belote.séance(5,16)
root.mainloop()
