【问题标题】:Python Turtle: Trying to set a custom shape for my turtles from the poly functionPython Turtle:尝试通过 poly 函数为我的海龟设置自定义形状
【发布时间】:2021-09-04 20:06:03
【问题描述】:

我想让汽车的形状是定制的多边形(不幸的是,它们必须被绘制)但它们只是显示为微小的小箭头。我不确定要做什么以及如何制作,以便它们显示为我绘制的汽车,其中面向右侧的汽车显示为 carright 形状,反之亦然。这是我第一次使用 Stack Overflow,所以请耐心等待。有人知道如何提供帮助吗?我被困住了!!

#import modules
import turtle, random, time

#initiate screen
screen = turtle.Screen()
screen.bgcolor('darkgray')
screen.delay(0)

#initiate sprite
sprite = turtle.Turtle()
sprite.shape('square')
sprite.penup()
sprite.speed(0)
sprite.ht()

#initate player (clone of sprite)
player = sprite.clone()
player.shape('turtle')
player.fillcolor('forestgreen')
player.st()

#draw car (facing left)
turtle.begin_poly()

pen = turtle.Turtle()
pen.speed(0)
pen.pensize(1)
pen.up()
pen.setheading(90)
pen.color('black')
pen.forward(2)
pen.down()
pen.forward(16)
pen.up()

pen.setposition(0 - 1, 0)
pen.forward(1)
pen.down()
pen.forward(1)
pen.color('red')   
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')    
pen.forward(5)
pen.color('red')    
pen.forward(8)
pen.color('black')
pen.forward(1)
pen.color('red')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 - 2,0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(3)
pen.color('red')
pen.forward(12)
pen.color('black')
pen.forward(1)
pen.color('red')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 - 3, 0)

for i in range(1,4):
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(2)
    pen.color('red')
    pen.forward(13)
    pen.color('black')
    pen.forward(1)
    pen.color('red')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.setposition(0-(3+i), 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(2)
pen.color('red')
pen.forward(2)
pen.color('black')
pen.forward(7)
pen.color('red')
pen.forward(4)
pen.color('black')
pen.forward(1)
pen.color('red')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 - 7, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('black')
pen.forward(5)
pen.color('red')
pen.forward(7)
pen.color('black')
pen.forward(5)
pen.color('red')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 - 8,0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(2)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(3)
pen.color('red')
pen.forward(10)
pen.color('black')
pen.forward(1)
pen.color('red')
pen.forward(2)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 - 9, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(2)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('red')
pen.forward(12)
pen.color('black')
pen.forward(1)
pen.color('red')
pen.forward(2)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 - 10, 0)

pen.down()
pen.color('black')
pen.forward(2)
pen.color('firebrick')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('red')
pen.forward(12)
pen.color('black')
pen.forward(1)
pen.color('red')
pen.forward(1)
pen.color('black')
pen.forward(2)
pen.up()
pen.setposition(0 - 11, 0)

for i in range(1,3):
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(1)
    pen.color('red')
    pen.forward(14)
    pen.color('black')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.setposition(0 -(11+i), 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('red')
pen.forward(14)
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 - 14, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('white')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('red')
pen.forward(14)
pen.color('black')
pen.forward(1)
pen.color('white')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 - 15, 0)

