Skip to main content
 首页 » 编程设计

python turtle 速

2025年05月04日28qlqwjy

我和我的 friend 正在使用 turtle 开发 Python 游戏。我们的问题在定义 turtle 的部分。我们正在尝试加快每只 turtle 的速度,但当我们这样做时,默认速度运行。为什么会出现这个问题?

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

请您参考如下方法:

你想在这里发生什么?

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

将速度设置为 10(快)以上会将其设置为 0(最快)。一旦操作完成,您就将其设置为 3(慢)。

据我所知,你暂时加快了 turtle 的速度,但它们并没有从中得到太多好处,例如left() 但是让 turtle 保持慢的速度进行应该从中受益的操作,例如运动()

我建议您取消所有的 speed() 调用并重新考虑它们,最好使用字符串参数“slowest”、“slow”、“normal”、“fast”和“fastest” "以帮助记录您正在做的事情并避免超出范围。