蟒龟速度 [英] Python Turtle Speed

查看:19
本文介绍了蟒龟速度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我和我的朋友正在使用海龟开发 Python 游戏.我们的问题在于它定义海龟的部分.我们试图加快每只海龟的速度,但是当我们这样做时,默认速度会运行.为什么会出现这个问题?

My friend and I are working on a Python Game using turtles. Our issue is in the section where it defines the turtles. We are trying to speed each turtle up, but when we do, the default speed runs. Why is this issue occurring?

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

推荐答案

您希望在这里发生什么?

What do you want to happen here?

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

将速度设置为 10(快)以上将其设置为 0(最快).并且您在操作完成后立即将其设置为 3(慢).

Setting the speed above 10 (fast) sets it to 0 (fastest). And you're setting it to 3 (slow) as soon as the operation is done.

据我所知,您暂时加快了海龟在没有得到太多收益的操作上的速度,例如left() 但让海龟以速度进行应该从中受益的操作,例如motion()

As far as I can tell, you temporarily speed up the turtles on operations that don't get much out of it, e.g. left() but leave the turtles in slow speed for operations that should benefit from it, e.g. motion()

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

I'd suggest you pull out all your speed() calls and rethink them, preferably using the string arguments "slowest", "slow", "normal", "fast" & "fastest" to help document what you're doing and avoid going out of range.

这篇关于蟒龟速度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