#Exécuter ce programme
from random import random
import tkinter as tk
from math import *
import time

def quitter(evt):
    mon_fichier.close()
    fen.destroy()

def etoile(x, y, cote):
    ''' x et y represente le centre de l'etoile'''
    global star
    liste_sommets = [(x, y - cote * sqrt(3) ), (x - cote/2, y - cote * sqrt(3) /2)]
    for k in range(0, 10, 2):
        abs = liste_sommets[k][0]
        ord = liste_sommets[k][1]
        abs_img = x + (abs - x) * cos(pi/3) + sin(pi/3) * (ord-y)
        ord_img = y + (ord - y) * cos(pi/3) - sin(pi/3) * (abs-x)
        liste_sommets.append((abs_img, ord_img))
        abs = liste_sommets[k + 1][0]
        ord = liste_sommets[k + 1][1]
        abs_img = x + (abs - x) * cos(pi/3) + sin(pi/3) * (ord-y)
        ord_img = y + (ord - y) * cos(pi/3) - sin(pi/3) * (abs-x)
        liste_sommets.append((abs_img, ord_img))
    star = canv.create_polygon(liste_sommets, fill = 'gray', outline = 'black', width = 2)
    

def page_presentation():
    global mode_emploi
    mode_emploi = canv.create_text(50, 70, fill = "black", anchor = "nw", font =("Consolas", 14, "bold"), text = "Cliquez sur le bouton Démarrer pour commencer à mesurer\nvotre temps de réaction.\n\nCliquer une première fois sur la fenêtre pour faire disparaître\nl'étoile puis cliquez le plus rapidement possible une fois\nqu'elle réapparait.\n\nAttention, si vous cliquez avant qu'elle ne réapparaisse,\nune pénalité de 100 ms par clic prématuré vous sera apliquée.")


def penalite(evt):
    global penal
    penal =penal + 100

def chrono(evt):
    global temps, nb_partie, text_compteur, consigne
    temps = int(1000 * (time.time() - start)) + penal
    print(temps)
    mon_fichier.write('\n'+str(nb_partie)+';'+str(temps)+';'+ str(penal))
    canv.delete(text_compteur)
    consigne = canv.create_text(50, 30, font =("Consolas", 14, "bold"),anchor = 'nw', text = "Cliquer sur la fenêtre pour faire disparaître l'étoile\npuis cliquez le plus rapidement possible lorsqu'elle réapparait.")
    canv.bind('<ButtonPress-1>',disparaitre)
    return temps
    
def disparaitre(evt):
    global  penal, text_compteur, nb_partie, consigne
    canv.delete(consigne)
    nb_partie = nb_partie + 1
    text_compteur = canv.create_text(350, 30, font =("Consolas", 14, "bold"), text = 'partie n°'+ str(nb_partie))
    canv.delete(star)
    etoile_a_l_ecran = False
    penal = 0
    canv.bind('<ButtonPress-1>', penalite)
    attente_ms = int(1000 * (0.2 + 4 * random()))
    fen.after(attente_ms, apparaitre)
       
def apparaitre():
    global start
    etoile(350, 200, 50)
    start = time.time()
    canv.bind('<ButtonPress-1>', chrono)
    
    
def jeu(evt):
    global nb_partie, text_compteur, consigne
    bouton_jeu.unbind('<ButtonPress-1>')
    canv.delete(mode_emploi)
    nb_partie = 0
    consigne = canv.create_text(50, 30, font =("Consolas", 14, "bold"), anchor ='nw', text = "Cliquer sur la fenêtre pour faire disparaître l'étoile\npuis cliquez le plus rapidement possible lorsqu'elle réapparait.")
    etoile(350, 200, 50)
    canv.bind('<ButtonPress-1>', disparaitre)

# -------------------PROGRAMME PRINCIPAL------------------------
        
# création du fichier csv contenant les temps de reaction
mon_fichier = open("MesTempsReaction2.csv", "w")    
mon_fichier.write("partie numero;temps;penalite") 
    
#Création de la fenêtre de jeu
fen = tk.Tk()
fen.title("Mesurez votre temps de réaction!")
fen.geometry('700x500')
fen.resizable(width = False, height = False) 

canv = tk.Canvas(fen, height = 420, width = 700, bg = "pink")
canv.place(x = 0, y = 0)
page_presentation()

#Creation et positionnement des boutons Quitter et Démarrer 
bouton_jeu=tk.Button(fen,text="Démarrer!",font=("Consolas",14,"bold"))
bouton_jeu.place(x = 150, y = 440)
bouton_quit=tk.Button(fen, text = "Quitter", font=("Consolas", 14, "bold"))
bouton_quit.place(x = 450, y = 440)

#Surveillance des clics sur les boutons
bouton_jeu.bind('<ButtonPress-1>',jeu)
bouton_quit.bind('<ButtonPress-1>', quitter)

fen.mainloop()