A voir également:
- Aide projet python aide au TDAH
- Citizen code python - Guide
- Gantt projet - Télécharger - Gestion de projets
- Musique projet x - Forum Audio
- Musique Du Film "Project X" - Forum Musique / Radio / Clip
- Projet x film ✓ - Forum Musique / Radio / Clip
1 réponse
Bonjour,
Ta fonction move est vraiment chaotique.
Dans une fonction il est nécessaire d'utiliser global uniquement sur les variables qui ont besoin d'être modifiées dans cette fonction, et uniquement si ces variables sont non mutables comme par ex. les int, str, float, tuple.
Pour le déplacement de ta cible, cela se fait avec les méthodes bind des widgets tkinter.
Voici une légère amélioration de ton code.
La fonction init_ball pourrait être largement simplifiée.
Regarde ce qu'affiche evt.keysym dans ta console lorsque tu presses par exemple les touches directionnelles de ton clavier, c'est à partir de ça que tu devras déplacer ta cible selon des directions voulues.
Pour déterminer si la balle entre en contact avec la cible, la méthode find_overlapping du canvas te sera utile, si la balle doit être entièrement située dans la cible alors c'est la méthode find_enclosed de canvas qui sera plus adaptée.
Si tu as des questions, n'hésite pas.
Ta fonction move est vraiment chaotique.
Dans une fonction il est nécessaire d'utiliser global uniquement sur les variables qui ont besoin d'être modifiées dans cette fonction, et uniquement si ces variables sont non mutables comme par ex. les int, str, float, tuple.
Pour le déplacement de ta cible, cela se fait avec les méthodes bind des widgets tkinter.
Voici une légère amélioration de ton code.
from tkinter import * from random import * def move_ball(): global after_id coords = can.coords(ball) if coords[2] < 0 or coords[0] > 300 or coords[3] < 0 or coords[1] > 300: init_ball() can.move(ball, dx, dy) after_id = can.after(ms, move_ball) #definir le debut def start(): bt_start.configure(state='disabled') bt_stop.configure(state='normal') move_ball() #fin du programme def stop(): can.after_cancel(after_id) bt_start.configure(state='normal') bt_stop.configure(state='disabled') def init_ball(): global dx, dy i = randint(0, 1) if i == 0: x = choice((-20, 300)) y = randint(-20, 300) if x == -20: dx = step else: dx = -step if y < 50: dy = step elif y > 250: dy = -step else: dy = choice((step, -step)) else: y = choice((-20, 300)) x = randint(-20, 300) if y == -20: dy = step else: dy = -step if x < 50: dx = step elif x > 250: dx = -step else: dx = choice((step, -step)) can.coords(ball, x, y, x + 20, y + 20) def move_cible(evt): print(evt.keysym) dx, dy = 0, 0 ms = 20 step = 4 # Création de la fenêtre: fen = Tk() fen.title("Aide Au Diagnostic TDAH") # Création du canevas: can = Canvas(fen, bg= "white", width= 300, height= 300) can.grid(row=1, column=0, columnspan=3) # Création de la balle: ball = can.create_oval(0, 0, 0, 0, outline= "black", fill= "black") init_ball() cible = can.create_oval(135, 135, 165, 165, outline="red") # Création du bouton "Débuter la Partie": bt_start = Button(fen, text= "Débuter", command= start) bt_start.grid(row= 0, column= 0) # Création du bouton "Arrêter la Partie": bt_stop = Button(fen, text= "Arrêter", command= stop, state='disabled') bt_stop.grid(row=0, column= 1) # Création du bouton "Quitter": Button(fen, text= "Quitter", command= fen.quit).grid(row=0, column=2) fen.bind('<KeyPress>', move_cible) fen.mainloop()
La fonction init_ball pourrait être largement simplifiée.
Regarde ce qu'affiche evt.keysym dans ta console lorsque tu presses par exemple les touches directionnelles de ton clavier, c'est à partir de ça que tu devras déplacer ta cible selon des directions voulues.
Pour déterminer si la balle entre en contact avec la cible, la méthode find_overlapping du canvas te sera utile, si la balle doit être entièrement située dans la cible alors c'est la méthode find_enclosed de canvas qui sera plus adaptée.
Si tu as des questions, n'hésite pas.
1 déc. 2019 à 19:14
Merci mille fois vous me sauvez la vie !
1 déc. 2019 à 19:24
1 déc. 2019 à 23:23
choice est une fonction du module random comme son nom l'indique permet de choisir une valeur dans une séquence.
step vaut 4, donc au final choisir une valeur parmi (4, -4).
2 déc. 2019 à 18:45
Modifié le 16 janv. 2020 à 09:51