Bonjour, c'est pas la première fois que je poste sur le forum mais :

Je suis (encore) entrain de réaliser un jeu du type "Flappy Bird" par le biais de Tkinter mais je me confronte à un sacré problème...

Le problème réside dans la fonction déplacement() (la première), en effet, j'ai réussi à faire en sorte que dès que l'oiseau touche le sol, le déplacement s'arrête grâce à une condition "if".
J'ai donc voulu mettre en place une deuxième condition grâce à elif pour que le déplacement s'arrête aussi quand l'oiseau touche le plafond sauf que cela ne fonctionne pas.
Et c'est encore pire, cela "annule" la première condition.

De plus, après plusieurs tentatives, rien à changer, je ne comprends pas où réside le problème...

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
# On importe Tkinter
from tkinter import *
# On importe le module random va nous permettre d’utiliser des fonctions générant des nombres aléatoires.
import random
#On importe randint qui va nous perlettre de générer un nombre aléatoire dans un intervalle donné.
from random import randint
 
 
 
global h
global H
 
 
#height est la hauteur
#widhth est la largeur
 
#h est la hauteur du tuyau pointant vers le haut, plus h est grand, plus le tuyau est bas et inversement.
#h maximum = 128
#h minimum = 385
#distance entre les tuyaux vaut 100 pixels
h = randint(128,385)
H = randint (128,385)
 
# On crée une fenêtre, racine de notre interface
fenetre = Tk()
 
#La fonction deplacement va permettre, comme son nom l'indique, de déplacer l'objet (ici l'oiseau)
 
def deplacement():
    #Met en place les coordonnées de l'image
    img_coords=canvas.coords(image_oiseau)
    #Met en place la largeur de l'image
    img_width=O.width()
 
    if img_coords[1] < 416 :  
        #0 représente le déplacmeent de X en abscisse et5 est Y en ordonnée
        canvas.move(image_oiseau,0,5)
        #Il se déplace toutes les 30 millisecondes
        canvas.after (30,deplacement)
 
    elif img_coords[1]>0:
        #0 représente le déplacmeent de X en abscisse et5 est Y en ordonnée
        canvas.move(image_oiseau,0,5)
        #Il se déplace toutes les 30 millisecondes
        canvas.after (30,deplacement)
 
def sauter(event):
    print('sauter')
    for i in range(20 ): 
       canvas.move(image_oiseau,0, -10)
       canvas.move(image_oiseau,0, -10)
       canvas.move(image_oiseau,0, -10)
       canvas.move(image_oiseau,0, -10)
       canvas.move(image_oiseau,0, -10)  
       canvas.update(30)
 
def deplacement1():
    #On commence par associer les coordonnées de l'image à img_coords
    img_coords_sol=canvas.coords(image_sol)
    # On associe ensuite la largeur de l'image à img_width
    img_width_sol=sol.width()
 
#Le chiffre 144 correspond au X de l'image et permet de le déplacer en entier (je crois)    
    if img_coords_sol[0]+img_width_sol >= 144:
        #canvas.move va permettre de déplacer le sol de -5 pixels en abscisse.
        canvas.move(image_sol,-5,0)
        #canvas.after va permettre de déplacer l'image toutes les 40 milisecondes.
        canvas.after (40,deplacement1)
    else:
        img_coords_sol=canvas.coords(image_sol,144,512)
        canvas.move(image_sol,-5,0)
        canvas.after (40,deplacement1)
 
def deplacement2():
    img_coords_copy=canvas.coords(image_sol2)
    img_width_copy=sol2.width()
 
#Si le déplacement est supérieur ou égal à 432 pixels.
    if img_coords_copy[0]+img_width_copy >= 432:
        canvas.move(image_sol2,-5,0)
        canvas.after(40,deplacement2)
#J'ai mis 434 pour X car 432 est le X de l'image afin qu'on ne le voit plus à l'écran.
    else:
        img_coords_copy=canvas.coords(image_sol2,432,512)
        canvas.move(image_sol2,-5,0)
        canvas.after(40,deplacement2)
 
def deplacementT():
    h = randint(128,385)
    img_coords_tuyaux=canvas.coords(image_tuyaux)
    img_width_tuyaux=tuyaux.width()
 
