簡體   English   中英

如何同時在烏龜中繪制字母?

[英]How can I draw letters in turtle at the same time?

我寫了一個寫我名字的烏龜代碼 - 一個字母一個字母我想讓烏龜同時寫這些字母,但我不知道有人能幫忙嗎? 是否可以定義字母,然后將它們存儲在列表中,然后將列表放入打印 function 以同時繪制字母?
這是代碼:

import turtle
beni=turtle.Screen()
beni=turtle.Turtle()
beni.speed(4)
beni.pensize(20)
beni.pencolor('dark turquoise')
beni.penup()
beni.setx(-250)
beni.pendown()

beni.left(90)
beni.forward(200)
beni.right(90)
beni.forward(50)
for i in range (36):
    beni.right(5)
    beni.forward(5)
beni.forward(45)
beni.right(90)
beni.right(90)
beni.forward(50)
for i in range (36):
    beni.right(5)
    beni.forward(5)
beni.forward(45)
beni.right(90)
beni.forward(200)
beni.right(180)
beni.forward(200)

beni.penup()
beni.left(90)
beni.forward(150)
beni.pendown()
beni.left(90)

beni.pencolor('light blue')
beni.forward(220)
beni.right(90)
beni.forward(100)
beni.penup()
beni.left(180)
beni.forward(100)
beni.left(90)
beni.forward(110)
beni.left(90)
beni.pendown()
beni.forward(100)
beni.penup()
beni.left(180)
beni.forward(100)
beni.left(90)
beni.forward(110)
beni.left(90)
beni.pendown()
beni.forward(100)

beni.penup()
beni.forward(50)
beni.pendown()
beni.left(90)

beni.pencolor('plum')
beni.forward(220)
beni.right(90)
beni.right(70)
beni.forward(235)
beni.left(70)
beni.left(90)
beni.forward(220)

beni.penup()
beni.right(180)
beni.forward(220)
beni.left(90)
beni.forward(50)
beni.left(90)
beni.pendown()

beni.pencolor('Pale Green')
beni.forward(220)

烏龜的整個想法是它只是在任何地方畫一條線,所以從本質上講,它不能在同一時間畫出多個東西。 不過,您可以為您的字母定義函數,如下所示:

import turtle

def draw_b(t: Turtle):
    t.left(90)
    t.forward(200)
    t.right(90)
    t.forward(50)
    for i in range (36):
        t.right(5)
        t.forward(5)
    t.forward(45)
    t.right(90)
    t.right(90)
    t.forward(50)
    for i in range (36):
        t.right(5)
        t.forward(5)
    t.forward(45)
    t.right(90)
    t.forward(200)
    t.right(180)
    t.forward(200)

    t.penup()
    t.left(90)
    t.forward(150)
    t.pendown()
    t.left(90)

def draw_e(t: Turtle):
    t.forward(220)
    t.right(90)
    t.forward(100)
    t.penup()
    t.left(180)
    t.forward(100)
    t.left(90)
    t.forward(110)
    t.left(90)
    t.pendown()
    t.forward(100)
    t.penup()
    t.left(180)
    t.forward(100)
    t.left(90)
    t.forward(110)
    t.left(90)
    t.pendown()
    t.forward(100)

    t.penup()
    t.forward(50)
    t.pendown()
    t.left(90)

def draw_n(t:Turtle):
    t.forward(220)
    t.right(90)
    t.right(70)
    t.forward(235)
    t.left(70)
    t.left(90)
    t.forward(220)

    t.penup()
    t.right(180)
    t.forward(220)
    t.left(90)
    t.forward(50)
    t.left(90)
    t.pendown()

def draw_i(t: Turtle):
    t.forward(220)
    t.backward(220)
    t.penup()
    t.right(90)
    t.forward(50)
    t.left(90)
    t.pendown()

turtle.Screen()
beni=turtle.Turtle()
beni.speed(4)
beni.pensize(20)
beni.penup()
beni.setx(-250)
beni.pendown()

beni.pencolor('dark turquoise')
draw_b(beni)
beni.pencolor('light blue')
draw_e(beni)
beni.pencolor('plum')
draw_n(beni)
beni.pencolor('Pale Green')
draw_i(beni)

就其本質而言,它不能同時繪制多於一件的東西

當談到海龜時,你應該比說不能更清楚。 粗糙但實用:

from turtle import Screen, Turtle

def draw_b(t):
    t.begin_poly()
    t.forward(220)
    t.right(90)
    t.forward(50)

    for _ in range(36):
        t.right(5)
        t.forward(5)

    t.forward(45)
    t.right(180)
    t.forward(50)

    for _ in range(36):
        t.right(5)
        t.forward(5)

    t.forward(45)
    t.end_poly()

    return t.get_poly()

def draw_e(t):
    t.begin_poly()
    t.forward(220)
    t.right(90)
    t.forward(100)
    t.backward(100)
    t.right(90)
    t.forward(110)
    t.left(90)
    t.forward(100)
    t.backward(100)
    t.right(90)
    t.forward(110)
    t.left(90)
    t.forward(100)
    t.end_poly()

    return t.get_poly()

def draw_n(t):
    t.begin_poly()
    t.forward(220)
    t.right(160)
    t.forward(235)
    t.left(160)
    t.forward(220)
    t.end_poly()

    return t.get_poly()

def draw_i(t):
    t.begin_poly()
    t.forward(220)
    t.backward(220)
    t.end_poly()

    return t.get_poly()

def draw_polygon(turtle, polygon):
    head, *tail = polygon

    turtle.goto(head)
    turtle.pendown()

    if tail:
        screen.ontimer(lambda p=tail: draw_polygon(turtle, p), 75)
    else:
        turtle.hideturtle()

LETTERS = {
    'B': ('dark turquoise', draw_b, 'fastest'),
    'E': ('light blue', draw_e, 'slowest'),
    'I': ('pale green', draw_i, 'fast'),
    'N': ('plum', draw_n, 'slow'),
}

screen = Screen()

for i, letter in enumerate("BENI"):
    color, function, speed = LETTERS[letter]

    turtle = Turtle()
    turtle.hideturtle()
    turtle.speed('fastest')
    turtle.penup()
    turtle.setheading(90)
    turtle.setx(-250 + 150 * i)

    polygon = function(turtle)

    turtle.color(color)
    turtle.pensize(20)
    turtle.speed(speed)
    turtle.showturtle()

    draw_polygon(turtle, polygon)

screen.mainloop()

我們遵循@SamStafford 關於將單個字母轉化為函數的重要建議。 但不是讓函數打印字母,而是讓它們不可見地繪制字母並返回生成的多邊形。 我們並行遍歷所有多邊形(使用ontimer()模擬)最后繪制字母。

為了方便起見,我修改了繪圖代碼不舉筆。 這不是什么大問題,因為大多數筆畫都在過度繪制現有線條。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM