from time import strftime from Tkinter import * # les chaines key.keysym.lower() pour les touches de deplacement HAUT = 'up' BAS = 'down' GAUCHE = 'left' DROITE = 'right' #dimensions de la zone de dessin LARGEUR_CANVAS = 400 HAUTEUR_CANVAS = 100 # dimensions des zones (depart et arrivee) et du rayon de l'element DIM_ZONE = 30 RAYON = 10 # constantes de la zone de depart (coordonnées du centre et couleur) X_D = DIM_ZONE Y_D = HAUTEUR_CANVAS / 2 COL_D = 'green' # constantes de la zone d'arrivee (coordonnées du centre et couleur) X_A = LARGEUR_CANVAS - DIM_ZONE Y_A = HAUTEUR_CANVAS / 2 COL_A = 'blue' # les boites definissent les zones d'encombrement des elements de la zone de dessin # on precise Xmin, Ymin, Xmax, Ymax BOX_D = (X_D-DIM_ZONE/2, Y_D-DIM_ZONE/2, X_D+DIM_ZONE/2, Y_D+DIM_ZONE/2) BOX_A = (X_A-DIM_ZONE/2, Y_A-DIM_ZONE/2, X_A+DIM_ZONE/2, Y_A+DIM_ZONE/2) # variables globales col = 'white' #couleur de l'objet x, y = 30, 15 #a modifier pour avoir l'objet dans la zone de depart penalites_canvas = 0 #liste des "box" des obstacles carres. obstacles_carres = [] #Les obstacles sont ajoutes plus loin dans la creation de la fenetre #les StringVar() qui seront utilises comme variabletext d'un label str_var_moment_depart = '' str_var_moment_arrivee = '' str_var_penalites_canvas = '' def renvoie_box_cercle(x, y, rayon): #a modifier pour renvoyer le box de la balle return (5, 8, 15, 18) def renvoie_box_carre(x, y, cote): #a modifier pour renvoyer le box de la boite return (5, 8, 15, 18) def box_hors_canvas(box): hors_canvas = False x_min = box[0] # exemple de lecture d'un element de box #completer les coordonnees extremes et ... #mettre a jour le flag hors_canvas si necessaire return hors_canvas def il_y_a_collision(box1, box2): collision = True obj1_x_min = box1[0] # exemple de lecture d'un element de box #completer les coordonnees extremes et ... #mettre a jour le flag collision si necessaire return collision def calcule_score(duree, penalites_canvas, penalites_obstacles): #la duree est en secondes score = 0 #completer ... return score def gestion_touche(key): global col, x, y global penalites_canvas x_avant_deplacement = x y_avant_deplacement = y ma_touche = key.keysym.lower() #print ma_touche #on active pour le debugg #la touche 'c' modifie la couleur de l'objet if ma_touche == 'c': if col =='white': col = 'red' else: col = 'white' zone_dessin.itemconfig(balle, fill=col) elif ma_touche == BAS or ma_touche == HAUT: #on memorise l'emplacement et on prepare le deplacement print "haut ou bas" #exemple d'action liee a une fleche #on cree le box qu'aurait l'objet si deplace box_obj = renvoie_box_cercle(x, y, RAYON) #on remet l'emplacement initial si on sortait du canvas if box_hors_canvas(box_obj): #completer ici str_var_penalites_canvas.set(str(penalites_canvas)) #on met a jour l'objet zone_dessin.coords(balle, box_obj) #creation de la fenetre my_tk = Tk() my_tk.title("labyrinthe") my_tk.minsize(400, 400) #ecoute d'un enfoncement clavier my_tk.bind("", gestion_touche) #les lignes d'indice 0 et 1 contiennent les instants de depart et arrivee Label(text="moment de depart ").grid(row=0, column=0, sticky=W) Label(text="moment d'arrivee ").grid(row=0, column=2, sticky=W) str_var_moment_depart = StringVar() Label(textvariable = str_var_moment_depart, height = 2).grid(row=1, column=0, columnspan=2, sticky=W) str_var_moment_depart.set('') str_var_moment_arrivee = StringVar() Label(textvariable = str_var_moment_arrivee, height = 2).grid(row=1, column=2, columnspan=2, sticky=W) str_var_moment_arrivee.set('') #la ligne d'indice 2 est la zone de dessin zone_dessin = Canvas(my_tk, width=LARGEUR_CANVAS, height=HAUTEUR_CANVAS, bg = 'black') zone_dessin.grid(row=2, column=0, columnspan=4) zone_dessin.focus_set() zone_dessin.create_rectangle(BOX_D, fill=COL_D) #depart zone_dessin.create_rectangle(BOX_A, fill=COL_A) #arrivee #la balle balle = zone_dessin.create_oval(renvoie_box_cercle(x, y, RAYON), fill=col) #les lignes d'indice 3 et 4 indiquent les penalites Label(text="penalites contour ").grid(row=3, column=0, sticky=W) str_var_penalites_canvas = StringVar() Label(textvariable = str_var_penalites_canvas, height = 2).grid(row=4, column=0, sticky=W) str_var_penalites_canvas.set(penalites_canvas) #la ligne d'indice 9 explique a l'utilisateur Label(text = " Utilisez les fleches pour vous deplacer ").grid(row=9, column=0, columnspan=4) my_tk.mainloop()