Turtle无所不能:秋天到了,啥时候带你们去看落英缤纷?

导语

嗯哼!这么快又到了周六。

上班的日子总是格外的漫长!

脑袋的转速也比较慢,实在不知道做啥,上班一直在打酱油,大脑一片空白撒,也不知道自己在做什么!

无所事事了好久之后,终于一眼望上去,看到了这代码爱了爱了,so  应该是你们喜欢的类型!

今天带大家编写一款精美碎花小清新风格树!落英缤纷!

图片

正文

还是你们熟悉的样子:Turtle用的越久,越觉得好用!真香!

(1)首先绘制树木的躯干。

from turtle import *

left ( 80 )

fd( 100 )

right ( 30 )

fd( 30 )

right ( 30 )

fd( 40 )

input()

结果如下:

我们先更改一下绘制的线段粗细,和颜色,让绘制的图片看起来更像树。color|pensize()

通过t.pensize()、t.color()更改笔的粗细与颜色,加长一下树的枝干和缩小一下笔的粗细:

from turtle import *

color('#5E5E5E')
pensize(6)
left(80)
fd(150)
right(30)
fd(50)
right(30)
fd(60)
input()

效果如下:

​(2)首先绘制树的主干,随后使用函数绘制树的枝条:

from turtle import *

def drawTree(length):
    right(20)
    fd(length)

color('#5E5E5E')
pensize(5)

up()
goto(0,-300)#跳到绘制起始点
down()

left(80)
fd(140)
drawTree(60)
input()

使用递归开始进行枝条的绘制:

from turtle import *

def drawTree(length):
    if length>1:
        right(20)
        fd(length)
        drawTree(length - 10)

color('#5E5E5E')
pensize(5)

up()
goto(0,-300)#跳到绘制起始点
down()

left(80)
fd(140)
drawTree(60)
input()

现在的长度、旋转角度是有有固定差值的,使用随机数使绘制的树枝更贴合实际:

def drawTree(length):
    if length>1:
        right(20)
        fd(length)
        randlen=random.random()
        drawTree(length - 10*randlen)
def drawTree(length):
    if length>1:
        randangle=random.random()
        randlen=random.random()
        right(20*randangle)
        fd(length)

        drawTree(length - 10*randlen)

(3)绘制向左向右树枝枝条:

from turtle import *
import random

def drawTree(length):
    if length>1:
        #随机角度与长度
        randangle=random.random()
        randlen=random.random()

        #每次使用函数先绘制线段,再调整角度,这里是向右的角度转动
        fd(length)
        right(20*randangle)
        drawTree(length - 10*randlen)

        #这里是向左的角度转动
        left(40 * randangle)
        drawTree(length - 10*randlen)

        #为什么需要再向右转20度?那是因为我一共向左转了40度,使用backward后退,必须是相同的角度,不然退回去角度就不同了位置就不会对
        right(20 * randangle)

        up()
        backward(length)
        down()

setworldcoordinates(-1000,-750,1000,750)        
tracer(False)
color('#5E5E5E')
pensize(5)

up()
goto(0,-300)#跳到绘制起始点
down()

left(80)
fd(140)
drawTree(120)
input()

但是由于随机数的转角和枝条长度没有限制最低的长度,可以在随机的时候给一个合适的数字相乘,并且把起笔位置再往下调,代码如下:

randangle=2*random.random()
randlen=2*random.random()
.
.
.
.
.
.
goto(0,-700)

效果图:

(4)树枝树干都绘制完成, 就剩下红花绿叶了!

from turtle import *
import random

def drawTree(length):
    if length>1:
        if length<30 and length>14:#缩小一下树干
            pensize(4)
        elif length<15 and length>5:#长度这个范围内那么就是绿叶
            color('#04B486')#
            pensize(3)
        elif length<5 and length>1:#红花
            color('#FE2E9A')
            pensize(2)
        else:
            color('#5E5E5E')#其他范围就是正常的树干
            pensize(5)
        #随机角度与长度
        randangle=2*random.random()
        randlen=2*random.random()

        #每次使用函数先绘制线段,再调整角度,这里是向右的角度转动
        fd(length)
        right(20*randangle)
        drawTree(length - 10*randlen)

        #这里是向左的角度转动
        left(40 * randangle)
        drawTree(length - 10*randlen)

        #为什么需要再向右转20度?那是因为我一共向左转了40度,使用backward后退,必须是相同的角度,不然退回去角度就不同了位置就不会对
        right(20 * randangle)

        up()
        backward(length)
        down()

setworldcoordinates(-1000,-750,1000,750)        
tracer(False)
color('#5E5E5E')
pensize(5)

up()
goto(0,-700)#跳到绘制起始点
down()

left(80)
fd(140)
drawTree(120)
input()

效果如下:

(5)绘制落花:

from turtle import *
import random

def drawTree(length):
    if length>1:
        if length<30 and length>14:#缩小一下树干
            pensize(4)
        elif length<15 and length>5:#长度这个范围内那么就是绿叶
            color('#04B486')#
            pensize(3)
        elif length<5 and length>1:#红花
            color('#FE2E9A')
            pensize(2)
        else:
            color('#5E5E5E')#其他范围就是正常的树干
            pensize(5)
        #随机角度与长度
        randangle=2*random.random()
        randlen=2*random.random()

        #每次使用函数先绘制线段,再调整角度,这里是向右的角度转动
        fd(length)
        right(20*randangle)
        drawTree(length - 10*randlen)

        #这里是向左的角度转动
        left(40 * randangle)
        drawTree(length - 10*randlen)

        #为什么需要再向右转20度?那是因为我一共向左转了40度,使用backward后退,必须是相同的角度,不然退回去角度就不同了位置就不会对
        right(20 * randangle)

        up()
        backward(length)
        down()
def fallingFlowers(m):
    x,y=-1000,-750
    for i in range(30):
        up()
        goto(x,y)
        x+=100
        down()
        yval=50
        for i in range(m):
            a = 100*random.random()
            b = 2*random.random()
            print(a)
            if a>59:
                color('#FE2E9A')
            else:
                color('#04B486')
            circle(5)
            up()
            goto(x,y+(yval*b))
            fd(a)
            yval+=50
            down()      

setworldcoordinates(-1000,-750,1000,750)        
tracer(False)
color('#5E5E5E')
pensize(5)

# up()
# goto(0,-700)#跳到绘制起始点
# down()

# left(80)
# fd(140)
# drawTree(120)
fallingFlowers(10)
input()

效果图如下:

最终绘制完成的效果图:

总结

带你们看的落英缤纷,喜欢嘛?记得一键三连哦!!

如果需要新手安装包激活码、配套完整项目+源码笔记、更多Python资料

本文完整项目——​🎊🎊源码基地:关注小编获取哦~💝记得三连吖

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顾木子吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值