Ely*_*d K 1 python turtle-graphics
我无法让我的乌龟跟随箭头键,任何有关如何操作的帮助将不胜感激。我确定这个问题以前有人问过,但我似乎找不到它,而我找到的那些是针对旧版本的。
import turtle
#screen
wn=turtle.Screen()
wn.bgcolor("lightblue")
I plan on this being a spaceship game
#Turtle Player
spaceship= turtle.Turtle()
spaceship.color("red")
spaceship.penup()
speed=1
Run Code Online (Sandbox Code Playgroud)
这就是我卡住的地方,我不知道如何让乌龟跟随方向键
#keyboard bindings
while True:
spaceship.forward(speed)
Run Code Online (Sandbox Code Playgroud)
避免while True:在海龟图形程序中使用无限循环,它可以阻止您的某些事件触发。
下面是我可以想出的最小代码,以使您的宇宙飞船可导航。您应该能够以此为基础:
from turtle import Turtle, Screen
wn = Screen()
wn.bgcolor('lightblue')
spaceship = Turtle()
spaceship.color('red')
spaceship.penup()
speed = 1
def travel():
spaceship.forward(speed)
wn.ontimer(travel, 10)
wn.onkey(lambda: spaceship.setheading(90), 'Up')
wn.onkey(lambda: spaceship.setheading(180), 'Left')
wn.onkey(lambda: spaceship.setheading(0), 'Right')
wn.onkey(lambda: spaceship.setheading(270), 'Down')
wn.listen()
travel()
wn.mainloop()
Run Code Online (Sandbox Code Playgroud)
在发出键盘命令之前单击海龟图形窗口以确保它正在侦听。此外,还有其他方法可以解决按键的工作方式,我在这里使用了绝对运动,但您可能需要相对,每次按下都会增量修改您的方向。
小智 0
我有解决方案给你。该代码并不理想,但它可以工作并且您可以对其进行处理。你必须意识到乌龟有默认位置,你必须调整它。这就是为什么我在设置方法中指出我的乌龟要查找的原因。
现在,你必须记住,right(deg)方法left(deg)说的是“请在给定方向上转动一定程度”。
所以请记住,你最后的方向是什么。
理解此处的关键是您无法访问此处的任何绝对值。您只能更改与您当前职位相关的内容。所以,你不能向左转,但是如果你知道之前的方向,你就知道应该将你的乌龟转动多少度才能真正向左转。
我为您的任务编写的工作代码是:
import turtle
wn = turtle.Screen()
last_pressed = 'up'
def setup(col, x, y, w, s, shape):
turtle.up()
turtle.goto(x,y)
turtle.width(w)
turtle.turtlesize(s)
turtle.color(col)
turtle.shape(shape)
turtle.lt(90)
turtle.down()
wn.onkey(up, "Up")
wn.onkey(left, "Left")
wn.onkey(right, "Right")
wn.onkey(back, "Down")
wn.onkey(quitTurtles, "Escape")
wn.listen()
wn.mainloop()
#Event handlers
def up():
global last_pressed
if last_pressed == 'left':
turtle.rt(90)
turtle.fd(10)
elif last_pressed == 'right':
turtle.lt(90)
turtle.fd(10)
elif last_pressed == 'up':
turtle.fd(10)
else:
turtle.rt(180)
turtle.fd(10)
last_pressed = 'up'
def left():
global last_pressed
if last_pressed == 'left':
turtle.fd(10)
elif last_pressed == 'right':
turtle.lt(180)
turtle.fd(10)
elif last_pressed == 'up':
turtle.lt(90)
turtle.fd(10)
else:
turtle.rt(90)
turtle.fd(10)
last_pressed = 'left'
def right():
global last_pressed
if last_pressed == 'left':
turtle.rt(180)
turtle.fd(10)
elif last_pressed == 'right':
turtle.fd(10)
elif last_pressed == 'up':
turtle.rt(90)
turtle.fd(10)
else:
turtle.lt(90)
turtle.fd(10)
last_pressed = 'right'
def back():
global last_pressed
if last_pressed == 'left':
turtle.lt(90)
turtle.fd(10)
elif last_pressed == 'right':
turtle.rt(90)
turtle.fd(10)
elif last_pressed == 'up':
turtle.rt(180)
turtle.fd(10)
else:
turtle.fd(10)
last_pressed = 'down'
def quitTurtles():
wn.bye()
setup("blue",-200,200,2,2,"turtle")
Run Code Online (Sandbox Code Playgroud)
请记住,乌龟真正转动需要一些时间,所以不要按键,而是单击它们。
我认为你可以更进一步。