Maison > Article > développement back-end > Comment pouvez-vous implémenter plusieurs combinaisons de touches dans les graphiques Turtle pour un mouvement en diagonale ?
Dans les graphiques de tortue, il est possible d'enregistrer plusieurs pressions de touches pour déclencher les actions souhaitées. Un exemple courant consiste à faire bouger la tortue en diagonale lorsque les touches fléchées vers le haut et vers la droite sont enfoncées simultanément.
Considérez l'extrait de code suivant comme point de départ :
<code class="python">import turtle flynn = turtle.Turtle() win = turtle.Screen() win.bgcolor("LightBlue") flynn.pensize(7) flynn.pencolor("lightBlue") 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) def upright(): flynn.setheading(45) flynn.forward(20) win.onkey(Up, "Up") win.onkey(Down,"Down") win.onkey(Left,"Left") win.onkey(Right,"Right")</code>
Alors que ce code vous permet d'effectuer des actions de touches individuelles, il ne permet pas d'appuyer simultanément sur des touches pour un mouvement en diagonale.
Une approche alternative consiste à utiliser un système d'événements en file d'attente. Au lieu d'exécuter directement des actions en appuyant sur une touche, les événements clés sont stockés dans une file d'attente. Un minuteur vérifie ensuite périodiquement la file d'attente et exécute les actions en file d'attente. Cette approche permet la capture et la combinaison de plusieurs pressions sur des touches.
Le code suivant illustre cette approche alternative :
<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>
Avec cette approche, lorsque les touches fléchées haut et droite sont enfoncées simultanément , la fonction move_up_right est déclenchée, conduisant la tortue à se déplacer en diagonale.
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!