for i in range(1,3):
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(1)
    pen.color('red')
    pen.forward(14)
    pen.color('black')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.setposition(0-(15+i), 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('red')
pen.forward(14)
pen.color('black')
pen.forward(3)
pen.up()
pen.setposition(0 - 18, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('red')
pen.forward(14)
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 - 19, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(2)
pen.color('red')
pen.forward(13)
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 - 20, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(2)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('red')
pen.forward(12)
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(2)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 - 21, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('white')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('red')
pen.forward(12)
pen.color('black')
pen.forward(1)
pen.color('white')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 - 22, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('white')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(3)
pen.color('red')
pen.forward(9)
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('white')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 - 23, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(3)
pen.color('red')
pen.forward(6)
pen.color('black')
pen.forward(3)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.up()
pen.setposition(0 - 24, 0 - 1)

pen.down()
pen.color('black')
pen.forward(2)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(4)
pen.color('black')
pen.forward(7)
pen.color('skyblue')
pen.forward(4)
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(2)
pen.up()
pen.setposition(0 - 25, 0 - 2)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('red')
pen.forward(2)
pen.color('black')
pen.forward(2)
pen.color('skyblue')
pen.forward(12)
pen.color('white')
pen.forward(1)
pen.color('skyblue')
pen.forward(2)
pen.color('black')
pen.forward(2)
pen.color('red')
pen.forward(2)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 - 26, 0 - 1)

pen.down()
pen.color('black')
pen.forward(3)
pen.color('skyblue')
pen.forward(14)
pen.color('white')
pen.forward(1)
pen.color('skyblue')
pen.forward(2)
pen.color('black')
pen.forward(3)
pen.up()
pen.setposition(0 - 27, 0)

pen.down()
pen.color('black')
pen.forward(2)
pen.color('skyblue')
pen.forward(14)
pen.color('white')
pen.forward(1)
pen.color('skyblue')
pen.forward(2)
pen.color('black')
pen.forward(2)
pen.up()
pen.setposition(0 - 28, 0)

pen.down()
pen.color('black')
pen.forward(2)
pen.color('skyblue')
pen.forward(17)
pen.color('black')
pen.forward(2)
pen.up()
pen.setposition(0 - 29, 0)

pen.down()
pen.color('black')
pen.forward(4)
pen.color('skyblue')
pen.forward(13)
pen.color('black')
pen.forward(4)
pen.up()
pen.setposition(0 - 30, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(3)
pen.color('black')
pen.forward(3)
pen.color('skyblue')
pen.forward(7)
pen.color('black')
pen.forward(3)
pen.color('red')
pen.forward(3)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 - 31, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(2)
pen.color('red')
pen.forward(4)
pen.color('black')
pen.forward(7)
pen.color('red')
pen.forward(6)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 - 32, 0)

for i in range(1,6):
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(2)
    pen.color('red')
    pen.forward(17)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.setposition(0 -(32+i), 0)  

pen.down()
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(3)
pen.color('red')
pen.forward(16)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 - 38, 0)

pen.down()
pen.color('black')
pen.forward(2)
pen.color('firebrick')
pen.forward(3)
pen.color('red')
pen.forward(14)
pen.color('black')
pen.forward(2)
pen.up()
pen.setposition(0 - 39, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('red')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(3)
pen.color('red')
pen.forward(12)
pen.color('black')
pen.forward(1)
pen.color('red')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 - 40, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('red')
pen.forward(1)
pen.color('black')
pen.forward(2)
pen.color('firebrick')
pen.forward(3)
pen.color('red')
pen.forward(8)
pen.color('black')
pen.forward(2)
pen.color('red')
pen.forward(2)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 - 41, 0 + 1)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('red')
pen.forward(2)
pen.color('black')
pen.forward(11)
pen.color('red')
pen.forward(3)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 - 42, 0 + 2)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('red')
pen.forward(13)
pen.color('firebrick')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 - 43, 0 + 3)

pen.down()
pen.color('black')
pen.forward(2)
pen.color('firebrick')
pen.forward(11)
pen.color('black')
pen.forward(2)
pen.up()
pen.setposition(0 - 44, 0 + 4)

pen.down()
pen.color('black')
pen.forward(11)

pen.hideturtle()

turtle.end_poly()
carleft = turtle.get_poly()
screen.register_shape('carleft', carleft)


#draw car (facing right)
turtle.begin_poly()

pen = turtle.Turtle()
pen.speed(0)
screen = turtle.Screen()
pen.pensize(1)
pen.up()
pen.setheading(90)
pen.color('black')
pen.forward(2)
pen.down()
pen.forward(16)
pen.up()

pen.setposition(0 + 1, 0)
pen.forward(1)
pen.down()
pen.forward(1)
pen.color('red')   
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')    
pen.forward(5)
pen.color('red')    
pen.forward(8)
pen.color('black')
pen.forward(1)
pen.color('red')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 + 2,0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(3)
pen.color('red')
pen.forward(12)
pen.color('black')
pen.forward(1)
pen.color('red')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 + 3, 0)

