Bonjour,
En TP nous a été demandé de programmer un Pong.
J'ai fait une première version basique qui marche (presque) bien, il faut juste que je mette le changement d'angle en fonction de la zone où la balle touche la palette. Ca doit pas être difficile (modulo, angle...), je préfère me consacrer à quelque chose qui me semble plus intéressant : la gestion des threads.
En effet, dans cette première version (pong.py), il est impossible aux joueurs de descendre en même temps.
J'ai donc cherché comment effectuer la gestion des threads (sachant qu'on n'a pas encore abordé la poo avec python). J'ai trouvé pas mal de sites intéressants.
Dans la deuxième version (pongtest.py), j'ai ajouté le module thread, j'ai créé les 4 threads, j'ai modifié le binding des touches A, Q, <Up> et <Down> quand on appuie/relache.
Quand on appuie sur Q, on appelle la fonction Descend2 avec comme argument l'évènement ("appui sur la touche Q") qui lance le thread correspondant. Si la touche est relachée ("<Releasekey-Q>"), on appelle une fonction similaire qui est censée stopper le thread : nomduthread._Thread__stop()
Le problème, c'est que j'ai l'impression que les threads ne sont pas du tout du tout stoppé, je me chope une erreur : "RuntimeError: threads can only be started once"
J'ai pensé à, au lieu de stopper un thread quand on relache une touche, mettre en pause son exécution jusqu'à l'appui de la même. Mais puisque je ne comprends rien aux certains definitions des threads (avec des __init__ je-sais-plus-trop-quoi) je n'ai pas pu trouver quelque chose permettant de mettre la pause.
Vous trouverez mes codes ci-joints.
J'aurai donc deux questions :
___Existe-t-il un moyen de gérer plusieurs évènements "en même temps" avec tkinter ? J'ai sûrement zappé quelque chose avant d'aller me lancer dans les threads...
___Sinon, comment stopper un thread FACILEMENT ? :o
Merci !
Bonne journée
PS : J'ai aussi un petit problème, j'ai essayé de faire une pop-up d'info avec tkMessageBox.showinfo("You lost", "You lost"), j'ai "NameError: global name 'tkMessageBox' is not defined"....
Partager