上次用turtle做了一个爱心,这次我们来做一个旋转的风车,先放下图,看一下完成后的效果

1.gif

现在我们开始代码的编写

设计叶子

一片叶子我们用一深一浅两个三角形就可以实现了,下面以0度方向的叶子为例,我们写出的代码如下

1.png

用循环改为生成4个叶子

有了一个叶子,生成4个叶子也比较容易了,我们只要写一个循环,然后循环里用90的倍数去指定下方向角,剩下的绘制代码就一样了

2.png

加一个棒子

给风车的下面加一个稍稍粗一些的棒子,我们只要设置下画笔的粗细画一跟直线就可以了

3.png

风车的旋转

风车已经画完了,但是下面我们怎么才能让它转起来呢? 看到我们用循环出4个叶子的代码,在那里我们是指定了角度是90的倍数,把叶子的方向写成固定的了,如果我们把那个角度变成一个变化的变量,就可以让叶子往不同的角度转了。为方便使用,我们先定一个draw函数,让它可以接收自己指定的角度。

修改下大概是下面的代码

import turtle as t
t.speed(0)
def draw(r):
    # 画一个风车的棒子
    t.pensize(4)  # 棒子4像素粗
    t.penup()
    t.goto(0,0)
    t.pendown()
    t.goto(0,-150)
    t.pensize(1)

    for i in range(4):
        t.setheading(i * 90 + r)
        t.penup()
        t.goto(0,0)
        t.pendown()
        # 浅蓝色三角形
        t.fillcolor('#50B2F8')
        t.begin_fill()
        t.forward(100)
        t.left(150)
        t.forward(70)
        t.end_fill()
        # 靠近中心的深蓝色三角形
        t.fillcolor('#063EC5')
        t.begin_fill()
        t.left(30)
        t.forward(40)
        t.left(90)
        t.forward(35)
        t.end_fill()

draw(30)  # 尝试不同的角度,叶子已经可以转到我们想要的角度了

t.done()

角度可以变了,但是转动的动画还没有,这个要怎么做呢? 我们可以写一个循环去调用这个draw函数

for r in range(0,360*100,3):  # 这里是旋转100圈,也可以用while循环,让它不停转,步长3对应的是转速,也可以改为1、2看看效果
    t.tracer(False)
    t.clear()
    draw(r)
    time.sleep(0.01)
    t.hideturtle()
    t.tracer(True)

好了,现在风车终于可以转起来了,最后我们贴下完成的代码

import turtle as t
import time
def draw(r):
    # 画一个风车的棒子
    t.pensize(4)  # 棒子4像素粗
    t.penup()
    t.goto(0,0)
    t.pendown()
    t.goto(0,-150)
    t.pensize(1)

    for i in range(4):
        t.setheading(i * 90 + r)
        t.penup()
        t.goto(0,0)
        t.pendown()
        # 浅蓝色三角形
        t.fillcolor('#50B2F8')
        t.begin_fill()
        t.forward(100)
        t.left(150)
        t.forward(70)
        t.end_fill()
        # 靠近中心的深蓝色三角形
        t.fillcolor('#063EC5')
        t.begin_fill()
        t.left(30)
        t.forward(40)
        t.left(90)
        t.forward(35)
        t.end_fill()

# 用速度1播放一次绘制过程
t.speed(1)
draw(0)

for r in range(0,360*100,3):  # 这里是旋转100圈,也可以用while循环,让它不停转,步长3对应的是转速,也可以改为1、2看看效果
    t.tracer(False)
    t.clear()
    draw(r)
    time.sleep(0.01)
    t.hideturtle()
    t.tracer(True)

t.done()

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