for i in range(1,4):
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(2)
    pen.color('red')
    pen.forward(13)
    pen.color('black')
    pen.forward(1)
    pen.color('red')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.setposition(0 +(3+i), 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(2)
pen.color('red')
pen.forward(2)
pen.color('black')
pen.forward(7)
pen.color('red')
pen.forward(4)
pen.color('black')
pen.forward(1)
pen.color('red')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 + 7, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('black')
pen.forward(5)
pen.color('red')
pen.forward(7)
pen.color('black')
pen.forward(5)
pen.color('red')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 + 8,0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(2)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(3)
pen.color('red')
pen.forward(10)
pen.color('black')
pen.forward(1)
pen.color('red')
pen.forward(2)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 + 9, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(2)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('red')
pen.forward(12)
pen.color('black')
pen.forward(1)
pen.color('red')
pen.forward(2)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 + 10, 0)

pen.down()
pen.color('black')
pen.forward(2)
pen.color('firebrick')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('red')
pen.forward(12)
pen.color('black')
pen.forward(1)
pen.color('red')
pen.forward(1)
pen.color('black')
pen.forward(2)
pen.up()
pen.setposition(0 + 11, 0)

for i in range(1,3):
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(1)
    pen.color('red')
    pen.forward(14)
    pen.color('black')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.setposition(0 + (11+i), 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('red')
pen.forward(14)
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 + 14, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('white')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('red')
pen.forward(14)
pen.color('black')
pen.forward(1)
pen.color('white')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 + 15, 0)

for i in range(1,3):
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(1)
    pen.color('red')
    pen.forward(14)
    pen.color('black')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.setposition(0 +(15+i), 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('red')
pen.forward(14)
pen.color('black')
pen.forward(3)
pen.up()
pen.setposition(0 + 18, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('red')
pen.forward(14)
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 + 19, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(2)
pen.color('red')
pen.forward(13)
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 + 20, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(2)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('red')
pen.forward(12)
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(2)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 + 21, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('white')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('red')
pen.forward(12)
pen.color('black')
pen.forward(1)
pen.color('white')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 + 22, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('white')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(3)
pen.color('red')
pen.forward(9)
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('white')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 + 23, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(3)
pen.color('red')
pen.forward(6)
pen.color('black')
pen.forward(3)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.up()
pen.setposition(0 + 24, 0 - 1)

pen.down()
pen.color('black')
pen.forward(2)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(4)
pen.color('black')
pen.forward(7)
pen.color('skyblue')
pen.forward(4)
pen.color('black')
pen.forward(1)
pen.color('skyblue')
pen.forward(1)
pen.color('black')
pen.forward(2)
pen.up()
pen.setposition(0 + 25, 0 - 2)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('red')
pen.forward(2)
pen.color('black')
pen.forward(2)
pen.color('skyblue')
pen.forward(12)
pen.color('white')
pen.forward(1)
pen.color('skyblue')
pen.forward(2)
pen.color('black')
pen.forward(2)
pen.color('red')
pen.forward(2)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 + 26, 0 - 1)

pen.down()
pen.color('black')
pen.forward(3)
pen.color('skyblue')
pen.forward(14)
pen.color('white')
pen.forward(1)
pen.color('skyblue')
pen.forward(2)
pen.color('black')
pen.forward(3)
pen.up()
pen.setposition(0 + 27, 0)

pen.down()
pen.color('black')
pen.forward(2)
pen.color('skyblue')
pen.forward(14)
pen.color('white')
pen.forward(1)
pen.color('skyblue')
pen.forward(2)
pen.color('black')
pen.forward(2)
pen.up()
pen.setposition(0 + 28, 0)

pen.down()
pen.color('black')
pen.forward(2)
pen.color('skyblue')
pen.forward(17)
pen.color('black')
pen.forward(2)
pen.up()
pen.setposition(0 + 29, 0)

pen.down()
pen.color('black')
pen.forward(4)
pen.color('skyblue')
pen.forward(13)
pen.color('black')
pen.forward(4)
pen.up()
pen.setposition(0 + 30, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(3)
pen.color('black')
pen.forward(3)
pen.color('skyblue')
pen.forward(7)
pen.color('black')
pen.forward(3)
pen.color('red')
pen.forward(3)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 + 31, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(2)
pen.color('red')
pen.forward(4)
pen.color('black')
pen.forward(7)
pen.color('red')
pen.forward(6)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 + 32, 0)

for i in range(1,6):
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(2)
    pen.color('red')
    pen.forward(17)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.setposition(0 +(32+i), 0)  

pen.down()
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(3)
pen.color('red')
pen.forward(16)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 + 38, 0)

