La coordination des entrées utilisateur à partir de plusieurs pressions de touche est cruciale dans de nombreuses applications interactives, y compris les jeux. Dans les graphiques Turtle, relier les points en fonction de combinaisons de touches spécifiques est une exigence courante.
Pour gérer efficacement plusieurs pressions de touches ensemble, l'approche suivante a été largement utilisée :
La méthode win.onkeypress() dans Turtle fournit un moyen simple de lier les événements de pression sur une touche à des fonctions spécifiques. En enregistrant des écouteurs d'événements pour chaque touche individuelle, nous pouvons exécuter les actions souhaitées lorsque les touches correspondantes sont enfoncées.
Par exemple, considérons un scénario dans lequel nous voulons que notre tortue se déplace dans différentes directions en fonction de combinaisons de touches. Nous pouvons enregistrer des écouteurs d'événements pour les touches « Haut », « Bas », « Gauche » et « Droite », et définir des fonctions distinctes pour gérer chaque mouvement.
<code class="python">import turtle flynn = turtle.Turtle() win = turtle.Screen() win.listen() def Up(): flynn.setheading(90) flynn.forward(25) def Down(): flynn.setheading(270) flynn.forward(20) def Left(): flynn.setheading(180) flynn.forward(20) def Right(): flynn.setheading(0) flynn.forward(20) win.onkeypress(Up, "Up") win.onkeypress(Down, "Down") win.onkeypress(Left, "Left") win.onkeypress(Right, "Right")</code>
Avec ce code, lorsque l'utilisateur appuie sur la touche « Haut », la Tortue se déplacera de 25 unités vers le nord. De même, la tortue répondra aux pressions sur les touches « Bas », « Gauche » et « Droite ».
La solution ci-dessus couvre les événements d'appui sur une seule touche, mais pour gérer les combinaisons, telles que les touches « Haut » et « Droite » enfoncées ensemble, nous devons utiliser une approche plus avancée.
L'utilisation de la méthode win.onkeypress() exclusivement pour des événements combinés peut entraîner des problèmes de timing et des incohérences. Au lieu de cela, nous pouvons utiliser un mécanisme de minuterie pour vérifier périodiquement l'occurrence de toute combinaison de touches.
<code class="python">from turtle import Turtle, Screen win = Screen() flynn = Turtle('turtle') def process_events(): events = tuple(sorted(key_events)) if events and events in key_event_handlers: (key_event_handlers[events])() key_events.clear() win.ontimer(process_events, 200) def Up(): key_events.add('UP') def Down(): key_events.add('DOWN') def Left(): key_events.add('LEFT') def Right(): key_events.add('RIGHT') def move_up(): flynn.setheading(90) flynn.forward(25) def move_down(): flynn.setheading(270) flynn.forward(20) def move_left(): flynn.setheading(180) flynn.forward(20) def move_right(): flynn.setheading(0) flynn.forward(20) def move_up_right(): flynn.setheading(45) flynn.forward(20) def move_down_right(): flynn.setheading(-45) flynn.forward(20) def move_up_left(): flynn.setheading(135) flynn.forward(20) def move_down_left(): flynn.setheading(225) flynn.forward(20) key_event_handlers = { \ ('UP',): move_up, \ ('DOWN',): move_down, \ ('LEFT',): move_left, \ ('RIGHT',): move_right, \ ('RIGHT', 'UP'): move_up_right, \ ('DOWN', 'RIGHT'): move_down_right, \ ('LEFT', 'UP'): move_up_left, \ ('DOWN', 'LEFT'): move_down_left, \ } key_events = set() win.onkey(Up, "Up") win.onkey(Down, "Down") win.onkey(Left, "Left") win.onkey(Right, "Right") win.listen() process_events() win.mainloop()</code>
Cette approche conserve une liste d'événements clés dans l'ensemble key_events, et chaque fois que la fonction de minuterie est exécutée , il vérifie si des combinaisons sont présentes dans le dictionnaire key_event_handlers. Si une combinaison est trouvée, la fonction de gestionnaire correspondante est exécutée, ce qui permet à la tortue d'effectuer l'action souhaitée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!