机器人
积分排行榜
Scratch
积分排行榜
Python
在线答题
积分排行榜
活跃排行榜
打字练习
Microbit
C++
在线答题
积分排行榜
活跃排行榜
网盘
积分
未登录
未登录
登录学习
作者:
姜正鑫
更新时间:
2025-05-16 19:07
浏览:
31次
点赞:
2次
热度:
40
import turtle import random import time import math # 初始化屏幕 screen = turtle.Screen() screen.setup(1000, 800) screen.bgcolor("#FFF0F5") # 淡粉色背景 screen.title("母亲节快乐 - 献给世界上最伟大的妈妈") screen.tracer(0) # 关闭自动刷新,用于动画效果 # 创建多个画笔 flower_pen = turtle.Turtle() flower_pen.hideturtle() flower_pen.speed(0) heart_pen = turtle.Turtle() heart_pen.hideturtle() heart_pen.speed(0) text_pen = turtle.Turtle() text_pen.hideturtle() text_pen.speed(0) star_pen = turtle.Turtle() star_pen.hideturtle() star_pen.speed(0) # 颜色定义 PINK_PALETTE = ["#FFB6C1", "#FF69B4", "#FF1493", "#DB7093", "#C71585"] GREEN_PALETTE = ["#98FB98", "#90EE90", "#7CFC00", "#32CD32", "#228B22"] GOLD_PALETTE = ["#FFD700", "#FFDF00", "#F4BB00", "#E6C200", "#D4AF37"] # ==================== 花朵绘制函数 ==================== def draw_petal(radius, angle): flower_pen.circle(radius, angle) flower_pen.left(180 - angle) flower_pen.circle(radius, angle) flower_pen.left(180 - angle) def draw_flower(x, y, size=1): flower_pen.penup() flower_pen.goto(x, y) flower_pen.pendown() # 花瓣层 layers = [ (size * 15, 60, 6, PINK_PALETTE[1]), # 内层 (size * 30, 45, 12, PINK_PALETTE[2]), # 中层 (size * 45, 30, 18, PINK_PALETTE[0]) # 外层 ] for radius, angle, count, color in layers: flower_pen.color(color) flower_pen.begin_fill() for _ in range(count): draw_petal(radius, angle) flower_pen.left(360 / count) flower_pen.end_fill() # 花蕊 flower_pen.penup() flower_pen.goto(x, y - size * 5) flower_pen.pendown() flower_pen.color("#FFD700") flower_pen.begin_fill() flower_pen.circle(size * 15) flower_pen.end_fill() # ==================== 花茎和叶子 ==================== def draw_stem(x, y, length): flower_pen.penup() flower_pen.goto(x, y) flower_pen.pendown() flower_pen.color(random.choice(GREEN_PALETTE)) flower_pen.pensize(max(5, length // 20)) flower_pen.setheading(270) flower_pen.forward(length) # 叶子 for side in [-1, 1]: flower_pen.color(random.choice(GREEN_PALETTE)) flower_pen.begin_fill() flower_pen.setheading(270 + side * 30) flower_pen.circle(length // 2, 90) flower_pen.setheading(270 - side * 60) flower_pen.circle(length // 3, 60) flower_pen.end_fill() # ==================== 心形气球 ==================== hearts = [] for _ in range(8): hearts.append({ 'x': random.randint(-400, 400), 'y': random.randint(-300, 0), 'size': random.uniform(0.5, 1.5), 'color': random.choice(PINK_PALETTE), 'speed': random.uniform(0.5, 2), 'angle': random.uniform(0, 360), 'sway': random.uniform(0.5, 2) }) def draw_heart(x, y, size, color): heart_pen.penup() heart_pen.goto(x, y) heart_pen.pendown() heart_pen.color(color) heart_pen.begin_fill() heart_pen.setheading(120) heart_pen.circle(30 * size, 195) heart_pen.forward(60 * size) heart_pen.left(90) heart_pen.forward(60 * size) heart_pen.circle(30 * size, 195) heart_pen.end_fill() # 气球线 heart_pen.penup() heart_pen.goto(x, y - 40 * size) heart_pen.pendown() heart_pen.color("#888888") heart_pen.pensize(1) heart_pen.setheading(270) heart_pen.forward(100 * size) # ==================== 闪烁星星 ==================== stars = [] for _ in range(20): stars.append({ 'x': random.randint(-450, 450), 'y': random.randint(100, 350), 'size': random.uniform(0.3, 1), 'color': random.choice(GOLD_PALETTE), 'twinkle_speed': random.uniform(0.02, 0.1), 'alpha': random.uniform(0.3, 1) }) def draw_star(x, y, size, color, alpha=1): star_pen.penup() star_pen.goto(x, y) star_pen.pendown() # 计算透明色 r = int(int(color[1:3], 16) * alpha) g = int(int(color[3:5], 16) * alpha) b = int(int(color[5:7], 16) * alpha) rgb_color = f"#{r:02x}{g:02x}{b:02x}" star_pen.color(rgb_color) star_pen.begin_fill() for _ in range(5): star_pen.forward(20 * size) star_pen.right(144) star_pen.end_fill() # ==================== 文字祝福 ==================== messages = [ ("母亲节快乐", 0, 250, ("华文行楷", 48, "bold"), "#FF1493"), ("感谢您无私的爱与付出", 0, 180, ("华文楷体", 28, "normal"), "#DB7093"), ("您是我生命中最美的花朵", 0, -320, ("华文隶书", 24, "italic"), "#C71585"), ("❤ 永远爱您 ❤", 0, -360, ("华文琥珀", 32, "bold"), "#FF69B4") ] def draw_text(): for text, x, y, font, color in messages: text_pen.penup() text_pen.goto(x, y) text_pen.pendown() text_pen.color(color) text_pen.write(text, align="center", font=font) # ==================== 主动画循环 ==================== def animate(frame): screen.clear() screen.bgcolor("#FFF0F5") # 绘制3朵不同大小的花 draw_flower(-200, -100, 0.8) draw_stem(-200, -100, 250) draw_flower(200, -150, 1.2) draw_stem(200, -150, 300) draw_flower(0, -50, 1.0) draw_stem(0, -50, 200) # 更新并绘制心形气球 for heart in hearts: heart['y'] += heart['speed'] heart['angle'] += heart['sway'] heart['x'] += math.sin(heart['angle'] * 0.1) * 2 if heart['y'] > 400: heart['y'] = random.randint(-500, -300) heart['x'] = random.randint(-400, 400) draw_heart(heart['x'], heart['y'], heart['size'], heart['color']) # 更新并绘制闪烁星星 for star in stars: star['alpha'] = 0.7 + 0.3 * math.sin(frame * star['twinkle_speed']) draw_star(star['x'], star['y'], star['size'], star['color'], star['alpha']) # 绘制文字 draw_text() screen.update() screen.ontimer(lambda: animate(frame + 1), 30) # ==================== 启动程序 ==================== animate(0) turtle.done()
点赞成功
分享作品
×