Liaison de plusieurs pressions de touches dans Turtle Graphics
Dans le développement de jeux, la coordination des entrées utilisateur nécessite des techniques de liaison de touches fiables. Cet article explique comment lier plusieurs pressions de touches ensemble dans des graphiques de tortue, permettant ainsi des actions complexes lorsque certaines combinaisons sont enfoncées.
Énoncé du problème :
Créer une connexion Jeu Dot Python où :
Approche initiale :
Le code suivant représente une première tentative :
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")
Défis :
Le code ci-dessus n'enregistrera pas plusieurs pressions de touches simultanément. Par exemple, appuyer sur Haut et Droite n'exécutera l'action que pour la deuxième touche enfoncée.
Solution alternative :
En raison des limitations de onkeypress(), une alternative une approche est nécessaire. Dans cette solution, les pressions sur les touches sont enregistrées dans une liste et un minuteur vérifie périodiquement les combinaisons enregistrées et exécute les actions appropriées.
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()
Cette solution résout efficacement le problème, permettant d'enregistrer simultanément plusieurs pressions sur des touches. .
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!