漫天雪花代码

        最近,东北三省下起了大雪。作为一个在南方生活的学生,一年中自然很少看到漫天大雪。因此,我在这尝试用Python写了一个漫天飞雪的程序。

分析:想要画一个雪花,我们可以使用Python的turtle模块。雪花❄️——的形状:有七根主干,每根主干上还分叉出两个分支。因此,每两个枝干间的夹角为(360/7)度。画完一个枝干后,可以将画笔移动到雪花中心,旋转之后继续画下个枝干,这一过程可以通过循环实现。最后,画完后可以随机讲画笔移动,重复上述步骤。代码如下:

import turtle
import random

counts = random.randint(4, 6)
# counts代表雪花数量,这里我们随机生成4-6片雪花
def snowflake():
    for i in range(counts):
        # 随机移动雪花中心的位置
        coordinate_x = random.randint(-300, 300)
        coordinate_y = random.randint(-200, 200)
        move_pen_position(x=coordinate_x, y=coordinate_y)
        # 设置雪花的大小,这样可以让每一片雪花都不一样
        random_size = random.randint(30, 50)
        for j in range(7):
            branch(size=random_size)
def move_pen_position(x, y):
    turtle.hideturtle()
    turtle.penup()
    turtle.goto(x, y)
    turtle.pendown()
    turtle.showturtle()
# 下面的branch()函数用来绘制雪花的单个枝干
def branch(size):
    angle = 360 / 7
    turtle.right(angle)
    turtle.forward(size)
    turtle.backward(size/3)
    turtle.right(30)
    turtle.forward(size/3)
    turtle.backward(size/3)
    turtle.left(60)
    turtle.forward(size/3)
    turtle.backward(size/3)
    turtle.right(30)
    turtle.backward(2*size/3)

# 下面的paint()函数用来设置整体属性
def paint():
    turtle.setup(800, 600)
    turtle.screensize(400, 200, 'skyblue')
    turtle.pencolor('grey')
    turtle.speed(5)
    turtle.pensize(2)
    snowflake()
    # 下面的诗句仅仅是为了意境而存在,大家也可以换成自己喜欢的诗句
    move_pen_position(x=200, y=-250)
    message = "白雪缺嫌春色晚,故穿庭树作飞花"
    turtle.write(message, align='center', font=('宋体',15,'normal'))
    window = turtle.Screen()
    window.exitonclick()


paint()

效果如下:

        观察代码,我们可以发现还有很多可以优化的地方。比如,有时雪花会部分重叠在一起。对于这个问题的我给出的解决方案是:将雪花位置放进一个列表中,如果下一个雪花中心坐标的x值与y值与前一个的差较小的话,舍弃这个坐标(可用continue),最后,遍历这个列表,画图,完美!

        另外,雪花并没有“飞”起来,也就是说并没有闪烁或者移动效果。我将会在以后的博客中实现这些效果。而且,可以将它打包成exe或者app类型的文件,让你没装Python编译器的朋友都可以执行上面的程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

「已注销」

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

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

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

打赏作者

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

抵扣说明:

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

余额充值