comme ca c'est bon ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 # déplacement du carré canevas.coords(carre, x, y, x+10, y+10) can1.move(carre, pX*dep, pY*dep) # on reprend le prochain pas dans 700 ms fenetre.after(700, move)
Pas tout à fait.
Voici une réponse correcte :
après, il faut décider de quand ou de comment faire varier dep ?
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 def move(): """ mouvements du carré """ global x, y, dep # === FIXME === # # si collision (carré, rond): # supprimer rond touché # générer nouveau rond aléatoire # générer 2 blocs noirs aléatoires # fin si # mise en mouvement if direction == 'gauche': x -= dep elif direction == 'droite': x += dep elif direction == 'haut': y -= dep elif direction == 'bas': y += dep # end if # Si sortie d'un côté, entrée de l'autre côté if y > 500: y = 0 elif y < 0: y = 500 # end if if x > 500: x = 0 elif x < 0: x = 500 # end if # déplacement du carré canevas.coords(carre, x, y, x+10, y+10) # on reprend le prochain pas dans 700 ms fenetre.after(700, move) # end def
coder sous pression, c'est pas top : la programmation demande beaucoup de patience, de calme et de concentration.
sinon, on se met à faire n'importe quoi.
non, moi, je ne sais pas. c'est vous le maître du jeu : c'est à vous de me dire :
- je veux que le rythme s'accélère toutes les 10 secondes
- non, finalement, je préfère que le rythme s'accélère toutes les n boucles d'appel de move()
- oh bah, non, je préfère que dep s'incrémente par tous petits pas, genre dep += 0.1
- oh et puis, non, voici ma propre idée : nous allons incrémenter dep de telle et telle manière...
à vous de jouer !
voici tout mon code: pas de message d'erreur mais le carré ne bouge pas ...
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 #!/usr/bin/env python # -*- coding: utf-8 -*- from random import randrange from Tkinter import * # zone de définition des fonctions def newgame():#definition des aprametres du jeu global x, y # création de l'objet à attraper pX = randrange(5, 495) pY = randrange(5, 495) canevas.create_oval(pX, pY, pX+5, pY+5, outline='white', fill='green') # création de l'obstacle pX = randrange(5, 495) pY = randrange(5, 495) canevas.create_rectangle(pX, pY, pX+20, pY+10, outline='black', fill='black') # mise en mouvement possible du carré direction = '' canevas.coords(carre, x, y, x+10, y+10) # utilisation des flèches du clavier fenetre.bind("<Right>", right) fenetre.bind('<Left>', left) fenetre.bind('<Up>', up) fenetre.bind('<Down>', down) # end def def move():#definitions des mouvements du carré global x, y, dep # mise en mouvement if direction == 'gauche': x -= dep elif direction == 'droite': x += dep elif direction == 'haut': y -= dep elif direction == 'bas': y += dep # end if # déplacement du carré canevas.coords(carre, x, y, x+10, y+10) # on reprend le prochain pas dans 700 ms fenetre.after(700, move) # Si sortie d'un côté, entrée de l'autre côté if y > 500: y = 0 elif y < 0: y = 500 # end if if x > 500: x = 0 elif x < 0: x = 500 # end if # === FIXME === # # si collision (carré, rond): # supprimer rond touché # générer nouveau rond aléatoire # générer 2 blocs noirs aléatoires # fin si # end def # directions def left (event):#mouvement vers la gauche global direction direction = 'gauche' # end def def right (event):#mouvement vers la droite global direction direction = 'droite' # end def def up (event):#mouvement vers le haut global direction direction = 'haut' # end def def down (event):#mouvement vers le bas global direction direction = 'bas' # end def # création de l'interface graphique fenetre = Tk() fenetre.title('Jeu Final') # canevas graphique canevas = Canvas(fenetre, width=500, height=500, bg='#046380') canevas.pack(side=TOP, padx=5, pady=5) # init coordonnées du carré x, y = (235, 250) # dessin du carré carre = canevas.create_rectangle(x, y, x+10, y+10, outline='white', fill='#C03000') # init boutons Button(fenetre, text='New Game', command=newgame).pack(side=LEFT, padx=5, pady=5) Button(fenetre, text='Quitter', command=fenetre.destroy).pack(side=RIGHT, padx=5, pady=5) #infos Label(fenetre, text="Cliquez sur 'New Game' pour commencer").pack(padx=0, pady=11) # on lance la boucle principale fenetre.mainloop()
comme ca
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 #!/usr/bin/env python # -*- coding: utf-8 -*- from random import randrange from Tkinter import * dep+=0.1 # zone de définition des fonctions def newgame():#definition des aprametres du jeu global x, y # création de l'objet à attraper pX = randrange(5, 495) pY = randrange(5, 495) canevas.create_oval(pX, pY, pX+5, pY+5, outline='white', fill='green') # création de l'obstacle pX = randrange(5, 495) pY = randrange(5, 495) canevas.create_rectangle(pX, pY, pX+20, pY+10, outline='black', fill='black') # mise en mouvement possible du carré direction = '' canevas.coords(carre, x, y, x+10, y+10) move () # utilisation des flèches du clavier fenetre.bind("<Right>", right) fenetre.bind('<Left>', left) fenetre.bind('<Up>', up) fenetre.bind('<Down>', down) # end def
OUI pour donner une valeur initiale (initialiser) à la variable dep, mais NON pas la valeur zéro 0 : ça voudrait dire qu'on avance de zéro pixel !
autrement dit, qu'on n'avance pas.
on pourrait par exemple fixer le déplacement initial à 3 pixels :
là, ça devrait marcher, même si vous n'avez toujours pas décidé d'une direction de départ pour le mouvement.
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 #!/usr/bin/env python # -*- coding: utf-8 -*- from random import randrange from Tkinter import * # zone de définition des fonctions def newgame(): """ initialisation du jeu """ global x, y, dep # initialisation de dep dep = 3 # on démarre à 3 pixels # création de l'objet à attraper pX = randrange(5, 495) pY = randrange(5, 495) canevas.create_oval(pX, pY, pX+5, pY+5, outline='white', fill='green') # création de l'obstacle pX = randrange(5, 495) pY = randrange(5, 495) canevas.create_rectangle(pX, pY, pX+20, pY+10, outline='black', fill='black') # mise en mouvement possible du carré direction = '' canevas.coords(carre, x, y, x+10, y+10) move () # utilisation des flèches du clavier fenetre.bind("<Right>", right) fenetre.bind('<Left>', left) fenetre.bind('<Up>', up) fenetre.bind('<Down>', down) # end def
toujours pas
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 #!/usr/bin/env python # -*- coding: utf-8 -*- from random import randrange from Tkinter import * # zone de définition des fonctions def newgame():#definition des aprametres du jeu global x, y # initialisation de dep dep = 3 # on démarre à 3 pixels # création de l'objet à attraper pX = randrange(5, 495) pY = randrange(5, 495) canevas.create_oval(pX, pY, pX+5, pY+5, outline='white', fill='green') # création de l'obstacle pX = randrange(5, 495) pY = randrange(5, 495) canevas.create_rectangle(pX, pY, pX+20, pY+10, outline='black', fill='black') # mise en mouvement possible du carré direction = 'droite' canevas.coords(carre, x, y, x+10, y+10) # utilisation des flèches du clavier fenetre.bind("<Right>", right) fenetre.bind('<Left>', left) fenetre.bind('<Up>', up) fenetre.bind('<Down>', down) # end def def move():#definitions des mouvements du carré global x, y, dep # mise en mouvement if direction == 'gauche': x -= dep elif direction == 'droite': x += dep elif direction == 'haut': y -= dep elif direction == 'bas': y += dep # end if # déplacement du carré canevas.coords(carre, x, y, x+10, y+10) # on reprend le prochain pas dans 700 ms fenetre.after(700, move) # Si sortie d'un côté, entrée de l'autre côté if y > 500: y = 0 elif y < 0: y = 500 # end if if x > 500: x = 0 elif x < 0: x = 500 # end if # === FIXME === # # si collision (carré, rond): # supprimer rond touché # générer nouveau rond aléatoire # générer 2 blocs noirs aléatoires # fin si # end def # directions def left (event):#mouvement vers la gauche global direction direction = 'gauche' # end def def right (event):#mouvement vers la droite global direction direction = 'droite' # end def def up (event):#mouvement vers le haut global direction direction = 'haut' # end def def down (event):#mouvement vers le bas global direction direction = 'bas' # end def # création de l'interface graphique fenetre = Tk() fenetre.title('Jeu Final') # canevas graphique canevas = Canvas(fenetre, width=500, height=500, bg='#046380') canevas.pack(side=TOP, padx=5, pady=5) # init coordonnées du carré x, y = (235, 250) # dessin du carré carre = canevas.create_rectangle(x, y, x+10, y+10, outline='white', fill='#C03000') # init boutons Button(fenetre, text='New Game', command=newgame).pack(side=LEFT, padx=5, pady=5) Button(fenetre, text='Quitter', command=fenetre.destroy).pack(side=RIGHT, padx=5, pady=5) #infos Label(fenetre, text="Cliquez sur 'New Game' pour commencer").pack(padx=0, pady=11) # on lance la boucle principale fenetre.mainloop()
Allô ! On se réveille, Manon :
si vous n'indiquez pas qu'il s'agit de variables globales, ça ne marchera pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 def newgame(): global x, y, dep, direction # initialisation de dep dep = 3 # on démarre à 3 pixels
c'est bin ca marche nous pouvons passer a la suite
comment je le fais accelerer ensuite ?
Eh bien, vous aviez choisi de faire :
il suffit de placer ça dans la fonction move() au bon endroit, évidemment.
Code : Sélectionner tout - Visualiser dans une fenêtre à part dep += 0.1
c'est bon nikel !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 def move():#definitions des mouvements du carré global x, y, dep, direction dep +=0.1 # mise en mouvement if direction == 'gauche': x -= dep elif direction == 'droite': x += dep elif direction == 'haut': y -= dep elif direction == 'bas': y += dep # end if
Perso, je l'aurais mis après :
mais je l'aurais surtout limité à une accélération maximum, par exemple max 20.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 def move():#definitions des mouvements du carré global x, y, dep, direction # direction n'est pas modifiée donc pas utile ici # mise en mouvement if direction == 'gauche': x -= dep elif direction == 'droite': x += dep elif direction == 'haut': y -= dep elif direction == 'bas': y += dep # end if dep += 0.1
comment pourrait-on limiter dep à 20 simplement ?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager