基于turtle库的圣诞树的绘制

2024年的圣诞节快要到来了,内心无比的happ呀,以下是使用 Python 的 turtle 模块绘制一个美丽的圣诞节贺卡的代码示例。这个贺卡包含一棵装饰精美的圣诞树、一颗闪亮的星星以及"圣诞快乐"的祝福语。你可以根据需要调整颜色和尺寸以达到理想的效果。

完整代码

复制代码
import turtle

# 设置画布
screen = turtle.Screen()
screen.setup(width=800, height=600)
screen.bgcolor("skyblue")  # 背景颜色
screen.title("圣诞快乐!")

# 创建画笔
pen = turtle.Turtle()
pen.speed(3)  # 画笔速度

def draw_triangle(color, width, height):
    pen.fillcolor(color)
    pen.begin_fill()
    for _ in range(3):
        pen.forward(width)
        pen.left(120)
    pen.end_fill()

def draw_rectangle(color, width, height):
    pen.fillcolor(color)
    pen.begin_fill()
    for _ in range(2):
        pen.forward(width)
        pen.left(90)
        pen.forward(height)
        pen.left(90)
    pen.end_fill()

def draw_star(color, size):
    pen.fillcolor(color)
    pen.begin_fill()
    for _ in range(5):
        pen.forward(size)
        pen.right(144)
        pen.forward(size)
        pen.left(72)
    pen.end_fill()

def draw_circle(color, radius):
    pen.fillcolor(color)
    pen.begin_fill()
    pen.circle(radius)
    pen.end_fill()

def draw_tree():
    pen.penup()
    pen.goto(-50, -150)  # 树干位置
    pen.pendown()
    pen.color("sienna")
    draw_rectangle("sienna", 100, 150)  # 树干

    # 绘制树叶(三个三角形)
    colors = ["forest green", "green", "dark green"]
    y_start = 0
    for color in colors:
        pen.penup()
        pen.goto(-150, y_start)
        pen.pendown()
        pen.color(color)
        draw_triangle(color, 300, 200)
        y_start += 150  # 每个层次往上移动

def draw_decorations():
    import random

    pen.color("red")
    pen.penup()
    decorations = [(-100, 0), (-50, 100), (0, 50), (50, 150), (100, 100), (25, 200), (-75, 175)]
    for pos in decorations:
        pen.goto(pos)
        pen.pendown()
        draw_circle("red", 10)
        pen.penup()

    pen.color("yellow")
    star_positions = [(-80, -30), (0, 20), (80, -30)]
    for pos in star_positions:
        pen.goto(pos)
        pen.pendown()
        draw_circle("yellow", 7)
        pen.penup()

def draw_star_on_top():
    pen.penup()
    pen.goto(-15, 200)
    pen.pendown()
    pen.color("yellow")
    draw_star("yellow", 30)

def write_message():
    pen.penup()
    pen.goto(0, -250)
    pen.color("red")
    pen.pendown()
    pen.write("圣诞快乐!", align="center", font=("Arial", 36, "bold"))

def draw_snowflakes():
    pen.color("white")
    pen.penup()
    for _ in range(20):
        x = random.randint(-390, 390)
        y = random.randint(-280, 280)
        pen.goto(x, y)
        pen.pendown()
        draw_star("", 5)
        pen.penup()

def main():
    draw_tree()
    draw_decorations()
    draw_star_on_top()
    write_message()
    # 可选:绘制雪花
    # draw_snowflakes()
    pen.hideturtle()
    turtle.done()

if __name__ == "__main__":
    main()

效果演示

代码说明

1.初始化画布和画笔

  • 设置画布大小为 800x600,并设置背景颜色为"skyblue"。

  • 创建一个 turtle 对象 pen,并设置其绘画速度。

2.绘制三角形 (draw_triangle)

  • 用于绘制圣诞树的叶子部分。接受颜色、宽度和高度作为参数。

3.绘制矩形 (draw_rectangle)

  • 用于绘制圣诞树的树干。接受颜色、宽度和高度作为参数。

4.绘制星星 (draw_star)

  • 用于绘制树顶的星星或装饰。使用五角星的方式绘制。

5.绘制圆形 (draw_circle)

  • 用于绘制圣诞树上的装饰球。

6.绘制圣诞树 (draw_tree)

  • 首先绘制树干,然后绘制三个层次不同颜色的树叶(三个叠加的三角形)。

7.绘制装饰球 (draw_decorations)

  • 在圣诞树的不同位置绘制红色和黄色的小圆球作为装饰。

8.绘制树顶星星 (draw_star_on_top)

  • 在圣诞树顶部绘制一个较大的黄色星星。

9.写祝福语 (write_message)

  • 在画布底部中央写上"圣诞快乐!"的祝福文字,使用红色字体,字体大小为36号,加粗。

10.绘制雪花 (draw_snowflakes) (可选)

  • 通过在随机位置绘制小星星来模拟雪花效果。此部分代码已注释,如果需要雪花效果,可以取消注释。

11.主函数 (main)

  • 按顺序调用上述函数来绘制圣诞树、装饰、星星和祝福语。

  • 隐藏画笔并保持窗口开启。

运行效果

运行上述代码后,将显示一个带有美丽圣诞树、装饰球、树顶星星以及"圣诞快乐!"字样的贺卡。你可以根据需求进一步美化,例如添加更多装饰、调整颜色、增加雪花效果等。

自定义提示

  • 颜色调整:你可以根据个人喜好调整树叶、装饰球和背景的颜色。
  • 尺寸调整:通过修改绘制函数中的参数,可以调整圣诞树和装饰的大小。
  • 添加更多元素:例如,添加更多的雪花、礼物盒、彩带等,以使贺卡更加丰富。
相关推荐
胡耀超11 分钟前
霍夫圆变换全面解析(OpenCV)
人工智能·python·opencv·算法·计算机视觉·数据挖掘·数据安全
doupoa22 分钟前
Fabric 服务端插件开发简述与聊天事件监听转发
运维·python·fabric
How_doyou_do34 分钟前
备战菊厂笔试4
python·算法·leetcode
(・Д・)ノ1 小时前
python打卡day27
开发语言·python
小oo呆2 小时前
【学习心得】Jupyter 如何在conda的base环境中其他虚拟环境内核
python·jupyter·conda
小白学大数据3 小时前
Scrapy框架下地图爬虫的进度监控与优化策略
开发语言·爬虫·python·scrapy·数据分析
浊酒南街3 小时前
TensorFlow之微分求导
人工智能·python·tensorflow
立秋67893 小时前
用Python绘制梦幻星空
开发语言·python·pygame
alpszero3 小时前
YOLO11解决方案之对象裁剪探索
人工智能·python·计算机视觉·yolo11
白云千载尽4 小时前
相机、雷达标定工具,以及雷达自动标定的思路
python·自动驾驶·ros