Maison > développement back-end > Tutoriel Python > Comment lier plusieurs événements de pression de touche dans Turtle Graphics ?

Comment lier plusieurs événements de pression de touche dans Turtle Graphics ?

Patricia Arquette
Libérer: 2024-11-03 01:11:02
original
1013 Les gens l'ont consulté

How to Bind Multiple Key Press Events in Turtle Graphics?

Liaison de plusieurs événements de pression de touche dans Turtle Graphics

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 :

Utilisation de win.onkeypress( )

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>
Copier après la connexion

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 ».

Gestion des combinaisons

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal