Heim > Artikel > Backend-Entwicklung > Wie können Sie in Turtle-Grafiken mehrere Tastenkombinationen für diagonale Bewegungen implementieren?
In Turtle Graphics kann die Registrierung mehrerer Tastendrücke zum Auslösen gewünschter Aktionen erreicht werden. Ein häufiges Beispiel ist, dass sich die Schildkröte diagonal bewegt, wenn sowohl die Aufwärts- als auch die Rechtspfeiltaste gleichzeitig gedrückt werden.
Betrachten Sie den folgenden Codeausschnitt als Ausgangspunkt:
<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>
Während dieser Code ermöglicht Ihnen die Ausführung einzelner Tastenaktionen, gleichzeitiges Drücken von Tasten für diagonale Bewegungen ist nicht möglich.
Ein alternativer Ansatz ist die Verwendung eines Warteschlangen-Ereignissystems. Anstatt Aktionen direkt bei Tastendrücken auszuführen, werden Tastenereignisse in einer Warteschlange gespeichert. Ein Timer überprüft dann regelmäßig die Warteschlange und führt die in der Warteschlange stehenden Aktionen aus. Dieser Ansatz ermöglicht die Erfassung und Kombination mehrerer Tastendrücke.
Der folgende Code demonstriert diesen alternativen Ansatz:
<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>
Bei diesem Ansatz werden die Aufwärts- und Rechtspfeiltasten gleichzeitig gedrückt , wird die Funktion move_up_right ausgelöst, was dazu führt, dass sich die Schildkröte diagonal bewegt.
Das obige ist der detaillierte Inhalt vonWie können Sie in Turtle-Grafiken mehrere Tastenkombinationen für diagonale Bewegungen implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!