程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

PYTHON做的白云动画(python 动画)

hfteth 2025-06-30 16:25:37 技术文章 3 ℃
import turtle
import random

# 初始化设置
screen = turtle.Screen()
screen.setup(1200, 600)
screen.colormode(255)
screen.tracer(0)  # 关闭自动刷新
screen.title("飘动的云朵")

# 创建画笔(用于绘制背景)
bg_turtle = turtle.Turtle()
bg_turtle.speed(0)
bg_turtle.hideturtle()

# 创建画笔(用于绘制云朵)
cloud_turtle = turtle.Turtle()
cloud_turtle.speed(0)
cloud_turtle.hideturtle()
cloud_turtle.penup()


# 绘制渐变天空背景
def draw_gradient_sky():
    for y in range(-300, 301, 10):
        # 计算渐变蓝色 (从顶部的深蓝到底部的浅蓝)
        blue_top = 100
        blue_bottom = 235
        ratio = (y + 300) / 600
        current_blue = int(blue_top + (blue_bottom - blue_top) * ratio)

        bg_turtle.penup()
        bg_turtle.goto(-600, y)
        bg_turtle.pendown()
        bg_turtle.color(135, 206, current_blue)
        bg_turtle.begin_fill()
        for _ in range(2):
            bg_turtle.forward(1200)
            bg_turtle.right(90)
            bg_turtle.forward(10)
            bg_turtle.right(90)
        bg_turtle.end_fill()


# 云朵类
class Cloud:
    def __init__(self):
        self.reset()

    def reset(self):
        self.x = random.randint(-800, -200)  # 从左侧开始
        self.y = random.randint(50, 250)
        self.size = random.randint(30, 70)
        self.speed = random.uniform(0.5, 2.0)
        self.layers = random.randint(2, 4)  # 云朵层次
        self.circles = []  # 存储组成云朵的圆形参数

        # 生成云朵的圆形组成部分
        for _ in range(random.randint(4, 8)):
            offset_x = random.uniform(-self.size * 0.7, self.size * 0.7)
            offset_y = random.uniform(-self.size * 0.3, self.size * 0.3)
            circle_size = random.uniform(self.size * 0.3, self.size * 0.6)
            self.circles.append((offset_x, offset_y, circle_size))

    def draw(self):
        cloud_turtle.penup()
        base_x, base_y = self.x, self.y

        # 绘制多层云朵增加立体感
        for layer in range(self.layers):
            layer_y = base_y + layer * 8  # 每层稍微高一点

            for offset_x, offset_y, circle_size in self.circles:
                cloud_turtle.goto(base_x + offset_x, layer_y + offset_y)
                cloud_turtle.pendown()
                cloud_turtle.color(255, 255, 255)
                cloud_turtle.begin_fill()
                cloud_turtle.circle(circle_size * (1 - layer * 0.1))  # 上层稍微小一点
                cloud_turtle.end_fill()
                cloud_turtle.penup()

    def move(self):
        self.x += self.speed
        # 云朵移出屏幕后重置到左侧
        if self.x > 650:
            self.reset()


# 创建多朵云(不同层次)
clouds = [Cloud() for _ in range(6)]

# 首次绘制背景
draw_gradient_sky()


# 动画函数
def animate():
    # 不需要清除整个屏幕,只需清除云朵部分
    cloud_turtle.clear()

    # 更新并绘制所有云朵
    for cloud in clouds:
        cloud.move()
        cloud.draw()

    screen.update()
    screen.ontimer(animate, 50)  # 50毫秒刷新一次


# 开始动画
animate()
turtle.done()


Tags:

最近发表
标签列表