Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengikat Berbilang Penekanan Kekunci dalam Grafik Penyu untuk Tindakan Kompleks?

Bagaimana untuk Mengikat Berbilang Penekanan Kekunci dalam Grafik Penyu untuk Tindakan Kompleks?

Linda Hamilton
Linda Hamiltonasal
2024-11-02 21:19:30278semak imbas

How to Bind Multiple Key Presses in Turtle Graphics for Complex Actions?

Mengikat Berbilang Penekanan Kekunci dalam Grafik Penyu

Dalam pembangunan permainan, menyelaraskan input pengguna memerlukan teknik pengikatan kunci yang boleh dipercayai. Artikel ini membincangkan cara untuk mengikat berbilang penekanan kekunci bersama-sama dalam grafik penyu, membolehkan tindakan yang kompleks apabila kombinasi tertentu ditekan.

Pernyataan Masalah:

Buat sambungan-the- Permainan dot Python di mana:

  • Menekan Ke Atas menggerakkan penyu ke atas.
  • Menekan ke Kanan menggerakkan penyu ke kanan.
  • Menekan Ke Atas dan Ke Kanan menggerakkan penyu 45 darjah ke utara -timur.

Pendekatan Awal:

Kod berikut mewakili percubaan awal:

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")

Cabaran:

Kod di atas tidak akan mendaftarkan berbilang penekanan kekunci serentak. Sebagai contoh, menekan Atas dan Kanan hanya akan melaksanakan tindakan untuk kekunci kedua yang ditekan.

Penyelesaian Ganti:

Disebabkan oleh pengehadan onkeypress(), alternatif pendekatan diperlukan. Dalam penyelesaian ini, penekanan kekunci direkodkan dalam senarai, dan pemasa menyemak secara berkala untuk kombinasi berdaftar dan melaksanakan tindakan yang sesuai.

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()

Penyelesaian ini menangani masalah dengan berkesan, membolehkan berbilang tekanan kekunci didaftarkan serentak .

Atas ialah kandungan terperinci Bagaimana untuk Mengikat Berbilang Penekanan Kekunci dalam Grafik Penyu untuk Tindakan Kompleks?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn