Bonjour,

J'ai fait l'exo du Swinnen 13.23 v1 ( Chaque utilisation du bouton <A> fera apparaître 3
nouveaux dés (de même taille, plutôt petits) disposés sur une colonne (verticale), les valeurs
de ces dés étant tirées au hasard entre 1 et 6. Chaque nouvelle colonne sera disposée à la droite
de la précédente. Si l’un des tirages de 3 dés correspond à 4, 2, 1 (dans n’importe quel ordre),
un message « gagné » sera affiché dans la fenêtre (ou dans le canevas). Le bouton <B>
provoquera l’effacement complet (pas seulement les points !) de tous les dés affichés)

Quelqu'un peut il corriger mon code pour le rendre plus efficace? Merci

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
#variante 1
from tkinter import *
from random import randrange
 
class FaceDom(object):
    def __init__(self, can, val, pos, taille =70):
        self.can =can
        self.val = val
        # creation du carré
        x, y, c = pos[0], pos[1], taille/2
        self.carre = can.create_rectangle(x -c, y-c, x+c, y+c, fill ='ivory', width =2)
        d = taille/3
        # déclaration de la liste contenant une reference des cercles
        self.pList =[]
        # liste contenant les coordonnées des cercles
        pDispo = [((0,0),), ((-d,d),(d,-d)), ((-d,-d), (0,0), (d,d)),((-d,-d),(-d,d),(d,-d),(d,d)),
                  ((-d,-d),(-d,d),(d,-d),(d,d),(0,0)),((-d,-d),(-d,d),(d,-d),(d,d),(d,0),(-d,0))]
        disp = pDispo[self.val -1]
        # creation des cercles
        for p in disp:
            self.cercle(x +p[0], y +p[1], 5, 'red')
 
    def cercle(self, x, y, r, coul):
        # ajout des cercles
        self.pList.append(self.can.create_oval(x-r, y-r, x+r, y+r, fill=coul))
 
    def effacer(self):
        # efface les dès
        for p in self.pList:
            self.can.delete(p)
        self.can.delete(self.carre)
 
class Projet(Frame):
    def __init__(self, larg, haut):
        Frame.__init__(self)
        self.larg, self.haut = larg, haut
        self.can = Canvas(self, bg='dark green', width =larg, height =haut)
        self.can.pack(padx =5, pady =5)
        self.des=[] #liste contenant les faces des dès
 
        # Creation des boutons
        bList = [("A", self.boutA), ("B", self.boutB),            
            ("Quitter", self.boutQuit)]
        for b in bList:
            Button(self, text =b[0], command =b[1]).pack(side =RIGHT,padx =15, pady =15)
 
 
        self.pack()
 
    def boutA(self):
        rg = len(self.des)/3 #defini le rang
        a,da=0,80       #defini le pas pour l'ordonnée
        valDes = ''
        for i in range(3):
            dx,dy = self.larg/10,self.haut/10
            x = dx + (rg * 80)
            y = dy +a
            self.des.append(FaceDom(self.can,randrange(1,7),(x,y),50))
            a = a + da
            valDes = str(self.des[int(3*rg+i)].val) + valDes # recupere la valeur des 3 dès
        if valDes in ('421','412','214','241','142','124'):
            self.can.create_text(self.larg/2,self.haut/2,text='Gagné',fill ='ivory',font=('Helvetica', 30))
 
 
 
 
    def boutB(self):
        #efface les dès
        for i in range(len(self.des)):
            self.des[i].effacer()
        self.des=[]
 
 
    def boutQuit(self):
        self.master.destroy()
 
Projet(600, 600).mainloop()