IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Panne de direction


Sujet :

Tkinter Python

  1. #1
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut Panne de direction
    J'ai un petit soucis de direction avec mon auto:
    #On parle en coordonnées anchor Tkinter pour représenter les directions...
    j'ai créer 4 méthodes chacune associer a une flèche du clavier pour la direction et le problème est que sa tournais dans tous les sens correctement:

    -de N vers NE
    -de NE vers E
    -de E vers SE
    -de SE vers S

    et meme l'inverse compris évidement dans l'autre fonction (vers la gauche car la direction se fait en fonction de l'orientation de la voiture)

    et
    -de N vers NW
    -de NW vers W
    -de W vers SW
    -de SW vers S

    et la problème avec l'inversion dés l'ajout de la conditionnelle de S vers SE la voiture ne tourne plus de SW vers S, et second problème la voiture tourne inversement de S vers SE mais pas de S vers SW je ne sais pourquoi pourtant les coordonnées de tournages sont juste et la voiture tourne vers SE alors qu'elle devrait se tourner vers S.
    Je pense que c'est un problème de collision d'attribut, pourtant chaque condition n'est présente qu'une fois par méthode et je suis désespérer.
    Mais assez de théorie, voyez le code, exécuter le au besoin et dite moi ce qui ne roule pas avec mon code, sans code on peut pas rouler: je sais...

    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
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
     
    from Tkinter import *
     
    class Auto () :
     
      def __init__(self) :
     
     
        self.x_0=25
        self.y_0=100
        self.x_1=30
        self.y_1=105
        self.x_2=20
        self.y_2=105
        self.richtung_kontrolle='V'#N
     
      def auto_vorwarts(self, event) :
     
        if self.richtung_kontrolle == 'RV' :#S
          canvas.move(auto, 0, 2)
          self.y_0 += 2
          self.y_1 += 2
          self.y_2 += 2
     
     
        if self.richtung_kontrolle == 'RL' :#SW
          canvas.move(auto, -2, 2)
          self.x_0 -= 2
          self.y_0 += 2
          self.x_1 -= 2
          self.y_1 += 2
          self.x_2 -= 2
          self.y_2 += 2
     
     
        if self.richtung_kontrolle == 'L' :#W
          canvas.move(auto, -2, 0)
          self.x_0 -= 2
          self.x_1 -= 2
          self.x_2 -= 2
     
     
        if self.richtung_kontrolle == 'VL' :#NW
          canvas.move(auto, -2, -2)
          self.x_0 -= 2
          self.y_0 -= 2
          self.x_1 -= 2
          self.y_1 -= 2
          self.x_2 -= 2
          self.y_2 -= 2
     
     
        if self.richtung_kontrolle == 'RR' :#NE
          canvas.move(auto, 2, 2)
          self.x_0 += 2
          self.y_0 += 2
          self.x_1 += 2
          self.y_1 += 2
          self.x_2 += 2
          self.y_2 += 2
     
        if self.richtung_kontrolle == 'R' :#E
          canvas.move(auto, 2, 0)
          self.x_0 += 2
          self.x_1 += 2
          self.x_2 += 2
     
        if self.richtung_kontrolle == 'VR' :#NE
          canvas.move(auto, 2, -2)
          self.x_0 += 2
          self.y_0 -= 2
          self.x_1 += 2
          self.y_1 -= 2
          self.x_2 += 2
          self.y_2 -= 2
     
        if self.richtung_kontrolle == 'V' :#N
          canvas.move(auto, 0, -2)
          self.y_0 -= 2
          self.y_1 -= 2
          self.y_2 -= 2
     
      def auto_ruckwarts(self, event) :
     
        if self.richtung_kontrolle == 'V' :#N
          canvas.move(auto, 0, 2)
          self.y_0 += 2
          self.y_1 += 2
          self.y_2 += 2
     
        if self.richtung_kontrolle == 'VR' :#NE
          canvas.move(auto, -2, 2)
          self.x_0 -= 2
          self.y_0 += 2
          self.x_1 -= 2
          self.y_1 += 2
          self.x_2 -= 2
          self.y_2 += 2
     
        if self.richtung_kontrolle == 'R' :#E
          canvas.move(auto, -2, 0)
          self.x_0 -= 2
          self.x_1 -= 2
          self.x_2 -= 2
     
        if self.richtung_kontrolle == 'RR' :#SE
          canvas.move(auto, -2, -2)
          self.x_0 -= 2
          self.y_0 -= 2
          self.x_1 -= 2
          self.y_1 -= 2
          self.x_2 -= 2
          self.y_2 -= 2  
     
        if self.richtung_kontrolle == 'VL' :#NW
          canvas.move(auto, 2, 2)
          self.x_0 += 2
          self.y_0 += 2
          self.x_1 += 2
          self.y_1 += 2
          self.x_2 += 2
          self.y_2 += 2  
     
        if self.richtung_kontrolle == 'L' :#W
          canvas.move(auto, 2, 0)
          self.x_0 += 2
          self.x_1 += 2
          self.x_2 += 2   
     
        if self.richtung_kontrolle == 'RL' :#SW
          canvas.move(auto, 2, -2)
          self.x_0 += 2
          self.y_0 -= 2
          self.x_1 += 2
          self.y_1 -= 2
          self.x_2 += 2
          self.y_2 -= 2
     
        if self.richtung_kontrolle == 'RV' :#S
          canvas.move(auto, 0, -2)
          self.y_0 -= 2
          self.y_1 -= 2
          self.y_2 -= 2  
     
     
      def auto_rechts(self, event) :
     
        if self.richtung_kontrolle == 'RR' :#SE
          canvas.coords(auto, self.x_0-3, self.y_0+2, self.x_1-2, self.y_1-3, self.x_2+2, self.y_2+3)
          self.x_0= self.x_0 - 3
          self.y_0= self.y_0 + 2
          self.x_1= self.x_1 - 2
          self.y_1= self.y_1 - 3
          self.x_2= self.x_2 + 2
          self.y_2= self.y_2 + 3
          self.richtung_kontrolle= 'RV'#S
     
        if self.richtung_kontrolle == 'R' :#E
          canvas.coords(auto, self.x_0-2, self.y_0+3, self.x_1-3, self.y_1-2, self.x_2+3, self.y_2+2)
          self.x_0= self.x_0 - 2
          self.y_0= self.y_0 + 3
          self.x_1= self.x_1 - 3
          self.y_1= self.y_1 - 2
          self.x_2= self.x_2 + 3
          self.y_2= self.y_2 + 2
          self.richtung_kontrolle= 'RR'#SE
     
        if self.richtung_kontrolle == 'VR' :#NE
          canvas.coords(auto, self.x_0+2, self.y_0+3, self.x_1-3, self.y_1+2, self.x_2+3, self.y_2-2)
          self.x_0= self.x_0 + 2
          self.y_0= self.y_0 + 3
          self.x_1= self.x_1 - 3
          self.y_1= self.y_1 + 2
          self.x_2= self.x_2 + 3
          self.y_2= self.y_2 - 2
          self.richtung_kontrolle= 'R'#E
     
        if self.richtung_kontrolle == 'V' :#N
          canvas.coords(auto, self.x_0+3, self.y_0+2, self.x_1-2, self.y_1+3, self.x_2+2, self.y_2-3)
          self.x_0=self.x_0 + 3
          self.y_0=self.y_0 + 2
          self.x_1=self.x_1 - 2
          self.y_1=self.y_1 + 3
          self.x_2=self.x_2 + 2
          self.y_2=self.y_2 - 3
          self.richtung_kontrolle= 'VR'#NE
     
        if self.richtung_kontrolle == 'VL' :#NW
          canvas.coords(auto, self.x_0+3, self.y_0-2, self.x_1+2, self.y_1+3, self.x_2-2, self.y_2-3)
          self.x_0= self.x_0 + 3
          self.y_0= self.y_0 - 2
          self.x_1= self.x_1 + 2
          self.y_1= self.y_1 + 3
          self.x_2= self.x_2 - 2
          self.y_2= self.y_2 - 3
          self.richtung_kontrolle= 'V'#N
     
        if self.richtung_kontrolle == 'L' :#W
          canvas.coords(auto, self.x_0+2, self.y_0-3, self.x_1+3, self.y_1+2, self.x_2-3, self.y_2-2)
          self.x_0= self.x_0 + 2
          self.y_0= self.y_0 - 3
          self.x_1= self.x_1 + 3
          self.y_1= self.y_1 + 2
          self.x_2= self.x_2 - 3
          self.y_2= self.y_2 - 2
          self.richtung_kontrolle= 'VL'#NW
     
        if self.richtung_kontrolle == 'RL' :#SW
          canvas.coords(auto, self.x_0-2, self.y_0-3, self.x_1+3, self.y_1-2, self.x_2-3, self.y_2+2)
          self.x_0= self.x_0 - 2
          self.y_0= self.y_0 - 3
          self.x_1= self.x_1 + 3
          self.y_1= self.y_1 - 2
          self.x_2= self.x_2 - 3
          self.y_2= self.y_2 + 2
          self.richtung_kontrolle= 'L'#W
     
        #if self.richtung_kontrolle == 'RV' :# cette conditionelle ne fonctionne pas pourtant les coordonnés sont justes.
          #canvas.coords(auto, self.x_0-3, self.y_0-2, self.x_1+2, self.y_1-3, self.x_2-2, self.y_2+3)
     
     
     
      def auto_links(self, event) :
     
        if self.richtung_kontrolle == 'RL' :#SW
          canvas.coords(auto, self.x_0+3, self.y_0+2, self.x_1-2, self.y_1+3, self.x_2+2, self.y_2-3)
          self.x_0= self.x_0 + 3
          self.y_0= self.y_0 + 2
          self.x_1= self.x_1 - 2
          self.y_1= self.y_1 + 3
          self.x_2= self.x_2 + 2
          self.y_2= self.y_2 - 3
          self.richtung_kontrolle= 'RV'#S
     
        if self.richtung_kontrolle == 'L' :#W
          canvas.coords(auto, self.x_0+2, self.y_0+3, self.x_1-3, self.y_1+2, self.x_2+3, self.y_2-2)
          self.x_0= self.x_0 + 2
          self.y_0= self.y_0 + 3
          self.x_1= self.x_1 - 3
          self.y_1= self.y_1 + 2
          self.x_2= self.x_2 + 3
          self.y_2= self.y_2 - 2
          self.richtung_kontrolle= 'RL'#SW
     
        if self.richtung_kontrolle == 'VL' :#NW   
          canvas.coords(auto, self.x_0-2, self.y_0+3, self.x_1-3, self.y_1-2, self.x_2+3, self.y_2+2)
          self.x_0= self.x_0 - 2
          self.y_0= self.y_0 + 3
          self.x_1= self.x_1 - 3
          self.y_1= self.y_1 - 2
          self.x_2= self.x_2 + 3
          self.y_2= self.y_2 + 2
          self.richtung_kontrolle= 'L'#W
     
        if self.richtung_kontrolle == 'V' :#N
          canvas.coords(auto, self.x_0-3, self.y_0+2, self.x_1-2, self.y_1-3, self.x_2+2, self.y_2+3)
          self.x_0= self.x_0 - 3
          self.y_0= self.y_0 + 2
          self.x_1= self.x_1 - 2
          self.y_1= self.y_1 - 3
          self.x_2= self.x_2 + 2
          self.y_2= self.y_2 + 3
          self.richtung_kontrolle= 'VL'#NW
     
     
        if self.richtung_kontrolle == 'VR' :#NE
          canvas.coords(auto, self.x_0-3, self.y_0-2, self.x_1+2, self.y_1-3, self.x_2-2, self.y_2+3)
          self.x_0= self.x_0 - 3
          self.y_0= self.y_0 - 2
          self.x_1= self.x_1 + 2
          self.y_1= self.y_1 - 3
          self.x_2= self.x_2 - 2
          self.y_2= self.y_2 + 3
          self.richtung_kontrolle= 'V'#N
     
        if self.richtung_kontrolle == 'R' :#E
          canvas.coords(auto, self.x_0-2, self.y_0-3, self.x_1+3, self.y_1-2, self.x_2-3, self.y_2+2)
          self.x_0= self.x_0 - 2
          self.y_0= self.y_0 - 3
          self.x_1= self.x_1 + 3
          self.y_1= self.y_1 - 2
          self.x_2= self.x_2 - 3
          self.y_2= self.y_2 + 2
          self.richtung_kontrolle= 'VR'#NE
     
        if self.richtung_kontrolle == 'RR' :#SE
          canvas.coords(auto, self.x_0+2, self.y_0-3, self.x_1+3, self.y_1+2, self.x_2-3, self.y_2-2)
          self.x_0= self.x_0 + 2
          self.y_0= self.y_0 - 3
          self.x_1= self.x_1 + 3
          self.y_1= self.y_1 + 2
          self.x_2= self.x_2 - 3
          self.y_2= self.y_2 - 2
          self.richtung_kontrolle= 'R'
     
        if self.richtung_kontrolle == 'RV' :#S A l'ajout de cette structure conditionnelle l'auto ne peut plus passer de SW a S alors qu'avant oui.
          canvas.coords(auto, self.x_0+3, self.y_0-2, self.x_1+2, self.y_1+3, self.x_2-2, self.y_2-3)
          self.x_0= self.x_0 + 3
          self.y_0= self.y_0 - 2
          self.x_1= self.x_1 + 2
          self.y_1= self.y_1 +3
          self.x_2= self.x_2 - 2
          self.y_2= self.y_2 - 3
          self.richtung_kontrolle= 'RR'#SE
     
    car= Auto()  
    fenster= Tk()
    canvas= Canvas(fenster, height=200, width=200, bg='black')
    bahn= canvas.create_polygon(20, 20, 30,10, 170,10, 180,20, 180,170, 170,180, 30,180, 20,170, 20,20, 30,30, 40,20, 160,20, 170,30, 170,160, 160,170, 40,170, 30,160, 30,30,  fill='white')
    auto= canvas.create_polygon(car.x_0,car.y_0, car.x_1,car.y_1, car.x_2,car.y_2,  fill='red')
    canvas.focus_set()
    canvas.bind("<Up>", car.auto_vorwarts)
    canvas.bind("<Down>", car.auto_ruckwarts)
    canvas.bind("<Right>", car.auto_rechts)
    canvas.bind("<Left>", car.auto_links)
    canvas.pack()
    mainloop()

  2. #2
    Membre confirmé Avatar de sopsag
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 224
    Par défaut
    Premier soucis que je vois :

    tu as des if en cascade qui peuvent s'enchainer.
    Par ex dans auto_links, si tu entres avec self.richtung_kontrolle == 'RL', tu vas l'affecter à 'RV' (7 lignes plus bas : self.richtung_kontrolle= 'RV') du coup, tu vas rentrer dans une des conditions suivantes : if self.richtung_kontrolle == 'RV' et effectuer un traitement de trop.

    --> il faut remplacer les if par des elif (à part le premier) pour éviter d'effectuer plusieurs traitements.

    A mon avis, si tu corriges ça, ça ira beaucoup mieux...

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    c'est toi qui as codé ça ?
    parce que c'est vraiment effreux et hyper compliqué pour ce que ça fait.
    j'ai essayé de trouver la solution, mais c'est trop désespérant, désolé.

    faut vraiment essayer de factoriser

  4. #4
    Membre confirmé Avatar de sopsag
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 224
    Par défaut
    C'est rigolo comme appli pour tester les canvas...
    Du coup, ça m'a donné envie d'en faire une version un peu plus simple et "factorisée" comme dirait josmiley :
    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
    from Tkinter import *
     
    def round( x ):
        return int( x+0.5 ) if x > 0 else -int( -x+0.5 )
     
    class Vector :
     
        sin45 = 0.70710678
     
        def __init__(self,x = 0,y = 0):
            self.x,self.y = x,y
     
        def rot45left(self) :
            self.x,self.y = round( self.x*self.sin45 + self.y*self.sin45 ), round( self.y*self.sin45 - self.x*self.sin45 )   
     
        def rot45right(self) :
            self.x,self.y = round( self.x*self.sin45 - self.y*self.sin45 ), round( self.y*self.sin45 + self.x*self.sin45 )    
     
        def __iadd__ (self,vect):
            self.x += vect.x   
            self.y += vect.y
            return self   
     
        def __add__ (self,vect):
            return Vector( self.x+vect.x,self.y+vect.y )
     
        def __isub__ (self,vect):
            self.x -= vect.x   
            self.y -= vect.y
            return self   
     
        def __sub__ (self,vect):
            return Vector( self.x-vect.x,self.y-vect.y )
     
    class Auto :
        def __init__(self,canvas):
            self.A = Vector(  5,0 )
            self.B = Vector( -5,0 )
            self.C = Vector(  0,5 )
            self.dir = Vector( 0,2 )
            self.pos = Vector( 25,100 )
            self.canvas = canvas
            self.poly = self.canvas.create_polygon( *self._poly(),fill='red')
     
        def left (self):
            self.A.rot45left()
            self.B.rot45left()
            self.C.rot45left()
            self.dir.rot45left()
            self.canvas.coords( self.poly,*self._poly() )
     
        def right (self):
            self.A.rot45right()
            self.B.rot45right()
            self.C.rot45right()
            self.dir.rot45right()
            self.canvas.coords( self.poly,*self._poly() )
     
        def forward (self):
            self.pos += self.dir
            self.canvas.coords( self.poly,*self._poly() )
     
        def backward (self):
            self.pos -= self.dir
            self.canvas.coords( self.poly,*self._poly() )
     
        def _poly (self):
            a = self.A + self.pos
            b = self.B + self.pos
            c = self.C + self.pos
            return ( a.x,a.y,b.x,b.y,c.x,c.y )
     
    def test_Auto ():  
        fenster = Tk()
        canvas  = Canvas(fenster, height=200, width=200, bg='black')
        bahn    = canvas.create_polygon(20, 20, 30,10, 170,10, 180,20, 180,170, 170,180, 30,180, 20,170, 20,20, 30,30, 40,20, 160,20, 170,30, 170,160, 160,170, 40,170, 30,160, 30,30,  fill='white')
        car     = Auto( canvas )  
        canvas.focus_set()
        canvas.bind("<Up>"   , lambda e : car.forward ())
        canvas.bind("<Down>" , lambda e : car.backward())
        canvas.bind("<Right>", lambda e : car.right   ())
        canvas.bind("<Left>" , lambda e : car.left    ())
        canvas.pack()
        mainloop()
     
    test_Auto()
    Mais ce serait pas mal que test_Auto soit une classe...
    Désolé, je ne connais pas l'allemand...

  5. #5
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    Bonjour,

    Lukespywolker tu pourrais utiliser des vecteurs pour representer la direction du vehicule en interne ainsi tu aurais un vecteur pour le deplacement vers l avant et un autre pour le deplacement vers l arriere pour permettre un peu de realisme dans les marches arrieres. si c est un veritable jeu que tu veux monter je suis en train de monter un module pour gerer l appuis multiple de touches avec tkinter .
    donc pour pouvoir faire une marche arriere tout en virant a gauche le module serait utile. Et pour que le truc soit realiste il faut utiliser un vecteur pour la marche arriere. ...

    a +
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  6. #6
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Dossier: erreur de programmation de la direction de la formule 1 de Michael Schumacher
    erreur suvenue: la voiture ne tourne pas correctement vers l'arrière
    cause: surcharge de structures conditionnelles if
    réparation de programmation: remplacement des structures if par des structures elif
    notes: direction de la voiture marche parfaitement.
    programme de substitution créer par le programmeur Sopsag: rejeter pour cause de complication que le cerveau de Schumi ne peut pas traiter(analyse en cours).
    contrat de coopération: accepter.

    Merci de la précision sur le la surcharge de structures if et je prend notes des structures de méthode spéciales que je ne comprend pas encore tout a fait meme si c'est une question d'optimisation du code.

    Je vais pouvoir me lancer après les testes sur la direction positifs grace a votre collaboration et, par dépit, je lance une boite a idées car après plusieurs jours je n'en ai toujours pas:
    comment représenter le bac a sable pour faire ralentir la voiture
    canvas.move(auto, 2, 2)
    self.y_0 < que la vitesse normale
    self.y_1 < que la vitesse normale
    self.y_2 < que la vitesse normale

    quand elle est dedans car on peut fixer des zones mais uniquement des rectangle, chose génantes pour dans les virages(triangle), et

    if auto in (objet polygone bac a sable) :

    ne marche pas.

    un formulaire de problème serai une avancé pour le site (qui reste entre-aide) pour les problèmes compliqués: simple suggestion a méditer.

    Merci de m'avoir aider.

  7. #7
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    Bonjour,

    pour les deplacements il conseille (comme josmiley me l a appris) de se deplacer d un pixel a la fois. ceci dit avec Tkinter c est un peu derangant mais il faut s y prendre avec sleep(repos) donc repos = 0.03 dans le bac a sable repos = 0.02 vitesse normale repos = 0.01 schummacher a mis la nitro bien entendu c est juste un exemple.

    -pour le bac a sable il y canvas.find_overlapping(a,b,c,d) ou a,b,c,d sont les coordonnees du rectangle dont on veut connaitre le objets en contact, ceux a l interieur sont inclus.

    -pour les directions tu pourrais utiliser un vecteur que tu fais roter tout en faisant roter tout la F1 et ensuite tu fais can.move(auto,v[0],v[1]) bien entendu le vecteur doit etre unitaire pour que les collision soient bien prises en compte.
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  8. #8
    Membre confirmé Avatar de sopsag
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 224
    Par défaut
    heu.... s'cusez l'autopromotion, mais il y a une version qui marche, avec des vecteurs et tout et tout, dans mon post d'avant hier...

  9. #9
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    Citation Envoyé par sopsag Voir le message
    heu.... s'cusez l'autopromotion, mais il y a une version qui marche, avec des vecteurs et tout et tout, dans mon post d'avant hier...
    vu et essayé, ça fonctionne bien mais je trouve un peu lourd pour ce que ça doit faire.
    je ne connais quasiment pas tkinter, j'ai donc fais un code utilisant pygame; mais dans l'ensemble le concept est le même:
    les éléments principaux sont:

    -vectors qui est une liste de 8 'vecteurs' puisque le bolide peut prendre 8 positions différentes, correspondant (à peu près) aux angles 0,45,90,135,180,225,270 et 315.

    -l'attribut vec qui est l'index d'une entrée dans vector

    -l'attribut pos qui est la position (le centre du triangle rouge) du bolide.

    -la méthode redraw() qui se charge de calculer les coordonnées des points du polygone.

    le reste c'est de l'évènementiel et de la temporisation ...

    le déplacement se fait en modifiant les coordonnées pos,
    et la rotation en pointant l'entrée suivant ou précédante dans vectors.

    après c'est des maths.


    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
    from pygame import *
     
    screen = display.set_mode((300,300))
    vectors = (0,10),(7,7),(10,0),(7,-7),(0,-10),(-7,-7),(-10,0),(-7,7)
     
    class bolide(list):
    	''
    	def __init__(self):
    		self.vec = 4
    		self.pos = 150,150
    		self.ticks = 0
    		self.redraw()
     
    	def update(self,ev):
    		event.pump()
    		k = key.get_pressed()
    		dir = k[K_UP]-k[K_DOWN]
    		if dir:
    			self.pos = self.pos[0]+(vectors[self.vec][0]*dir)/10.,self.pos[1]+(vectors[self.vec][1]*dir)/10.
    		rot = k[K_LEFT]-k[K_RIGHT]
    		if rot and time.get_ticks()>self.ticks:
    			self.vec = (self.vec+rot)%8
    			self.ticks = time.get_ticks()+100
    		if rot or dir: self.redraw()
     
    	def redraw(self):
    		p1 = self.pos[0]+vectors[self.vec][0], self.pos[1]+vectors[self.vec][1]
    		p2 = self.pos[0]+vectors[(self.vec+3)%8][0], self.pos[1]+vectors[(self.vec+3)%8][1]
    		p3 = self.pos[0]+vectors[(self.vec+5)%8][0], self.pos[1]+vectors[(self.vec+5)%8][1]
    		screen.fill(0)
    		draw.polygon(screen,(250,0,0),(p1,p2,p3),0)
    		display.flip()
     
    b = bolide()
    while True:
    	ev = event.poll()
    	if ev.type == QUIT: exit()
    	b.update(ev)
    	time.wait(20)
    bon, c'est pas très 'pygamien' comme code, mais c'eétait pour respecter le truc du polygone et orientation nord,nord-est,sud, ect ...

  10. #10
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut bolide doit rester centrer
    Je me torture depuis des jours sur le sujet suivant:
    Pour mon jeu d'auto il faut que la voiture reste centré au milieux de l'écran sur un canvas avec scrollregion et mon calcule qui donne le meilleur résultat est le suivant(programme test):
    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
     
    from Tkinter import*
    from __future__ import division
     
    class Auto() :
     
      def __init__(self) :
        self.a=95
        self.b=95
        self.c=105
        self.d=105
     
      def test(self) :
        self.z=round(((1.0/200.0) * 5), 4)
        self.f=(scroller.get[0] + self.z)#avec scroller.get()[1] le décalage est plus grand
        self.a += 5
        self.b += 5
        canvas.coords(oval, self.a, self.b, self.c, self.d)
        canvas.xview('moveto', self.f)
        infos_view.configure(text=scroller.get())
        infos_set.configure(text=self.a)
     
    auto=Auto()    
    fenster=Tk()
    canvas=Canvas(fenster, height=200, width=200, scrollregion=(0,0,400,400) ,  bg='black')
    oval=canvas.create_oval(auto.a,auto.b,auto.c,auto.d, fill='red')
    scroller= Scrollbar(fenster, orient=HORIZONTAL, command=canvas.xview)
    canvas.configure(xscrollcommand=scroller.set)
    infos_view= Label(fenster)
    infos_set= Label(fenster)
    knopf= Button(fenster, text='test', command=auto.test)
    canvas.pack()
    scroller.pack()
    infos_set.pack()
    infos_view.pack()
    knopf.pack()
    mainloop()
    mais il y a toujours un décalage.

    j'ai essayer de convertir les unités Scollbar en unités Canvas avec 'scroll' ou 'moveto' je n'y arrive pas car scrollbar se refère a (coté gauche du slider, coté droit du slider) pour scroller.get() et je ne sais d'ou avec xview('moveto', f) et xview('scroll', f ,'units ') doit prendre un entier ce qui est difficile quand le rapport est 1.0/200 * 5.
    Je pensais qu'une simple conversion suffirai maintenant je suis désespérer.
    J'ai essayer:
    -1.0/400 * 5
    -convertir les 'units' de 'scroll' en pixels Tkinter: trop grand 1 unit = 20 pixels.
    -me répérer au milieux du slider avec 'moveto'.
    Ca ne marche pas car 1.0/200.0 *5 = 0.025 changement pas pris en compte par le 'moveto' car trop petit.
    Merci de bien vouloir m'aider.

  11. #11
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    Citation Envoyé par Luke spywoker Voir le message
    Je me torture depuis des jours sur le sujet suivant:
    Pour mon jeu d'auto il faut que la voiture reste centré au milieux de l'écran ...
    tu veux dire que l'auto ne bouge pas, à par riotation, mais que c'est le background qui bouge ? où bien l'auto ne bouge pas du tout et le background rotationne aussi ?

  12. #12
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Non, les deux doivent bouger, c'est la méthode cartésienne qui consiste a découper un gros problème en plusieurs petits: le programme précédent n'est qu'un test (mouvement d'un objet oval, et mouvement parallèle du canvas avec scrollbar, ici uniquement vers la droite avec indication des coordonnées canvas et scrollbar) afin de pouvoir garder la voiture centré a chaque mouvement sur un canvas plus grand dans le vrai programme de voiture celui la.

  13. #13
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    :==> Dossier: Manque d'huile
    :==> erreur survenue: Impossibilité de faire du dérapage
    :==> cause: le bolide de Michael(Tkinter) ne traite qu'une action à la fois (lorsqu'un binding est activé, il désactive tous les autres)
    :==> réparation de programmation: Inclure le Threading dans le bolide...
    :==> note: Départ pour la piste à essais.
    :==> contrat de coopération:
    * technicien sopsag: reévalué... renouvellement du contrat ...
    * technicien afranck64: test de niveau en cours... attente des résultats ...
    * technicien josmiley: talent indeniable avec Pygame... experimentation niveau jeu Ok... en attente de la hiérarchie...

    -légère panne: Michael Schumacher se plaint -mon volant est comme des pédales- je dois appuyer les touches de manière répétitive. conséquence :je ne peux pas faire de dérapage.
    -léger problème: Michael (Canvas-Tkinter) est jaloux de la qualité de l'engine de Ralf Schumacher (Pygame) qui produit des cascades très fluides et combinables.
    -Les techniciens essaient de nouveaux gadgets sur le bolide de Michael.
    - ... début des tests...
    - ... ...


    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
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
     
    #coding:latin1
     
    #################### Fichier Tk_key.py  v(1.0 mono-Thread)####################
    from time import sleep
    from threading import Thread
     
    class core(Thread):
     
        def __init__(self):
            Thread.__init__(self)
            self.alive = True
            self.db = []
        def pause(self,event=None):
            self.alive = False
     
        def unpause(self,event=None):
            self.alive = True
            for key in self.db:
                key.pressed = False
            self.run()
     
        def add(self,key):
            self.db.append(key)
     
        def kill(self,key):
            if key in self.db:
                self.db.remove(key)
     
        def run(self):
            while self.alive:
                l = len(self.db)
                for key in self.db:
                    key.run_()
                    sleep(0.001)
                sleep(0.002)
     
    class Key:
        motor = core()
     
        def __init__(self,boss,key,func,slp=0.01):
            """Constructeur de classe Key pour des bindings multiples"""
            self.boss = boss
            self.func = func
            self.slp = slp
            self.alive = True
            self.pressed = False
            #self.boss.bind("<FocusIn>",self.unpause) #Pour les versions multi-Thread
            #self.boss.bind("<FocusOut>",self.pause) #Pour les versions multi-Thread
            self.k_p = "<KeyPress "+key+">" #sauvegarde le nom de l'evenement pour Press
            self.k_r = "<KeyRelease "+key+">" #sauvegarde le nom de l'evenement pour Release
            self.f_p = boss.bind(self.k_p,self.press) #fait un binding(attend un appui de touche)
            self.motor.add(self) #La jour la cle au moteur des Keys
            if len(self.motor.db)==1: #Si c'est la premiere instance alors on demarre le moteur
                self.boss.after(250,self.motor.run)
                self.boss.bind("<FocusIn>",self.motor.unpause)
                self.boss.bind("<FocusOut>",self.motor.pause)
     
        def set(self,slp=0.005):
            """Definit le temps de repos de la Key (Non implemente)"""
            if slp>0.001:
                self.slp = slp
     
        def press(self,event=None):
            """Est appele lorsque la touche est presse"""
            self.boss.unbind(self.k_p,self.f_p)
            self.f_r = self.boss.bind(self.k_r,self.release)
            self.pressed = True
            self.func()
            self.run_()
     
        def release(self,event=None):
            """Est appele lorsque la touche est relache"""
            self.boss.unbind(self.k_r)
            self.f_p = self.boss.bind(self.k_p,self.press)
            self.pressed = False
     
        def run_(self,arg=None):
            """Effectue les tache necessaire ..."""
            #Dans les versions ulterieures chaque instance de Key sera
            #un Thread et a la place de if on aura un while
            if self.alive:
                try:
                    self.boss.update()
                    if self.pressed:
                        self.func()
                except:
                    self.alive = False
                    self.motor.kill(self)
                sleep(self.slp)
                #Le sleep(self.slp) sera donc independant de processus
                #en cours.
     
        def pause(self,event=None):
            """met la touche en pause"""
            self.alive = False
            self.motor.kill(self)
     
        def unpause(self,event=None):
            """reactive la touche"""
            self.alive = True
            self.motor.add(self)
            #self.run()
     
     
    # zone de test #
    """
    if __name__ == "__main__":
        from Tkinter import Tk
        
        def f():
            root.title("spy_anf")
            print "spy_anf"
            
        def g():
            root.title("nano is me")
            print "nano is me"
            
        def h():
            root.title("salut les potes")
            print ("salut les potes")
            
        root = Tk()
        k = Key(root,"q",f)
        g = Key(root,"s",g)
        h = Key(root,"d",h)
        root.mainloop()
    """
     
    #################### Fin du fichier Tk_key.py ############
     
     
    #################### Fichier ???car_schum?????.py ########
    from Tkinter import *
    #from Tk_key import Key,sleep  ##Ligne à decommenter
     
    def round( x ):
        if x > 0:
            return int( x+0.5 )
        else:
            return -int( -x+0.5 )
     
    class Vector :
        sin45 = 0.70710678
     
        def __init__(self,x = 0,y = 0):
            self.x,self.y = x,y
     
        def rot45left(self) :
            self.x,self.y = round( self.x*self.sin45 + self.y*self.sin45 ), round( self.y*self.sin45 - self.x*self.sin45 )   
     
        def rot45right(self) :
            self.x,self.y = round( self.x*self.sin45 - self.y*self.sin45 ), round( self.y*self.sin45 + self.x*self.sin45 )    
     
        def __iadd__ (self,vect):
            self.x += vect.x   
            self.y += vect.y
            return self   
     
        def __add__ (self,vect):
            return Vector( self.x+vect.x,self.y+vect.y )
     
        def __isub__ (self,vect):
            self.x -= vect.x   
            self.y -= vect.y
            return self   
     
        def __sub__ (self,vect):
            return Vector( self.x-vect.x,self.y-vect.y )
     
    class Auto :
        def __init__(self,canvas):
            self.A = Vector(  5,0 )
            self.B = Vector( -5,0 )
            self.C = Vector(  0,5 )
            self.dir = Vector( 0,2 )
            self.pos = Vector( 25,100 )
            self.canvas = canvas
            self.poly = self.canvas.create_polygon( *self._poly())
            self.canvas.itemconfigure(self.poly,fill="red")
     
        def left (self):
            self.A.rot45left()
            self.B.rot45left()
            self.C.rot45left()
            self.dir.rot45left()
            self.canvas.coords( self.poly,*self._poly() )    
        def right (self):
            self.A.rot45right()
            self.B.rot45right()
            self.C.rot45right()
            self.dir.rot45right()
            self.canvas.coords( self.poly,*self._poly() )
     
        def forward (self):
            self.pos += self.dir
            self.canvas.coords( self.poly,*self._poly() )
     
        def backward (self):
            self.pos -= self.dir
            self.canvas.coords( self.poly,*self._poly() )
     
        def _poly (self):
            a = self.A + self.pos
            b = self.B + self.pos
            c = self.C + self.pos
            return ( a.x,a.y,b.x,b.y,c.x,c.y )
     
    def test_Auto ():  
        fenster = Tk()
        canvas  = Canvas(fenster, height=200, width=200, bg='black')
        bahn    = canvas.create_polygon(20, 20, 30,10, 170,10, 180,20, 180,170, 170,180, 30,180, 20,170, 20,20, 30,30, 40,20, 160,20, 170,30, 170,160, 160,170, 40,170, 30,160, 30,30,  fill='white')
        car     = Auto( canvas )  
        canvas.focus_set()
        Key(canvas,"Up",car.forward)
        Key(canvas,"Down",car.backward)
        Key(canvas,"Right",car.right)
        Key(canvas,"Left",car.left)
        #canvas.bind("<Up>"   , lambda e : car.forward ())
        #canvas.bind("<Down>" , lambda e : car.backward())
        #canvas.bind("<Right>", lambda e : car.right   ())
        #canvas.bind("<Left>" , lambda e : car.left    ())
        canvas.pack()
        mainloop()
     
    test_Auto()

    Et pour ton fichier test de tout à l'heure

    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
    from __future__ import division
    #coding:latin1
    from Tkinter import*
     
    class Auto() :
     
      def __init__(self) :
        self.a=95
        self.b=95
        self.c=105
        self.d=105
      def test(self) :
        self.z=round(((1.0/1000.0) * 5), 5)
        self.f=(scroller.get()[0] + self.z)#avec scroller.get()[1] le décalage est plus grand
        self.a += 5
        self.b += 5
        #canvas.coords(oval, self.a, self.b, self.c, self.d)
        canvas.xview('moveto', self.f)
        infos_view.configure(text=scroller.get())
        infos_set.configure(text=self.a)
     
    auto=Auto()    
    fenster=Tk()
    canvas=Canvas(fenster, height=200, width=200, scrollregion=(0,0,400,400) ,  bg='black')
    oval=canvas.create_oval(auto.a,auto.b,auto.c,auto.d, fill='red')
    scroller= Scrollbar(fenster, orient=HORIZONTAL, command=canvas.xview)
    canvas.configure(xscrollcommand=scroller.set)
    infos_view= Label(fenster)
    infos_set= Label(fenster)
    knopf= Button(fenster, text='test', command=auto.test)
    canvas.pack()
    scroller.pack()
    infos_set.pack()
    infos_view.pack()
    knopf.pack()
    mainloop()
    ############ Fichier test.py #################
    @+ et bon code
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  14. #14
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Le design aérodynamique du bolide de Michael est pret et Ferrari compte sur le contrat de coopération pour ce qui concerne la direction mais dont les techniciens n'ont pas encore compris le mode de fonctionnement: cerveaux un peu plus évoluer que schumi (Neurones Schumi #-2< Neurones Techniciens#+2) et ont trouver une solution en ce qui concerne la fluidité.
    Pour voir le bolide exécuter:
    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
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
     
    # -*- coding: utf-8 -*-
    from Tkinter import *
     
     
    class Auto() :
     
      def __init__(self) :
        self.spitze_x_01=100
        self.spitze_y_01=100
        self.spitze_x_02=110
        self.spitze_y_02=110
        self.spitze_x_03=90
        self.spitze_y_03=110
     
        self.vorderteil_x_01=102
        self.vorderteil_y_01=110
        self.vorderteil_x_02=102
        self.vorderteil_y_02=114
        self.vorderteil_x_03=106
        self.vorderteil_y_03=114
        self.vorderteil_x_04=106
        self.vorderteil_y_04=118
        self.vorderteil_x_05=102
        self.vorderteil_y_05=118
        self.vorderteil_x_06=102
        self.vorderteil_y_06=122
        self.vorderteil_x_07=98
        self.vorderteil_y_07=122
        self.vorderteil_x_08=98
        self.vorderteil_y_08=118
        self.vorderteil_x_09=94
        self.vorderteil_y_09=118
        self.vorderteil_x_10=94
        self.vorderteil_y_10=114
        self.vorderteil_x_11=98
        self.vorderteil_y_11=114
        self.vorderteil_x_12=98
        self.vorderteil_y_12=110
     
        self.radt_vl_x_01=94
        self.radt_vl_y_01=114
        self.radt_vl_x_02=94
        self.radt_vl_y_02=112
        self.radt_vl_x_03=90
        self.radt_vl_y_03=112
        self.radt_vl_x_04=90
        self.radt_vl_y_04=120
        self.radt_vl_x_05=94
        self.radt_vl_y_05=120
        self.radt_vl_x_06=94
        self.radt_vl_y_06=118
     
        self.radt_vr_x_01=106
        self.radt_vr_y_01=114
        self.radt_vr_x_02=106
        self.radt_vr_y_02=112
        self.radt_vr_x_03=110
        self.radt_vr_y_03=112
        self.radt_vr_x_04=110
        self.radt_vr_y_04=120
        self.radt_vr_x_05=106
        self.radt_vr_y_05=120
        self.radt_vr_x_06=106
        self.radt_vr_y_06=118
     
        self.kern_x_01=106
        self.kern_y_01=122
        self.kern_x_02=110
        self.kern_y_02=126
        self.kern_x_03=110
        self.kern_y_03=134
        self.kern_x_04=106
        self.kern_y_04=138
        self.kern_x_05=94
        self.kern_y_05=138
        self.kern_x_06=90
        self.kern_y_06=134
        self.kern_x_07=90
        self.kern_y_07=126
        self.kern_x_08=94
        self.kern_y_08=122
     
        self.sitz_x_01=102
        self.sitz_y_01=128
        self.sitz_x_02=102
        self.sitz_y_02=132
        self.sitz_x_03=98 
        self.sitz_y_03=132
        self.sitz_x_04=98
        self.sitz_y_04=128
     
        self.hinterteil_x_01=102
        self.hinterteil_y_01=138
        self.hinterteil_x_02=102
        self.hinterteil_y_02=142
        self.hinterteil_x_03=106
        self.hinterteil_y_03=142
        self.hinterteil_x_04=106
        self.hinterteil_y_04=146
        self.hinterteil_x_05=102
        self.hinterteil_y_05=146
        self.hinterteil_x_06=102
        self.hinterteil_y_06=150
        self.hinterteil_x_07=98
        self.hinterteil_y_07=150
        self.hinterteil_x_08=98
        self.hinterteil_y_08=146
        self.hinterteil_x_09=94
        self.hinterteil_y_09=146
        self.hinterteil_x_10=94
        self.hinterteil_y_10=142
        self.hinterteil_x_11=98
        self.hinterteil_y_11=142
        self.hinterteil_x_12=98
        self.hinterteil_y_12=138
     
        self.radt_hl_x_01=94
        self.radt_hl_y_01=142
        self.radt_hl_x_02=94
        self.radt_hl_y_02=140
        self.radt_hl_x_03=90
        self.radt_hl_y_03=140
        self.radt_hl_x_04=90
        self.radt_hl_y_04=148
        self.radt_hl_x_05=94
        self.radt_hl_y_05=148
        self.radt_hl_x_06=94
        self.radt_hl_y_06=146
     
        self.radt_hr_x_01=106
        self.radt_hr_y_01=142
        self.radt_hr_x_02=106
        self.radt_hr_y_02=140
        self.radt_hr_x_03=110
        self.radt_hr_y_03=140
        self.radt_hr_x_04=110
        self.radt_hr_y_04=148
        self.radt_hr_x_05=106
        self.radt_hr_y_05=148
        self.radt_hr_x_06=106
        self.radt_hr_y_06=146
     
        self.flugel_x_01=108
        self.flugel_y_01=150
        self.flugel_x_02=110
        self.flugel_y_02=154
        self.flugel_x_03=90
        self.flugel_y_03=154
        self.flugel_x_04=92
        self.flugel_y_04=150
     
    formel_1= Auto()    
    fenster= Tk()
    canvas= Canvas(fenster, height=200, width=200, bg='black')
    rennbahn= canvas.create_polygon(85,0, 115,0, 115,200, 85,200, fill='ivory') 
    auto= canvas.create_polygon(formel_1.spitze_x_01, formel_1.spitze_y_01, formel_1.spitze_x_02, formel_1.spitze_y_02, formel_1.spitze_x_03, formel_1.spitze_y_03, fill='red')
    auto= canvas.create_polygon(formel_1.vorderteil_x_01, formel_1.vorderteil_y_01, formel_1.vorderteil_x_02, formel_1.vorderteil_y_02, formel_1.vorderteil_x_03, formel_1.vorderteil_y_03, formel_1.vorderteil_x_04, formel_1.vorderteil_y_04, formel_1.vorderteil_x_05, formel_1.vorderteil_y_05, formel_1.vorderteil_x_06, formel_1.vorderteil_y_06, formel_1.vorderteil_x_07, formel_1.vorderteil_y_07, formel_1.vorderteil_x_08, formel_1.vorderteil_y_08, formel_1.vorderteil_x_09, formel_1.vorderteil_y_09, formel_1.vorderteil_x_10, formel_1.vorderteil_y_10, formel_1.vorderteil_x_11, formel_1.vorderteil_y_11, formel_1.vorderteil_x_12, formel_1.vorderteil_y_12, fill='red')     
    auto= canvas.create_polygon(formel_1.radt_vl_x_01, formel_1.radt_vl_y_01, formel_1.radt_vl_x_02, formel_1.radt_vl_y_02, formel_1.radt_vl_x_03, formel_1.radt_vl_y_03, formel_1.radt_vl_x_04, formel_1.radt_vl_y_04, formel_1.radt_vl_x_05, formel_1.radt_vl_y_05, formel_1.radt_vl_x_06, formel_1.radt_vl_y_06, fill='black')
    auto= canvas.create_polygon(formel_1.radt_vr_x_01, formel_1.radt_vr_y_01, formel_1.radt_vr_x_02, formel_1.radt_vr_y_02, formel_1.radt_vr_x_03, formel_1.radt_vr_y_03, formel_1.radt_vr_x_04, formel_1.radt_vr_y_04, formel_1.radt_vr_x_05, formel_1.radt_vr_y_05, formel_1.radt_vr_x_06, formel_1.radt_vr_y_06, fill='black')
    auto= canvas.create_polygon(formel_1.kern_x_01, formel_1.kern_y_01, formel_1.kern_x_02, formel_1.kern_y_02, formel_1.kern_x_03, formel_1.kern_y_03, formel_1.kern_x_04, formel_1.kern_y_04, formel_1.kern_x_05, formel_1.kern_y_05,  formel_1.kern_x_06, formel_1.kern_y_06, formel_1.kern_x_07, formel_1.kern_y_07, formel_1.kern_x_08, formel_1.kern_y_08, fill='red')          
    auto= canvas.create_polygon(formel_1.sitz_x_01, formel_1.sitz_y_01, formel_1.sitz_x_02, formel_1.sitz_y_02, formel_1.sitz_x_03, formel_1.sitz_y_03, formel_1.sitz_x_04, formel_1.sitz_y_04, fill='black')
    auto= canvas.create_polygon(formel_1.hinterteil_x_01, formel_1.hinterteil_y_01, formel_1.hinterteil_x_02, formel_1.hinterteil_y_02, formel_1.hinterteil_x_03, formel_1.hinterteil_y_03, formel_1.hinterteil_x_04, formel_1.hinterteil_y_04, formel_1.hinterteil_x_05, formel_1.hinterteil_y_05, formel_1.hinterteil_x_06, formel_1.hinterteil_y_06, formel_1.hinterteil_x_07, formel_1.hinterteil_y_07, formel_1.hinterteil_x_08, formel_1.hinterteil_y_08, formel_1.hinterteil_x_09, formel_1.hinterteil_y_09, formel_1.hinterteil_x_10, formel_1.hinterteil_y_10, formel_1.hinterteil_x_11, formel_1.hinterteil_y_11, formel_1.hinterteil_x_12, formel_1.hinterteil_y_12, fill='red')                       
    auto= canvas.create_polygon(formel_1.radt_hl_x_01, formel_1.radt_hl_y_01, formel_1.radt_hl_x_02, formel_1.radt_hl_y_02, formel_1.radt_hl_x_03, formel_1.radt_hl_y_03, formel_1.radt_hl_x_04, formel_1.radt_hl_y_04, formel_1.radt_hl_x_05, formel_1.radt_hl_y_05, formel_1.radt_hl_x_06, formel_1.radt_hl_y_06, fill='black')
    auto= canvas.create_polygon(formel_1.radt_hr_x_01, formel_1.radt_hr_y_01, formel_1.radt_hr_x_02, formel_1.radt_hr_y_02, formel_1.radt_hr_x_03, formel_1.radt_hr_y_03, formel_1.radt_hr_x_04, formel_1.radt_hr_y_04, formel_1.radt_hr_x_05, formel_1.radt_hr_y_05, formel_1.radt_hr_x_06, formel_1.radt_hr_y_06, fill='black')
    auto =canvas.create_polygon(formel_1.flugel_x_01, formel_1.flugel_y_01, formel_1.flugel_x_02, formel_1.flugel_y_02, formel_1.flugel_x_03, formel_1.flugel_y_03, formel_1.flugel_x_04, formel_1.flugel_y_04, fill='red')
    canvas.pack()
    mainloop()

  15. #15
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    Technicien afranck64 au rapport
    :==> Le design aérodynamique de la F1 de schumi est impécable
    C'est de l'art à l'état pur
    :==> Quelques problèmes de compréhension sur le mode déplacement de la F1 de schumi: ne sait pas si il y a une image en "arrière plan" qui se déplacera également.
    :==> Quelques modifs effectuées sur le code pour pouvoir déplacement le bolide de schumi

    :==>....
    :==> Attente des résultats des tests par schumi

    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
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
     
    # -*- coding: utf-8 -*-
    ################################################"
    from time import sleep
    from threading import Thread
     
    class core(Thread):
     
        def __init__(self):
            Thread.__init__(self)
            self.alive = True
            self.db = []
        def pause(self,event=None):
            self.alive = False
     
        def unpause(self,event=None):
            self.alive = True
            for key in self.db:
                key.pressed = False
            self.run()
     
        def add(self,key):
            self.db.append(key)
     
        def kill(self,key):
            if key in self.db:
                self.db.remove(key)
     
        def run(self):
            while self.alive:
                l = len(self.db)
                for key in self.db:
                    key.run_()
                    sleep(0.001)
                sleep(0.002)
     
    class Key:
        motor = core()
     
        def __init__(self,boss,key,func,slp=0.02):
            """Constructeur de classe Key pour des bindings multiples"""
            self.boss = boss
            self.func = func
            self.slp = slp
            self.alive = True
            self.pressed = False
            #self.boss.bind("<FocusIn>",self.unpause) #Pour les versions multi-Thread
            #self.boss.bind("<FocusOut>",self.pause) #Pour les versions multi-Thread
            self.k_p = "<KeyPress "+key+">" #sauvegarde le nom de l'evenement pour Press
            self.k_r = "<KeyRelease "+key+">" #sauvegarde le nom de l'evenement pour Release
            self.f_p = boss.bind(self.k_p,self.press) #fait un binding(attend un appui de touche)
            self.motor.add(self) #La jour la cle au moteur des Keys
            if len(self.motor.db)==1: #Si c'est la premiere instance alors on demarre le moteur
                self.boss.after(250,self.motor.run)
                self.boss.bind("<FocusIn>",self.motor.unpause)
                self.boss.bind("<FocusOut>",self.motor.pause)
     
        def set(self,slp=0.005):
            """Definit le temps de repos de la Key (Non implemente)"""
            self.slp = slp
     
        def press(self,event=None):
            """Est appele lorsque la touche est presse"""
            self.boss.unbind(self.k_p,self.f_p)
            self.f_r = self.boss.bind(self.k_r,self.release)
            self.pressed = True
            self.func()
            self.run_()
     
        def release(self,event=None):
            """Est appele lorsque la touche est relache"""
            self.boss.unbind(self.k_r)
            self.f_p = self.boss.bind(self.k_p,self.press)
            self.pressed = False
     
        def run_(self,arg=None):
            """Effectue les tache necessaire ..."""
            #Dans les versions ulterieures chaque instance de Key sera
            #un Thread et a la place de if on aura un while
            if self.alive:
                try:
                    self.boss.update()
                    if self.pressed:
                        self.func()
                except:
                    self.alive = False
                    self.motor.kill(self)
                #Le sleep(self.rps) sera donc independant de processus
                #en cours.
     
        def pause(self,event=None):
            """met la touche en pause"""
            self.alive = False
            self.motor.kill(self)
     
        def unpause(self,event=None):
            """reactive la touche"""
            self.alive = True
            self.motor.add(self)
            #self.run()
    ###################################################
     
     
    from Tkinter import *
     
     
    class Auto() :
        def __init__(self,can=None) :
            self.can = can
            self.spitze = (100,100,110,110,90,110)
     
            self.vorderteil = (102,110,102,114,106,114,106,118,102,118,102,
                                               122,98,122,98,118,94,118,94,114,98,114,98,110)
     
            self.radt_vl = (94,114,94,112,90,112,90,120,94,120,94,118)
     
            self.radt_vr = (106,114,106,112,110,112,110,120,106,120,106,118)
     
            self.kern = (106,122,110,126,110,134,106,138,94,138,90,134,90,126,94,122)
     
            self.sitz = (102,128,102,132,98,132,98,128)
     
            self.hinterteil = (102,138,102,142,106,142,106,146,102,146,102,
                                               150,98,150,98,146,94,146,94,142,98,142,98,138)
     
            self.radt_hl = (94,142,94,140,90,140,90,148,94,148,94,146)
     
            self.radt_hr = (106,142,106,140,110,140,110,148,106,148,106,146)
     
            self.flugel = (108,150,110,154,90,154,92,150)
     
            self.db = [] #Speicht die Bild für die Motion.
     
        def draw_auto(self):
            draw = self.can.create_polygon
            num = draw(*self.spitze,fill="red")
            self.db.append(num)
            num = draw(*self.vorderteil,fill="red")
            self.db.append(num)
            num = draw(*self.radt_vl,fill="black")
            self.db.append(num)
            num = draw(*self.radt_vr,fill="black")
            self.db.append(num)
            num = draw(*self.kern,fill="red")
            self.db.append(num)
            num = draw(*self.sitz,fill="black")
            self.db.append(num)
            num = draw(*self.hinterteil,fill="red")
            self.db.append(num)
            num = draw(*self.radt_hl,fill="black")
            self.db.append(num)
            num = draw(*self.radt_hr,fill="black")
            self.db.append(num)
            num = draw(*self.flugel,fill="red")
            self.db.append(num)
     
        def move(self,x,y):
            for itm in self.db:
                self.can.move(itm,x,y)
     
        def left(self,event=None):
            self.move(-0.5,0)
     
        def right(self,event=None):
            self.move(0.5,0)
     
        def up(self,event=None):
            self.move(0,-1)
     
        def down(self,event=None):
            self.move(0,1)
     
     
    #formel_1= Auto()
    if __name__ == "__main__":
        fenster= Tk()
        canvas= Canvas(fenster, height=200, width=200, bg='gold')
        rennbahn= canvas.create_polygon(65,0, 135,0, 135,200, 65,200, fill='ivory')
        canvas.pack()
     
        F1 = Auto(canvas)
        F1.draw_auto()
        """
        fenster.bind("<Up>",F1.up)
        fenster.bind("<Down>",F1.down)
        fenster.bind("<Left>",F1.left)
        fenster.bind("<Right>",F1.right)
        """
        Key(fenster,"Up",F1.up)
        Key(fenster,"Down",F1.down)
        Key(fenster,"Left",F1.left)
        Key(fenster,"Right",F1.right)
     
        mainloop()
    @+ et bon code
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  16. #16
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Schumi: réception radio du technicien afranck64.
    Je vais etre de corvé de calcul de coordonnées pour les rotations (ne m'envoyer pas d'algoryhtmes de calcule de coordonnées il en va de mon intégrité) pendant un bon moment. La voiture va bouger comme dans le programme test avec le triangle en plus de quelques améliorations et va évoluer sur un circuit plus grand que l'écran avec un programme qui centrera la voiture tout au long de la course (le bon rapport étant: round((1.0/400.0 *5), 5) pour le testprog précédent) et je n'ai pas encore d'idée pour le bac a sable et les zones de collisions (a part .find_overlapping(a,b,c,d)). Je vais étudier le module de combinaison de touches, je vous remercie de votre collaboration.
    Schriiizzzz...Boom:
    silence radio...

  17. #17
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    Technicien afranck64:
    ...
    ...tsst - sts sttst
    ...
    ... recu 5/5


    Proposition (s)
    :==> Le Direction-Engine de la F1 de Schumi devrait pouvoir être réutilisable sur d'autres projets. (4x4,Rally... )
    :==> Pour les rotations de coordonnées tu pourrais mettre au point une fonction qui a en entrée 2 points et un angle. le premier étant celui dont on veut la rotation et le second étant celui par rapport auquel on rote.
    Donc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    def rotation(p_a,p_b=(0,0),ang=45):
        ...
        ...
        return (x,y)
    -Fin du rapport
    -tst ... tsstt tsttt
    -...

    #Communication coupé
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sdk Direct X 8.1
    Par ShinMei dans le forum DirectX
    Réponses: 1
    Dernier message: 23/02/2003, 17h39
  2. Accès direct au disque dur
    Par Berdo dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 12/01/2003, 16h21
  3. Direct Graphics
    Par Blustuff dans le forum DirectX
    Réponses: 9
    Dernier message: 28/10/2002, 04h19
  4. Hors série PCTEAM sur Direct 3D
    Par Shakram dans le forum DirectX
    Réponses: 1
    Dernier message: 12/10/2002, 16h34
  5. La communauté Direct X est au repos?
    Par Shakram dans le forum DirectX
    Réponses: 21
    Dernier message: 18/07/2002, 23h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo