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()