Python海龟绘图速度

3

我和我的朋友正在使用海龟制作一款Python游戏。我们的问题出在定义海龟的部分。我们试图加快每个海龟的速度,但是当我们这样做时,它们仍然以默认速度运行。为什么会出现这个问题?

import turtle


turtle.setup(1000,1000)
wn=turtle.Screen()
wn.title("Snake Game!")

#defines first turtle

t1=turtle.Turtle()
t1.pensize(2)
t1.speed(3)
t1.penup()
t1.goto(0,100)
t1.color("blue", "blue")
t1.pendown()

#defines second turtle

t2=turtle.Turtle()
t2.pensize(2)
t2.speed(3)
t2.penup()
t2.goto(0,-100)
t2.color("red", "red")
t2.pendown()

#defines outline

ol=turtle.Turtle()
ol.pensize(2)
ol.speed(7)
ol.penup()
ol.goto(450,0)
ol.color("black", "black")
ol.pendown()

ol.left(90)
ol.forward(300)
ol.left(90)
ol.forward(900)
ol.left(90)
ol.forward(600)
ol.left(90)
ol.forward(900)
ol.left(90)
ol.forward(300)
ol.hideturtle()

#defines score

score1=int(2)
score2=int(2)

def motion():
    global move, score1, score2
    move = True
    path1 = []
    path2 = []

#prints score


    print("Player 1's score is", str(score1)+"!")
    print("Player 2's score is", str(score2)+"!")

#defines motion

    while move == True:
        global pos1x, pos2x

        t1.forward(1)
        t2.forward(1)

        pos1x = int(t1.xcor())
        pos1y = int(t1.ycor())
        t1xy = (pos1x, pos1y)

        pos2x=int(t2.xcor())
        pos2y=int(t2.ycor())
        t2xy=(pos2x,pos2y)


        path1.append(t1xy)
        path2.append(t2xy)

#calculates score1

        if t1xy in path2:
            score1=int(score1-1)
            print("")
            print("Player 1's score is", str(score1)+"!")
            print("Player 2's score is", str(score2)+"!")
            t1.clear()
            path1 = []
            t2.clear()
            path2 = []
            t1.penup()
            t1.goto(0,100)
            t1.pendown()
            t2.penup()
            t2.goto(0,-100)
            t2.pendown()
            move = False



        if score1==0:
            print("Player 2 wins!")
            exit()
        else:
            move==True



#calculates score2


        if t2xy in path1:
            score2=int(score2-1)
            print("")
            print("Player 1's score is", str(score1)+"!")
            print("Player 2's score is", str(score2)+"!")
            t2.clear()
            path2 = []
            t1.clear()
            path1 = []
            t2.penup()
            t2.goto(0,-100)
            t2.pendown()
            t1.penup()
            t1.goto(0,100)
            t1.pendown()
            move = False

        if score2==0:
           print("Player 1 wins!")
           exit()
        else:
            move==True


#borders

        if pos1x > 450:
            t1.left(135)

        if pos2x > 450:
            t2.left(135)


        if pos1x < -450:
            t1.left(135)

        if pos2x < -450:
            t2.left(135)


        if pos1y > 300:
            t1.left(135)

        if pos2y > 300:
            t2.left(135)

        if pos1y < -300:
            t1.left(135)

        if pos2y < -300:
            t2.left(135)

#defines controls

def left():
    t1.speed(500)
    t1.left(45)
    t1.speed(3)    

def right():
    t1.speed(500)
    t1.right(45)
    t1.speed(3)

def backwards():
    t1.left(180)

def stop():
    global move
    move = False
    t1.forward(0)
    t2.forward(0)


def left2():
    t2.speed(500)
    t2.left(45)
    t2.speed(3)

def right2():
    t2.speed(500)
    t2.right(45)
    t2.speed(3)

def backwards2():
    t2.left(180)

def motion2():

    move = True
    path1 = []
    path2 = []


#onkeys

wn.onkey(left2, "Left")
wn.onkey(right2, "Right")
wn.onkey(backwards2, "Down")

wn.onkey(left, "a")
wn.onkey(right, "d")
wn.onkey(backwards, "s")

wn.onkey(motion, "t")
wn.onkey(stop, "y")
wn.onkey(motion2, "p")



wn.listen()
wn.mainloop()

5
通常情况下,最好发布一个经过缩小的示例,仅显示主要问题,而不是您完整的代码/项目。 - linusg
4个回答

7

你希望在这里发生什么?

def left():
    t1.speed(500)
    t1.left(45)
    t1.speed(3)    

将速度设置为大于10(快速)会将其设置为0(最快)。并且在操作完成后,您将其设置为3(慢速)。

据我所知,您会在那些不需要太多速度的操作(例如left())中暂时加快海龟的速度,但会让海龟以慢速运行那些应该从中受益的操作(例如motion()

我建议您删除所有的speed()调用并进行重新思考,最好使用字符串参数“slowest”,“slow”,“normal”,“fast”和“fastest”来帮助记录您正在执行的操作,并避免超出范围。


2
如果只是调整海龟的速度,可以使用以下代码:

turtle.speed(速度值)

turtle.speed(number)

乌龟的名字是TestTurtle

数字可以从110,必须是整数。例如,您不能将4.7作为数字。

将其设置为大于10将导致速度失效。


speed() 方法接受浮点数,但会将其四舍五入并截断为整数。根据文档,将其设置为大于10(.5)会将速度设置为0。 - cdlane

1

将海龟速度设置超过10没有意义。 如果不使用动画,将速度设置为0:speed(0)。否则使用speed(10)。


0
问题是 - t1.forward(1) t2.forward(1) 这是瓶颈。如果你增加这些值,那么速度会加快,但你会错过碰撞检查。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接