Bonjour !

Je suis élève en terminale S et je cherche à développer un petit jeu dans le cadre de mon projet bac.
Seulement voilà: je n'ai pas la moindre idée pour gérer les collisions entre mon perso et les obstacles/trous !

Le soucis majeur que je vois c'est que je n'arrive pas à identifier facilement mes obstacles (à la base je voulais faire ça par le tag mais lorsque le widget passe par la liste je crois qu'il disparaît) pour mettre des conditions qui géreraient les interactions sol/perso.

Je veux bien une petite astuce ou des pistes

Merci d'avance !

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
 
import tkinter as tk
from random import randrange
 
 
def sol_move(delay=250):
    canvas.move('sol', -20, 0)
    iid = sol_items.pop(0)
    canvas.coords(iid, 380, 380, 400, 400)
    sol_items.append(iid)
    root.after(delay, sol_move)
 
blocage=0
 
def obstacle_move (delay=250):
 
    global blocage
 
    canvas.move('obstacle_up',-20,0)
    canvas.move('obstacle_down',-20,0)
    obs=obstacle_up_items.pop(0)
    obs=obstacle_down_items.pop(0)
 
    if blocage%3==0: 
        proba=randrange(0,11)
 
        if proba<4: # création d'un obstacle 
 
            obs=canvas.create_rectangle( 380, 360, 400, 380, fill='grey', tag='obstacle_up')
            obstacle_up_items.append(obs)
            obs_d=canvas.create_rectangle( 380, 380, 400, 400, fill='grey', tag='obstacle_down')
            obstacle_down_items.append(obs_d)  
 
        elif proba>7: # création d'un trou 
 
            obs=canvas.create_rectangle( 380, 380, 400, 400, fill='grey90', outline='grey90', tag='obstacle_down')
            obstacle_down_items.append(obs)
            obs_u=canvas.create_rectangle( 380, 360, 400, 380, fill='grey90', outline='grey90', tag='obstacle')
            obstacle_up_items.append(obs_u)
 
        else: # recopie d'un terrain "normal" 
            obs_u=canvas.create_rectangle( 380, 360, 400, 380, fill='grey90', outline='grey90', tag='obstacle')
            obs_d=canvas.create_rectangle( 380, 380, 400, 400, fill='grey', tag='obstacle_down')
            obstacle_up_items.append(obs_u)
            obstacle_down_items.append(obs_d)
 
    else : # recopie d'un terrain "normal" 
        obs_u=canvas.create_rectangle( 380, 360, 400, 380, fill='grey90', outline='grey90', tag='obstacle')
        obs_d=canvas.create_rectangle( 380, 380, 400, 400, fill='grey', tag='obstacle_down')
        obstacle_up_items.append(obs_u)
        obstacle_down_items.append(obs_d)
 
    blocage +=1
    root.after(delay, obstacle_move)
 
 
inprogress = False
 
def sauter(e=None):
 
    global inprogress
    if inprogress:
        return
    inprogress = True
 
    def gen_move():
        for n in range(20):
            if n <= 9:
                yield -1
            else:
                yield 1
 
    g_move = gen_move()
 
    def _saut(delay=60):
        global inprogress
 
        try:
            direction = next(g_move)
            canvas.move('carre', 0, direction * 5)
            root.after(delay, _saut)
        except StopIteration:
            inprogress = False
 
    _saut()    
 
 
 
root = tk.Tk()
root.geometry('800x600+350+100')
canvas = tk.Canvas(root, width=400, height=400, bg='grey90')
canvas.pack()
 
 
obstacle_up_items=[]
obstacle_down_items=[]
sol_items = []
 
 
y0 = 380
y1 = y0 +20
y2 = 360
y3 = y2+20
 
 
for j in range(20): #liste des obstacles
    x0 = j*20
    x1 = x0 + 20
    iie = canvas.create_rectangle(x0, y2, x1, y3, fill='grey90', outline='grey90', tag='obstacle_up')
    obstacle_up_items.append(iie)
 
for k in range(20): #liste des trous
    x0 = k*20
    x1 = x0 + 20
    iif = canvas.create_rectangle(x0, y0, x1, y1, fill='grey90', outline='grey90', tag='obstacle_down')
    obstacle_down_items.append(iif)
 
for i in range(20): #liste du sol
    x0 = i*20
    x1 = x0 + 20
    iid = canvas.create_rectangle(x0, y0, x1, y1, fill='grey', tag='sol')
    sol_items.append(iid)   
 
 
X1=40
X2=X1+20
Y1=360
Y2=Y1+20
 
f2=canvas.create_rectangle((X1,Y1,X2,Y2),fill='blue',tag="carre") #Perso bleu
 
sol_move()
obstacle_move()
 
root.bind("<space>",sauter)
 
tk.mainloop()