pen.down()
pen.color('black')
pen.forward(2)
pen.color('firebrick')
pen.forward(3)
pen.color('red')
pen.forward(14)
pen.color('black')
pen.forward(2)
pen.up()
pen.setposition(0 + 39, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('red')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(3)
pen.color('red')
pen.forward(12)
pen.color('black')
pen.forward(1)
pen.color('red')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 + 40, 0)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('red')
pen.forward(1)
pen.color('black')
pen.forward(2)
pen.color('firebrick')
pen.forward(3)
pen.color('red')
pen.forward(8)
pen.color('black')
pen.forward(2)
pen.color('red')
pen.forward(2)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 + 41, 0 + 1)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('red')
pen.forward(2)
pen.color('black')
pen.forward(11)
pen.color('red')
pen.forward(3)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 + 42, 0 + 2)

pen.down()
pen.color('black')
pen.forward(1)
pen.color('firebrick')
pen.forward(1)
pen.color('red')
pen.forward(13)
pen.color('firebrick')
pen.forward(1)
pen.color('black')
pen.forward(1)
pen.up()
pen.setposition(0 + 43, 0 + 3)

pen.down()
pen.color('black')
pen.forward(2)
pen.color('firebrick')
pen.forward(11)
pen.color('black')
pen.forward(2)
pen.up()
pen.setposition(0 + 44, 0 + 4)

pen.down()
pen.color('black')
pen.forward(11)

pen.hideturtle()

turtle.end_poly()
carright = turtle.get_poly()
screen.register_shape('carright', carright)

#make list of car directions
car_directions = ['carleft', 'carright']

#make list of cars
cars = []

#make cars
for i in range(7):
    car = sprite.clone()

    if i % 2:
        car.seth(0)
        car.shape(car_directions[1])
            
    else:
        car.seth(180)
        car.shape(car_directions[0])

    car.goto(random.randint(-200,200), -120+i*40)
    car.st()
    cars.append(car)

