Bonjour,
je débute en python, et j'ai décidé de coder un snake.
Pour materialiser le snake, jutilise des rectangle, dont le nombre augmente selon le nombre de pommes mangées (classique )

Je rencontre pourtant un probleme :

Le serpent laisse derriere lui une "trainée" de rectangle, au lieu qu'ils disparaissent. J'aurais bien voulu les faire disparaitre manuellement, mais je ne trouve aucune fonction me permettant de le faire ...


Pour illustrer mes propos :



Voici mon source :


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
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# -*- coding: utf-8 -*-
 
# import des libs
from Tkinter import *
from random import *
 
 
#déplacement selon la touche appuyée
def keybas(key):
    snake.direction="bas"
def keyhaut(key):
    snake.direction="haut"
def keydroite(key):
    snake.direction="droite"
def keygauche(key):
    snake.direction="gauche"
def clic(key):
    global debut
    #debut du jeu
    if debut==0:
        debut=1
        snake.pomme()
        snake.avancer()
def quitter(key):
    fen.destroy()
 
 
class snake():
    'ceci est mon objet snake'
    global longueur,i
    longueur=4
    #construteur de snake
    def __init__(self,x=250,y=250,direction="droite",olddir="droite",taille_carre=6,
                 taille_serpent=10,time=100,coordx=5,coordy=0,serpentx= [250, 240, 230, 220],
                 serpenty= [250, 250, 250, 250],longueur=3,longueurtable=[0]*longueur,
                 pommex=randrange(1,20),pommey=randrange(1,20), score=-1):
 
 
        self.x=x #                            :  position X de la tete du serpent
        self.y=y #                            :  position Y de la tete du serpent
        self.direction=direction #            :  direction du serpent : gauche/droite/haut/bas
        self.olddir=olddir #                  :  direction précédente du serpent
        self.taille_serpent=taille_serpent#   :  taille du serpent (espace entre deux carrés)
        self.taille_carre=taille_carre #      :  taille des carrés
        self.time=time #                      :  temps entre deux mouvements
        self.coordy=coordy #                  :  coordonnée Y rajoutée pendant le déplacement
        self.coordx=coordx #                  :  coordonnée X rajoutée pendant le déplacement
        self.serpenty=serpenty #              :  position X du serpent (dans la table serpentx[])
        self.serpentx=serpentx #              :  position Y du serpent (dans la table serpenty[])
        self.longueur=longueur #              :  longueur du serpent
        self.longueurtable=longueurtable #    :  longueur du serpent (table)
        self.pommex=pommex*24 #               :  position X de la pomme
        self.pommey=pommey*24 #               :  position Y de la pomme
        self.score=score #                    :  score du joueur  
 
 
 
    #methode pour avancer selon la direction snake.direction
    def avancer(self):
        #collision avec la pomme
        if self.x==self.pommex and self.y==self.pommey: 
            self.pomme()
 
        #a droite...
        if self.direction=="droite" and self.olddir!="gauche":
            self.olddir=self.direction
            self.coordx=self.taille_serpent
            self.coordy=0
 
        #a gauche...
        elif self.direction=="gauche" and self.olddir!="droite":
            self.olddir=self.direction
            self.coordx=self.taille_serpent*(-1)
            self.coordy=0
 
        #en haut...
        elif self.direction=="haut" and self.olddir!="bas":
            self.olddir=self.direction
            self.coordx=0
            self.coordy=self.taille_serpent*(-1)
 
        #en bas....
        elif self.direction=="bas" and self.olddir!="haut":
            self.olddir=self.direction
            self.coordx=0
            self.coordy=self.taille_serpent       
 
 
 
        #on rajoute aux coordonnée coordx ou coordy à la position X et Y
        self.x = self.x+self.coordx
        self.y = self.y+self.coordy
 
        i = len(self.longueurtable)-1
        while (i >= 0): # On maj les coord de chaque carrés
            if i == 0:
                self.serpentx[0]=self.x
                self.serpenty[0]=self.y
            else:
                self.serpentx[i]=self.serpentx[i-1]
                self.serpenty[i]=self.serpenty[i-1]
            i = i - 1
 
        i = 0
        while (i <= (len(self.longueurtable)-1)):
 
            # On dessine les carrés :
 
 
            cadre.create_rectangle(self.serpentx[i], self.serpenty[i], self.serpentx[i]+self.taille_carre,
                                   self.serpenty[i]+self.taille_carre,fill="green")
 
 
            i = i + 1
 
        i = 0
        #et on avance
        fen.after(self.time, self.avancer)
 
 
    def pomme(self):
        self.score=self.score+1
        pommex=randrange(1,10)
        pommey=randrange(1,10)
        self.pommex=pommex*50 #               :  position X de la pomme
        self.pommey=pommey*50 #               :  position Y de la pomme
        print "score=",self.score,"\nsnake.pommex=",snake.pommex,"\nsnake.pommey=",snake.pommey
        self.longueur=self.longueur+1
        self.longueurtable=[0]*self.longueur
        self.serpentx.append(self.serpentx[longueur-1])
        self.serpenty.append(self.serpenty[longueur-1])
        cadre.create_rectangle(self.pommex,self.pommey,
                               self.pommex+self.taille_carre,
                               self.pommey+self.taille_carre,fill="yellow")
 
 
 
 
#creation de lobjet snake
snake=snake()
 
#init variables
debut=0
longueur=4
snake.score=0
#initialisation de la fenetre
fen = Tk()
cadre = Canvas(fen, width =500, height =500, bg="blue")
pret= Label(fen,text="<<<<<<<<<<<<<<<<<Cliquez pour commencer ! (Q pour quitter !)>>>>>>>>>>>>>>>>>>>")
pret.pack()
cadre.pack()
fen.bind("<Up>",keyhaut)
fen.bind("<Down>",keybas)
fen.bind("<Right>",keydroite)
fen.bind("<Left>",keygauche)
fen.bind("<Button-1>",clic)
fen.bind("<q>",quitter)

Merci beaucoup de votre aide !