1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
| import tkinter as tk
from math import sqrt
# on rentre le numéro de la génération dans le champ prévu dans la fenêtre graphique; on appuie au clavier sur retour chariot
# on clique sur le bouton action
# pour quitter : bouton quit
palette = ["a","b","c","d","e","f"]
palette.reverse()
def gene(event):
global a
"numero de la génération"
a = entree.get()
a = eval(a)
def jeu():
"lancement du jeu"
ca.delete("all")
mavariable.set("en cours")
tu = Turtle()
tu.speed(0)
tu.up()
tu.goto(0,-300)
tu.down()
tu.pensize(4)
dessin(tu,100,a)
mavariable.set("fini")
entree.delete(0,"end")
def dessin(t,l,n,coul ="#ff00ff"):
"ce que fait la tortue t"
if n == 0 :
pass # on ne fait rien;
else :
ch = "#00"
ind = n %5
ch += palette[ind]
ch = ch +"000"
t.color(ch)
t.begin_fill()
t.down()
t.forward(l)
t.left(90)
t.forward(l)
a,b = t.position()
angle1 = t.heading()
# on sauvegarde la position ainsi que l'angle avec x'ox
t.left(90)
t.forward(l)
c,d = t.position()
angle2 = t.heading()
# nvlle sauvegarde
t.left(90)
t.forward(l)
t.up()
t.hideturtle()
t.end_fill()
t.goto(a,b)
t.setheading(angle1)
# on oriente la tortue selon l'angle sauvé
t.left(45)
t.forward(l*sqrt(2)/2)
t.left(180)
t.down()
dessin(t,l*sqrt(2)/2,n-1,ch)
# appel récursif
t.up()
t.goto(c,d)
t.down()
t.setheading(angle2)
t.right(135)
t.showturtle()
dessin(t,l*sqrt(2)/2,n-1,ch)
#second appel récursif
##########################################
#####################################
# ce qui suit concerne tkinter sous jacent à turtle : les widgets, boutons etc
ca = getcanvas()# le canevas dont dépend la tortue,
root =ca.master #
root.title("arbre de pythagore")
# titre de root
mavariable = tk.StringVar()
bu1 = tk.Button(root,text = "quit",command = root.destroy,bg = "red")
bu1.pack(side = "left")
bu2 = tk.Button(root,text = "action",command = jeu,bg = "blue")
bu2.pack(side = "left")
label = tk.Label(root,textvariable = mavariable,fg = "red")
label2 = tk.Label(root,text = 'génération ?')
entree = tk.Entry(root,width = 5)
entree.pack(side = "right")
entree.bind('<Return>',gene)
# en appuyant sur retour chariot la fonction gene est appelée
# à modifier pour ne pas avoir à appuyer sur retourchariot entree.get
label2.pack(side = "right")
label.pack()
root.mainloop() |
Partager