【问题讨论】:

    标签: python turtle-graphics python-turtle


    【解决方案1】:

    这里有几个问题。第一个是您将 面向对象 乌龟与 功能 乌龟混合。也就是说,你让你的海龟实例 pen 做所有的动作,但是你从默认海龟 turtle 中提取多边形,它还没有去任何地方。

    修复此问题后,您将获得汽车的蒙版图像。下面是您的代码简化后的输出,以显示这一点:

    现在我们看到下一个问题。您可以用多个彩色多边形(多个Shape 组件)组成海龟光标。但是每个单独的多边形都以一种颜色呈现。所以你必须对你的汽车设计采取不同的方法。

    最后,您需要考虑绘制形状的方向以使其与海龟同步,并确保它的质心在(0, 0),因此它与left() 和right() 一起干净地转动.

    # import modules
    from turtle import Screen, Turtle
    from random import randint
    
    # initiate screen
    screen = Screen()
    screen.bgcolor('darkgray')
    
    # draw car
    pen = Turtle()
    pen.speed('fastest')
    
    pen.begin_poly()
    
    pen.up()
    pen.setheading(90)
    pen.forward(2)
    pen.down()
    pen.forward(16)
    pen.up()
    
    pen.goto(1, 0)
    pen.forward(1)
    pen.down()
    pen.forward(1)
    pen.color('red')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(5)
    pen.color('red')
    pen.forward(8)
    pen.color('black')
    pen.forward(1)
    pen.color('red')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.goto(2, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(3)
    pen.color('red')
    pen.forward(12)
    pen.color('black')
    pen.forward(1)
    pen.color('red')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.goto(3, 0)
    
    for i in range(1, 4):
        pen.down()
        pen.color('black')
        pen.forward(1)
        pen.color('firebrick')
        pen.forward(1)
        pen.color('black')
        pen.forward(1)
        pen.color('firebrick')
        pen.forward(2)
        pen.color('red')
        pen.forward(13)
        pen.color('black')
        pen.forward(1)
        pen.color('red')
        pen.forward(1)
        pen.color('black')
        pen.forward(1)
        pen.up()
        pen.goto(3 + i, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(2)
    pen.color('red')
    pen.forward(2)
    pen.color('black')
    pen.forward(7)
    pen.color('red')
    pen.forward(4)
    pen.color('black')
    pen.forward(1)
    pen.color('red')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.goto(7, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(1)
    pen.color('black')
    pen.forward(5)
    pen.color('red')
    pen.forward(7)
    pen.color('black')
    pen.forward(5)
    pen.color('red')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.goto(8, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(2)
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(3)
    pen.color('red')
    pen.forward(10)
    pen.color('black')
    pen.forward(1)
    pen.color('red')
    pen.forward(2)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.goto(9, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(2)
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(1)
    pen.color('red')
    pen.forward(12)
    pen.color('black')
    pen.forward(1)
    pen.color('red')
    pen.forward(2)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.goto(10, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(2)
    pen.color('firebrick')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(1)
    pen.color('red')
    pen.forward(12)
    pen.color('black')
    pen.forward(1)
    pen.color('red')
    pen.forward(1)
    pen.color('black')
    pen.forward(2)
    pen.up()
    pen.goto(11, 0)
    
    for i in range(1, 3):
        pen.down()
        pen.color('black')
        pen.forward(1)
        pen.color('skyblue')
        pen.forward(1)
        pen.color('black')
        pen.forward(1)
        pen.color('firebrick')
        pen.forward(1)
        pen.color('red')
        pen.forward(14)
        pen.color('black')
        pen.forward(1)
        pen.color('skyblue')
        pen.forward(1)
        pen.color('black')
        pen.forward(1)
        pen.up()
        pen.goto(11 + i, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(1)
    pen.color('red')
    pen.forward(14)
    pen.color('black')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.goto(14, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('white')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(1)
    pen.color('red')
    pen.forward(14)
    pen.color('black')
    pen.forward(1)
    pen.color('white')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.goto(15, 0)
    
    for i in range(1, 3):
        pen.down()
        pen.color('black')
        pen.forward(1)
        pen.color('skyblue')
        pen.forward(1)
        pen.color('black')
        pen.forward(1)
        pen.color('firebrick')
        pen.forward(1)
        pen.color('red')
        pen.forward(14)
        pen.color('black')
        pen.forward(1)
        pen.color('skyblue')
        pen.forward(1)
        pen.color('black')
        pen.forward(1)
        pen.up()
        pen.goto(15 + i, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(1)
    pen.color('red')
    pen.forward(14)
    pen.color('black')
    pen.forward(3)
    pen.up()
    pen.goto(18, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(1)
    pen.color('red')
    pen.forward(14)
    pen.color('black')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.goto(19, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(2)
    pen.color('red')
    pen.forward(13)
    pen.color('black')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.goto(20, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(2)
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(1)
    pen.color('red')
    pen.forward(12)
    pen.color('black')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(2)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.goto(21, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('white')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(1)
    pen.color('red')
    pen.forward(12)
    pen.color('black')
    pen.forward(1)
    pen.color('white')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.goto(22, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('white')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(3)
    pen.color('red')
    pen.forward(9)
    pen.color('black')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('white')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.goto(23, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('black')
    pen.forward(3)
    pen.color('red')
    pen.forward(6)
    pen.color('black')
    pen.forward(3)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('black')
    pen.up()
    pen.goto(24, -1)
    
    pen.down()
    pen.color('black')
    pen.forward(2)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(4)
    pen.color('black')
    pen.forward(7)
    pen.color('skyblue')
    pen.forward(4)
    pen.color('black')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(1)
    pen.color('black')
    pen.forward(2)
    pen.up()
    pen.goto(25, -2)
    
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('red')
    pen.forward(2)
    pen.color('black')
    pen.forward(2)
    pen.color('skyblue')
    pen.forward(12)
    pen.color('white')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(2)
    pen.color('black')
    pen.forward(2)
    pen.color('red')
    pen.forward(2)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.goto(26, -1)
    
    pen.down()
    pen.color('black')
    pen.forward(3)
    pen.color('skyblue')
    pen.forward(14)
    pen.color('white')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(2)
    pen.color('black')
    pen.forward(3)
    pen.up()
    pen.goto(27, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(2)
    pen.color('skyblue')
    pen.forward(14)
    pen.color('white')
    pen.forward(1)
    pen.color('skyblue')
    pen.forward(2)
    pen.color('black')
    pen.forward(2)
    pen.up()
    pen.goto(28, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(2)
    pen.color('skyblue')
    pen.forward(17)
    pen.color('black')
    pen.forward(2)
    pen.up()
    pen.goto(29, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(4)
    pen.color('skyblue')
    pen.forward(13)
    pen.color('black')
    pen.forward(4)
    pen.up()
    pen.goto(30, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(3)
    pen.color('black')
    pen.forward(3)
    pen.color('skyblue')
    pen.forward(7)
    pen.color('black')
    pen.forward(3)
    pen.color('red')
    pen.forward(3)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.goto(31, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(2)
    pen.color('red')
    pen.forward(4)
    pen.color('black')
    pen.forward(7)
    pen.color('red')
    pen.forward(6)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.goto(32, 0)
    
    for i in range(1, 6):
        pen.down()
        pen.color('black')
        pen.forward(1)
        pen.color('firebrick')
        pen.forward(2)
        pen.color('red')
        pen.forward(17)
        pen.color('black')
        pen.forward(1)
        pen.up()
        pen.goto(32 + i, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(3)
    pen.color('red')
    pen.forward(16)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.goto(38, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(2)
    pen.color('firebrick')
    pen.forward(3)
    pen.color('red')
    pen.forward(14)
    pen.color('black')
    pen.forward(2)
    pen.up()
    pen.goto(39, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('red')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(3)
    pen.color('red')
    pen.forward(12)
    pen.color('black')
    pen.forward(1)
    pen.color('red')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.goto(40, 0)
    
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(1)
    pen.color('red')
    pen.forward(1)
    pen.color('black')
    pen.forward(2)
    pen.color('firebrick')
    pen.forward(3)
    pen.color('red')
    pen.forward(8)
    pen.color('black')
    pen.forward(2)
    pen.color('red')
    pen.forward(2)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.goto(41, 1)
    
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(1)
    pen.color('red')
    pen.forward(2)
    pen.color('black')
    pen.forward(11)
    pen.color('red')
    pen.forward(3)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.goto(42, 2)
    
    pen.down()
    pen.color('black')
    pen.forward(1)
    pen.color('firebrick')
    pen.forward(1)
    pen.color('red')
    pen.forward(13)
    pen.color('firebrick')
    pen.forward(1)
    pen.color('black')
    pen.forward(1)
    pen.up()
    pen.goto(43, 3)
    
    pen.down()
    pen.color('black')
    pen.forward(2)
    pen.color('firebrick')
    pen.forward(11)
    pen.color('black')
    pen.forward(2)
    pen.up()
    pen.goto(44, 4)
    
    pen.down()
    pen.color('black')
    pen.forward(11)
    
    pen.hideturtle()
    
    pen.end_poly()
    car_polygon = pen.get_poly()
    screen.register_shape('car', car_polygon)
    
    # make list of cars
    cars = []
    
    # initiate sprite
    sprite = Turtle()
    sprite.hideturtle()
    sprite.shape('car')
    sprite.penup()
    sprite.speed('fastest')
    
    # make cars
    for i in range(7):
        car = sprite.clone()
    
        if i % 2:
            car.setheading(0)
        else:
            car.setheading(180)
    
        car.goto(randint(-200, 200), -120 + i * 40)
        car.showturtle()
        cars.append(car)
    
    screen.exitonclick()
    

    虽然 GIF 图像是一种替代方案,但它们不会像多边形一样转动——无论方向如何,海龟都会始终显示相同的图像。但是对于多边形,海龟会毫不费力地适当转动。

    【讨论】:

      【解决方案2】:

      这对 Turtle 来说令人印象深刻。我期待 Atari 2600 赛车精灵。如果它们只是左右移动,那么您可以截取这些图像,将它们保存为 carleft.gif 和 carright.gif 与您的 Turtle 脚本在同一目录中,然后是 register or add the images 和 use those shapes。

      screen .register_shape( 'carleft.gif' )
      screen .register_shape( 'carright.gif' )
      
      sprite .shape( 'carleft' )
      player .shape( 'carright' )
      

      【讨论】:

      • 啊,谢谢。可悲的是,由于我必须使用的程序,它们必须是手绘的。截图是我让它工作的唯一方法吗?
      • 嗯,你可以在每一帧重新绘制新的位置,如果你想让它们在屏幕上滚动很慢的话。隐藏所有海龟可以加快turtle.hideturtle() 的速度,以及打开screen.tracer( 42, 0 ) 然后在绘制周期结束时调用screen.update() 以查看进度。可以使用向量数组将各个部分绘制为不同的海龟,然后有一组一起旅行的每辆车的多兹海龟。没有截图应用,你不能export the Turtle screen?
      猜你喜欢
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      • 2016-08-31
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      • 1970-01-01
      相关资源
      最近更新 更多