Christmas

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
@Project: Christmas
@File: Christmas.py
@Author: Christmas
@Date: 2021/12/24 13:41 
@desc: Christmas
"""

import turtle
import random
import time


# 定义画彩灯的方法
def drawlight():
    # 如果觉得彩灯太多,可以把取值范围加大一些,对应的灯就会少一些
    if random.randint(0, 30) == 0:
        # 定义第一种颜色
        turtle.color('tomato')
        # 定义彩灯大小
        turtle.circle(6)
    elif random.randint(0, 30) == 1:
        # 定义第二种颜色
        turtle.color('orange')
        # 定义彩灯大小
        turtle.circle(3)
    else:
        # 其余的随机数情况下画空的树枝
        turtle.color('dark green')


def tree(d, s):  # 开始画树
    if d <= 0: return
    turtle.forward(s)
    tree(d - 1, s * .8)
    turtle.right(120)
    tree(d - 3, s * .5)
    drawlight()  # 同时调用小彩灯的方法
    turtle.right(120)
    tree(d - 3, s * .5)
    turtle.right(120)
    turtle.backward(s)


# 定义画雪花的方法
def drawsnow():
    # 隐藏笔头,ht=hideturtle
    turtle.ht()
    # 定义笔头大小
    turtle.pensize(2)
    for i in range(200):  # 画多少雪花
        # 定义画笔颜色为白色,其实就是雪花为白色
        turtle.pencolor("white")
        # 提笔,pu=penup
        turtle.pu()
        # 定义x坐标,随机从-350到350之间选择
        turtle.setx(random.randint(-350, 350))
        # 定义y坐标,注意雪花一般在地上不会落下,所以不会从太小的纵座轴开始
        turtle.sety(random.randint(-100, 350))
        # 落笔,pd=pendown
        turtle.pd()
        # 雪花瓣数设为6
        dens = 6
        # 定义雪花大小
        snowsize = random.randint(1, 10)
        # 就是6,那就是画5次,也就是一个雪花五角星
        for j in range(dens):
            # turtle.forward(int(snowsize))  #int()取整数
            turtle.fd(int(snowsize))
            turtle.backward(int(snowsize))
            # turtle.bd(int(snowsize))  #注意没有bd=backward,但有fd=forward,小bug
            # 转动角度
            turtle.right(int(360 / dens))


def Christmas():
    n = 100.0
    # 定义速度
    turtle.speed("fastest")
    # 定义背景颜色,可以自己换颜色
    turtle.screensize(bg='black')
    turtle.left(90)
    turtle.forward(3 * n)
    # 定义最上端星星的颜色,外圈是orange,内部是yellow
    turtle.color("orange", "yellow")
    turtle.begin_fill()
    turtle.left(126)

    # 画五角星
    for i in range(5):
        turtle.forward(n / 5)
        # 五角星的角度
        turtle.right(144)
        turtle.forward(n / 5)
        # 继续换角度
        turtle.left(72)
    turtle.end_fill()
    turtle.right(126)

    # 定义树枝的颜色
    turtle.color("dark green")
    turtle.backward(n * 4.8)

    tree(15, n)
    turtle.backward(n / 2)

    # 循环画最底端的小装饰
    for i in range(200):
        a = 200 - 400 * random.random()
        b = 10 - 20 * random.random()
        turtle.up()
        turtle.forward(b)
        turtle.left(90)
        turtle.forward(a)
        turtle.down()
        if random.randint(0, 1) == 0:
            turtle.color('tomato')
        else:
            turtle.color('wheat')
        turtle.circle(2)
        turtle.up()
        turtle.backward(a)
        turtle.right(90)
        turtle.backward(b)

    # 定义字体颜色
    turtle.color("dark red", "red")
    # 定义文字、位置、字体、大小
    turtle.write("Merry Christmas", align="center", font=("Comic Sans MS", 40, "bold"))
    # 调用画雪花的方法
    drawsnow()
    # 完成,否则会直接关闭
    turtle.done()
    time.sleep(10)


if __name__ == '__main__':
    Christmas()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值