小码农

趣味编程-面向每个人的创意编程

用Python递归绘制爱心树代码

import turtle
import random

# 设置画笔
turtle.speed(0)
turtle.bgcolor('black')
turtle.color('red')
turtle.pensize(4)

# 树干函数
def trunk(branch_length):
    if branch_length > 5:
        # 每次树枝的长度减小,但不需要递归
        turtle.forward(branch_length)
        turtle.right(20)
        trunk(branch_length - 15)
        turtle.left(40)
        trunk(branch_length - 15)
        turtle.right(20)
        turtle.backward(branch_length)

# 树冠函数
def crown(branch_length):
    if branch_length > 20:
        angle = random.randint(-25, 25)
        scale = random.uniform(0.7, 0.9)
        turtle.right(angle)
        turtle.forward(branch_length)
        crown(branch_length * scale)
        turtle.backward(branch_length)
        turtle.left(angle)

# 根据三角函数绘制心形线
def love(x, y):
    turtle.penup()
    turtle.goto(x, y)
    turtle.pendown()
    turtle.color('pink')
    turtle.begin_fill()
    turtle.left(45)
    turtle.forward(100)
    turtle.circle(50, 180)
    turtle.right(90)
    turtle.circle(50, 180)
    turtle.forward(100)
    turtle.end_fill()

# 根据当前画笔位置和颜色绘制一组星星
def stars():
    turtle.penup()
    x = random.randint(-turtle.window_width() // 2, turtle.window_width() // 2)
    y = random.randint(-turtle.window_height() // 2, turtle.window_height() // 2)
    turtle.goto(x, y)
    turtle.pendown()
    turtle.color('yellow')
    turtle.begin_fill()
    for i in range(5):
        turtle.forward(20)
        turtle.right(144)
    turtle.end_fill()

# 主函数
def main():
    turtle.left(90)
    turtle.penup()
    turtle.goto(0, -150)
    turtle.pendown()
    turtle.color('brown')
    trunk(100)
    crown(70)
    love(0, 150)
    for i in range(20):
        stars()

    turtle.hideturtle()
    turtle.done()

if __name__ == '__main__':
    main()

 

发表评论