Je programme Flappy Bird et j'ai presque fini, mais il ne me manque qu'une seule chose: les collisions entre l'oiseau et les tuyaux ... J'ai réussi à m'assurer que si l'oiseau heurte le sol ou disparaisse de l'écran, le jeu est fini (grâce à la fonction fin ()). Cependant, j'aimerais que le jeu se termine également si l'oiseau touche les tuyaux, j'ai essayé de le faire mais l'oiseau s'arrête aléatoirement (voir la partie correspondante dans le programme)... De plus, les personnes qui demandent une telle chose utilisent, en général, Pygame .

Merci d’avance de votre aide en espérant que la solution est simple mais que je ne l’ai pas trouvée.

Voici les images de mon jeu dans un joli petit fichier zip.
D'ailleurs, j'ai aussi réduit l'image de mes tuyaux (après une demande de Bistouille !).

Flappy Bird.zip

Avant de mettre mon code, je voulais aussi vous remercier pour l'aide que vous m'avez apporté lors de la programmation du jeu, vous m'avez bien conseillé et même si j'ai beaucoup travaillé de mon côté, je ne peux négliger le fait que vous m'avez apporté une grande aide donc 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
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
from tkinter import *
import random
from random import randint
 
def sauter(event):
    canvas.move(image_oiseau, 0, -10*DY)
 
def deplacement():
    global mouvement
    global tuyx,tuyx2,h,H,oisx,oisy,solx,sol2x,score
 
    x0, y0, x1, y1 = canvas.bbox(image_oiseau)
    if y1 < 416 :
        canvas.move(image_oiseau, 0, DY)
    else :
        fin()
 
    if y1<=-5:
        fin()
 
#Voici la partie qui devrait gérer les collisions ...
    if y1 >= h :
        fin()
 
    if y1 >= H :
        fin()
 
    if y0<=h-379.8:
        fin()
 
    if y0<=h-379.8:
        fin()
 
#C'est la fin de ladite partie ...
 
    canvas.coords(image_sol,solx,512)  
    if solx >= -144:
        solx=solx-5
    else:
        solx=144
 
    canvas.coords(image_sol2,sol2x,512)
    if sol2x >= 144:
        sol2x=sol2x-5
    else:
        sol2x=432
 
    canvas.coords(image_tuyau_haut,tuyx,h)
    canvas.coords(image_tuyau_bas,tuyx,h-379.8)
    if tuyx>=-28:
        tuyx=tuyx-5
    else:
        tuyx=316
        h=randint(272,523)
        score+=1
 
    canvas.coords(image_tuyau_haut2,tuyx2,H)
    canvas.coords(image_tuyau_bas2,tuyx2,H-379.8)
    if tuyx2>=-28:
        tuyx2=tuyx2-5
    else:
        tuyx2=316
        H=randint(272,523)
        score+=1
 
    lscore.config(text=str(score))    
    mouvement =canvas.after(40,deplacement)  
 
def debut():
    pause=1
    if pause==1:
        M.destroy()
        deplacement()
        canvas.bind("<space>",sauter)  
 
def fin():
    pause=0
    if pause==0:
        canvas.after_cancel(mouvement)
        canvas.unbind("<space>",sauter)
 
def rejouer():
    global tuyx,tuyx2,oisx,oisy,solx,sol2x,score
    tuyx=316
    tuyx2=488
    oisx=67
    oisy=244
    solx=144
    sol2x=432
    score=0
 
 
 
LARGEUR = 286
HAUTEUR = 510
DY = 5
tuyx=316
tuyx2=488 
h=randint(272,523)
H=randint(272,523)
oisx=67
oisy=244
solx=144
sol2x=432
score=0
mouvement=None
 
 
fenetre = Tk()
canvas = Canvas(fenetre, width=LARGEUR, height=HAUTEUR)
 
fond = PhotoImage(file="background-day.png")
fond2 = PhotoImage(file="background-night.png")
fond=[fond,fond2]
F= random.choice(fond)
canvas.create_image(144,256, anchor=CENTER,image=F)
 
tuyau_haut = PhotoImage(file="tuyau_vers_le_haut.png")
image_tuyau_haut = canvas.create_image(tuyx,h,anchor=CENTER,image=tuyau_haut)
image_tuyau_haut2 = canvas.create_image(tuyx2,H,anchor=CENTER,image=tuyau_haut)
 
tuyau_bas = PhotoImage(file="tuyau_vers_le_bas.png")
image_tuyau_bas = canvas.create_image(tuyx,h,anchor=CENTER,image=tuyau_bas)
image_tuyau_bas2 = canvas.create_image(tuyx2,H,anchor=CENTER,image=tuyau_bas)
 
sol = PhotoImage(file="sol-day.png")
image_sol = canvas.create_image(144,512, anchor=S,image=sol)
image_sol2 = canvas.create_image(432,512, anchor=S,image=sol)
 
oiseau = PhotoImage(file="yellowbird-midflap.png")
oiseau2 = PhotoImage(file="bluebird-midflap.png")
oiseau3 = PhotoImage(file="redbird-midflap.png")
oiseau=[oiseau,oiseau2,oiseau3]
O=random.choice(oiseau)
image_oiseau=canvas.create_image(oisx,oisy, anchor=W,image=O) 
 
lscore=Label(fenetre,text='0')
lscore.pack()
 
menu_debut=PhotoImage(file="menu_jeu.png")
M=Button(fenetre,image=menu_debut,relief=FLAT,command=debut)
Menu_w = canvas.create_window(144,256,window=M)
 
canvas.pack()
canvas.focus_set()
 
fenetre.mainloop()