#Plus le chiffre est faible, plus le tuyau se déplace vers le droite.
    if img_coords_tuyaux[0]+img_width_tuyaux >= 288-28:
        canvas.move(image_tuyaux,-5,0)
        canvas.after(40,deplacementT)
    else:
        img_coords_tuyaux=canvas.coords(image_tuyaux,288+28,h)
        canvas.move(image_tuyaux,-5,0)
        canvas.after(40,deplacementT)
 
def deplacementT2():
    H = randint(128,385)
    img_coords_tuyaux2=canvas.coords(image_tuyaux2)
    img_width_tuyaux2=tuyaux2.width()
 
#Plus le chiffre est faible, plus le tuyau se déplace vers le droite.
    if img_coords_tuyaux2[0]+img_width_tuyaux2 >= 288-28:
        canvas.move(image_tuyaux2,-5,0)
        canvas.after(40,deplacementT2)
    else:
        img_coords_tuyaux2=canvas.coords(image_tuyaux2,288+28,H)
        canvas.move(image_tuyaux2,-5,0)
        canvas.after(40,deplacementT2)
 
#On importe les image du jeu
fond = PhotoImage(file="background-day.png")
fond2 = PhotoImage(file="background-night.png")
tuyaux = PhotoImage(file="tuyaux.png")
tuyaux2 = PhotoImage(file="tuyaux2.png")
sol = PhotoImage(file="sol-day.png")
sol2 = PhotoImage(file="sol-day-copy.png")
oiseau = PhotoImage(file="yellowbird-midflap.png")
oiseau2 = PhotoImage(file="bluebird-midflap.png")
oiseau3 = PhotoImage(file="redbird-midflap.png")
 
#On crée une liste comprenant les deux images des fonds du jeu.
fond=[fond,fond2]
#On définit F qui représente le choix aléatoire entre les deux valeurs de la liste "fond" c'est-à-dire une des deux images (nuit ou jour)
F= random.choice(fond)
 
#On refait la même chos epour les oiseaux
oiseau=[oiseau,oiseau2,oiseau3]
O=random.choice(oiseau)
 
# interface racine
#J'ai redéfinit la hauteur pour mettre 510 car le tuyau dépassait (peut-être une erreur à voir avant c'était 512)
#J'ai redéfinit la hauteur pour mettre 286 car le sol dépassait (peut-être une erreur à voir avant c'était 288)
canvas = Canvas(fenetre, width=286, height=510)
 
#On insère les images dans la fenêtre.
canvas.create_image(144,256, anchor=CENTER,image=F)
image_tuyaux = canvas.create_image(288+28,h,anchor=CENTER,image=tuyaux)
image_tuyaux2 = canvas.create_image(432+28+28,H,anchor=CENTER,image=tuyaux2)
image_sol = canvas.create_image(144,512, anchor=S,image=sol)
image_sol2 = canvas.create_image(432,512, anchor=S,image=sol2)
image_oiseau=canvas.create_image(67,244, anchor=S,image=O) 
 
#On démarre les boucles des déplacements    
deplacement()
deplacement1()
deplacement2()
deplacementT()
deplacementT2() 
 
 
# On affiche le label dans la fenêtre
canvas.pack()
canvas.focus_set()
canvas.bind("<space>",sauter) 
 
# On démarre la boucle Tkinter qui s'interompt quand on ferme la fenêtre
fenetre.mainloop()
Nom : background-day.png
Affichages : 898
Taille : 7,4 KoNom : background-night.png
Affichages : 857
Taille : 3,0 KoNom : bluebird-midflap.png
Affichages : 825
Taille : 3,0 KoNom : redbird-midflap.png
Affichages : 823
Taille : 2,9 KoNom : sol-day.png
Affichages : 1176
Taille : 7,3 KoNom : tuyaux.png
Affichages : 2233
Taille : 8,2 KoNom : tuyaux.png
Affichages : 2233
Taille : 8,2 KoNom : yellowbird-midflap.png
Affichages : 818
Taille : 2,9 KoNom : sol-day.png
Affichages : 1176
Taille : 7,3 Ko