Bagaimanakah anda boleh melaksanakan berbilang kombinasi tekan kekunci dalam grafik Turtle untuk pergerakan pepenjuru?

Patricia Arquette
Lepaskan: 2024-11-02 21:27:03
asal
609 orang telah melayarinya

How can you implement multiple key press combinations in Turtle graphics for diagonal movement?

Menggabungkan Berbilang Penekanan Kekunci dalam Grafik Penyu

Dalam grafik penyu, mendaftarkan berbilang tekanan kekunci untuk mencetuskan tindakan yang diingini boleh dicapai. Satu contoh biasa ialah menyuruh penyu bergerak secara menyerong apabila kedua-dua kekunci anak panah Atas dan Kanan ditekan serentak.

Pertimbangkan coretan kod berikut sebagai titik permulaan:

<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>
Salin selepas log masuk

Sementara kod ini membolehkan anda melakukan tindakan kekunci individu, ia tidak memenuhi tekanan kekunci serentak untuk pergerakan pepenjuru.

Pendekatan Alternatif

Pendekatan alternatif ialah menggunakan sistem acara beratur. Daripada melaksanakan tindakan secara langsung apabila menekan kekunci, acara utama disimpan dalam baris gilir. Pemasa kemudian memeriksa baris gilir secara berkala dan melaksanakan tindakan beratur. Pendekatan ini membenarkan penangkapan dan gabungan beberapa tekanan kekunci.

Kod berikut menunjukkan pendekatan alternatif ini:

<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>
Salin selepas log masuk

Dengan pendekatan ini, apabila kekunci anak panah Atas dan Kanan ditekan serentak , fungsi move_up_right dicetuskan, membawa kepada penyu bergerak menyerong.

Atas ialah kandungan terperinci Bagaimanakah anda boleh melaksanakan berbilang kombinasi tekan kekunci dalam grafik Turtle untuk pergerakan pepenjuru?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan