在Python 3.9中增加游戏的乌龟速度



我一直在用turtle制作一个游戏,并用ture.speed(0(将速度设置为0,虽然这还不够快,但我已经做了一些研究,但我找不到任何用于python 3.9的命令来停用动画或提高龟速。有人能帮我加快比赛速度吗?(我只有python 3.9,所以我不能使用tracer(下面是一个代码示例:

import math
import turtle
char = turtle.Turtle()
char.hideturtle()
char.speed(0)
debug = True

def left():
    update(50)

def right():
    update(-50)

def update_prep():
    update(0)

def update(x_adjust):
    char.clear()
    char.penup()
    char.setx(char.xcor() - x_adjust)
    char.pendown()
    char_1()

def char_1():
    char_start_pos = char.pos()
    char.setheading(0)
    char.left(180)
    char.fillcolor('grey')
    char.begin_fill()
    char.forward(10)
    char.right(90)
    char.forward(50)
    char.right(90)
    char.forward(20)
    char.right(90)
    char.forward(50)
    char.right(90)
    char.end_fill()
    char_pos = char.pos()
    char_head = char.heading()
    char.right(180)
    tangent(-25, 15, True)
    char.setheading(0)
    char.left(180)
    char.forward(0)
    for _ in range(36):
        char.forward(1)
        char.left(10)
    char.setheading(char_head)
    char.goto(char_pos)
    char.forward(20)
    char_pos = char.pos()
    char_head = char.heading()
    char.left(90)
    tangent(15, -25, True)
    char.setheading(0)
    char.left(180)
    char.forward(0)
    for _ in range(36):
        char.forward(1)
        char.left(10)
    char.setheading(char_head)
    char.goto(char_pos)
    char.right(90)
    char.forward(50)
    char.left(90)
    char_pos = char.pos()
    char_head = char.heading()
    tangent(-25, 15, True)
    char.setheading(0)
    char.left(0)
    char.forward(0)
    for _ in range(36):
        char.forward(1)
        char.left(10)
    char.setheading(char_head)
    char.goto(char_pos)
    char.right(180)
    char.forward(20)
    char.left(90)
    char.right(0)
    tangent(15, -25, True)
    char.setheading(0)
    char.left(0)
    char.forward(0)
    for _ in range(36):
        char.forward(1)
        char.left(10)
    char.penup()
    char.goto(char_start_pos)
    char.pendown()

def tangent(tangent_height, tangent_width, custom_heading):
    if not custom_heading:
        char.setheading(270)
    angle = math.atan(tangent_width / tangent_height)
    angle = angle * 57.295779513082321578272654463367
    char.left(angle)
    if debug:
        print(angle)
    length = tangent_height*tangent_height + tangent_width*tangent_width
    length = math.sqrt(length)
    char.forward(length)

char_1()
turtle.onkey(left, 'a')
turtle.onkey(right, 'd')
turtle.onkey(update_prep, 'w')
turtle.listen()
turtle.mainloop()

如果/当您发现您确实有tracer时,它应该会解决您的性能问题:

from math import pi, atan, sqrt, degrees
from turtle import Screen, Turtle
from functools import partial
RADIAN = 180 / pi
def update(x_adjust=0):
    char.clear()
    char.penup()
    char.setx(char.xcor() - x_adjust)
    char.pendown()
    char_1()
    screen.update()
def char_1():
    char_start_pos = char.pos()
    char.setheading(180)
    char.fillcolor('grey')
    char.begin_fill()
    char.forward(10)
    char.right(90)
    char.forward(50)
    char.right(90)
    char.forward(20)
    char.right(90)
    char.forward(50)
    char.right(90)
    char.end_fill()
    char_pos = char.pos()
    char_head = char.heading()
    char.right(180)
    tangent(-25, 15, True)
    char.setheading(180)
    char.circle(RADIAN / 10)
    char.setheading(char_head)
    char.goto(char_pos)
    char.forward(20)
    char_pos = char.pos()
    char.left(90)
    tangent(15, -25, True)
    char.setheading(180)
    char.circle(RADIAN / 10)
    char.setheading(char_head)
    char.goto(char_pos)
    char.right(90)
    char.forward(50)
    char.left(90)
    char_pos = char.pos()
    tangent(-25, 15, True)
    char.setheading(0)
    char.circle(RADIAN / 10)
    char.setheading(char_head)
    char.goto(char_pos)
    char.right(180)
    char.forward(20)
    char.left(90)
    char.right(0)
    tangent(15, -25, True)
    char.setheading(0)
    char.circle(RADIAN / 10)
    char.penup()
    char.goto(char_start_pos)
    char.pendown()
def tangent(tangent_height, tangent_width, custom_heading):
    if not custom_heading:
        char.setheading(270)
    angle = atan(tangent_width / tangent_height)
    char.left(degrees(angle))
    length = sqrt(tangent_height * tangent_height + tangent_width * tangent_width)
    char.forward(length)
screen = Screen()
screen.tracer(False)
char = Turtle()
char.hideturtle()
update()
screen.onkey(partial(update, 50), 'a')
screen.onkey(partial(update, -50), 'd')
screen.listen()
screen.mainloop()

最新更新