端午节
端午节总算是回家了,感觉时间过得真快,马上就毕业了,用Python弄了一个端午节元素的界面,虽然有点不像,祝大家端午安康。端午节粽子(python)_python画粽子-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/131338766?spm=1001.2014.3001.5502
import tkinter as tk
from tkinter import messagebox, Canvas
import random
import math
# 端午节祝福语库
blessings = [
"粽叶飘香五月五,浓情端午送祝福\n愿你生活如粽甜,幸福美满永安康!",
"艾叶香,麦浪黄,人间美景是端阳\n愿您事业龙舟竞渡,生活粽享幸福!",
"五色丝线系吉祥,一枚香囊保安康\n祝您端午时节诸事顺,美好生活万年长!",
"龙舟破浪勇向前,糯米粘粘情相连\n愿您前程似锦赛龙舟,好运连连粽相伴!",
"青青粽叶盈,赤赤枣香浓\n愿您端午安康,幸福永长!",
"彩线轻缠红玉臂,小符斜挂绿云鬟\n祝您端午吉祥,万事如意!"
]
# 全局常量
SCREEN_WIDTH = 1000
SCREEN_HEIGHT = 700
paddle_angle = 0
class DragonBoat:
def __init__(self, canvas):
self.canvas = canvas
self.SCREEN_WIDTH = SCREEN_WIDTH
self.SCREEN_HEIGHT = SCREEN_HEIGHT
self.x = -200
self.y = SCREEN_HEIGHT * 0.7
self.speed = max(1.0, SCREEN_WIDTH / 400)
self.parts = []
# 新增划手动画所需变量
self.paddles = [] # 存储桨线段对象
self.paddle_blades = [] # ✅ 添加这一行:存储桨叶对象
self.paddle_angles = [] # 每个桨的角度
self.paddle_angle_speeds = [] # 每个桨的摆动速度
# 新增龙须变量
self.beards = [] # 存储龙须线段对象
self.beard_angles = [] # 每根龙须的角度偏移
self.beard_oscillation_speed = 0.03 # 降低摆动速度
self.beard_oscillation_amplitude = 2 # 减小摆动幅度
self.create_boat()
def create_boat(self):
# 船体
boat_size = max(30.0, self.SCREEN_WIDTH / 20.0) # 根据屏幕大小调整船体尺寸
hull = self.canvas.create_polygon(
self.x, self.y,
self.x - boat_size * 3, self.y + boat_size,
self.x - boat_size * 2, self.y + boat_size * 2,
self.x + boat_size * 2, self.y + boat_size * 2,
self.x + boat_size * 3, self.y + boat_size,
self.x, self.y,
fill="#CD5C5C", outline="black", width=2, smooth=True
)
self.parts.append(hull)
# 龙头
head = self.canvas.create_polygon(
self.x + boat_size * 3, self.y + boat_size,
self.x + boat_size * 4, self.y + boat_size * 0.5,
self.x + boat_size * 4.5, self.y + boat_size * 0.75,
self.x + boat_size * 4.25, self.y + boat_size * 1.25,
self.x + boat_size * 4, self.y + boat_size * 1.75,
self.x + boat_size * 3.5, self.y + boat_size * 1.75,
self.x + boat_size * 3, self.y + boat_size,
fill="#8B0000", outline="black", width=2, smooth=True
)
self.parts.append(head)
# 龙眼
eye_size = max(2.0, boat_size / 10)
eye = self.canvas.create_oval(
self.x + boat_size * 4.1, self.y + boat_size * 0.875,
self.x + boat_size * 4.25, self.y + boat_size,
fill="white", outline="black"
)
self.parts.append(eye)
pupil = self.canvas.create_oval(
self.x + boat_size * 4.13, self.y + boat_size * 0.9,
self.x + boat_size * 4.17, self.y + boat_size * 0.95,
fill="black"
)
self.parts.append(pupil)
# 龙角
horn1 = self.canvas.create_polygon(
self.x + boat_size * 4.25, self.y + boat_size * 0.75,
self.x + boat_size * 4.375, self.y + boat_size * 0.375,
self.x + boat_size * 4.5, self.y + boat_size * 0.5,
self.x + boat_size * 4.25, self.y + boat_size * 0.75,
fill="#8B4513", outline="black"
)
horn2 = self.canvas.create_polygon(
self.x + boat_size * 4, self.y + boat_size * 0.5,
self.x + boat_size * 4.125, self.y + boat_size * 0.25,
self.x + boat_size * 4.25, self.y + boat_size * 0.375,
self.x + boat_size * 4, self.y + boat_size * 0.5,
fill="#8B4513", outline="black"
)
self.parts.extend([horn1, horn2])
# 龙须
beard1 = self.canvas.create_line(
self.x + boat_size * 3.9, self.y + boat_size * 1.1,
self.x + boat_size * 3.95, self.y + boat_size * 1.05, # 缩短距离
self.x + boat_size * 4.0, self.y + boat_size * 0.95,
fill="gold", width=2, smooth=False
)
beard2 = self.canvas.create_line(
self.x + boat_size * 3.9, self.y + boat_size * 1.3,
self.x + boat_size * 3.95, self.y + boat_size * 1.35,
self.x + boat_size * 4.0, self.y + boat_size * 1.4,
fill="gold", width=2, smooth=False
)
self.parts.extend([beard1, beard2])
self.beards.extend([beard1, beard2])
# 初始化龙须摆动角度
for _ in range(len(self.beards)):
self.beard_angles.append(random.uniform(0, math.pi * 2))
# 划桨手
num_rowers = max(3, int(SCREEN_HEIGHT / 200)) # 根据屏幕宽度调整划手数量
for i in range(num_rowers):
rower_x = self.x - boat_size * 2 + i * (boat_size * 1.5)
# 身体位置 - 在船体内部
body_y = self.y + boat_size * 0.8 # 降低身体位置
# 身体
body = self.canvas.create_oval(
rower_x, body_y,
rower_x + boat_size * 0.375, body_y + boat_size * 0.5,
fill="#FFD700"
)
# 头部
head = self.canvas.create_oval(
rower_x + boat_size * 0.075, body_y - boat_size * 0.4,
rower_x + boat_size * 0.3, body_y,
fill="#FFDEAD"
)
# 桨 - 修复位置问题
# 桨柄位置在划手身体中间
paddle_x = rower_x + boat_size * 0.1875
paddle_y = body_y + boat_size * 0.25
# 桨长度
paddle_length = boat_size * random.uniform(1.5, 2.5)
angle_deg = 30 + math.sin(paddle_angle) * 10 # 动态角度
# 桨的角度 - 稍微向下倾斜
paddle_end_x = paddle_x + paddle_length * math.cos(math.radians(angle_deg))
paddle_end_y = paddle_y + paddle_length * math.sin(math.radians(angle_deg))
# 绘制船桨
paddle = self.canvas.create_line(
paddle_x, paddle_y,
paddle_end_x, paddle_end_y,
fill="#8B4513", width=3
)
# 绘制桨叶
paddle_blade = self.canvas.create_polygon(
paddle_end_x, paddle_end_y,
paddle_end_x + boat_size * 0.2, paddle_end_y + boat_size * 0.1,
paddle_end_x + boat_size * 0.2, paddle_end_y - boat_size * 0.1,
paddle_end_x, paddle_end_y,
fill="#8B4513", outline="black"
)
self.parts.extend([body, head, paddle, paddle_blade])
# 在创建桨后保存引用
self.paddles.append(paddle) # paddle 是 line 对象
self.paddle_blades.append(paddle_blade) # 这是关键!
self.paddle_angles.append(random.uniform(0, math.pi * 2)) # 初始角度
self.paddle_angle_speeds.append(random.uniform(0.05, 0.1)) # 摆动速度
def move(self):
for item in self.parts:
self.canvas.move(item, self.speed, 0)
self.x += self.speed
if self.x > self.SCREEN_WIDTH + 200:
self.reset_position()
return
# 更新每个桨的角度
for i in range(len(self.paddles)):
try:
self.paddle_angles[i] += self.paddle_angle_speeds[i]
# 获取桨起点
coords = self.canvas.coords(self.paddles[i])
if not coords:
continue
paddle_x, paddle_y = coords[0], coords[1]
# 计算新终点
angle_deg = 30 + math.sin(self.paddle_angles[i]) * 15
paddle_length = 60 # 固定长度或根据 boat_size 调整
paddle_end_x = paddle_x + paddle_length * math.cos(math.radians(angle_deg))
paddle_end_y = paddle_y + paddle_length * math.sin(math.radians(angle_deg))
# 更新桨线段
self.canvas.coords(
self.paddles[i],
paddle_x, paddle_y,
paddle_end_x, paddle_end_y
)
# 更新桨叶(如果存在)
if i < len(self.paddle_blades) and self.paddle_blades[i]:
self.canvas.coords(
self.paddle_blades[i],
paddle_end_x, paddle_end_y,
paddle_end_x + 10, paddle_end_y + 5,
paddle_end_x + 10, paddle_end_y - 5,
paddle_end_x, paddle_end_y
)
except IndexError:
continue # 忽略越界索引
# ✅ 更新龙须的摆动动画
global paddle_angle
for i in range(len(self.beards)):
coords = self.canvas.coords(self.beards[i])
if not coords or len(coords) < 6: # 确保有3个点(6个坐标)
continue
x1, y1, mid_x, mid_y, x2, y2 = coords
# ✅ 使用全局 paddle_angle 控制龙须摆动
# 计算端点摆动
end_offset = math.sin(paddle_angle + i * 0.5) * self.beard_oscillation_amplitude
new_x2 = x2 + end_offset * 0.5
new_y2 = y2 + end_offset * 0.5
# 对中间点增加小幅摆动
mid_offset = math.sin(paddle_angle + i * 0.5) * self.beard_oscillation_amplitude * 0.3
new_mid_x = mid_x + mid_offset * 0.2
new_mid_y = mid_y + mid_offset * 0.2
# 更新三个点坐标(形成折线)
self.canvas.coords(self.beards[i],
x1, y1,
new_mid_x, new_mid_y, # 中间点坐标
new_x2, new_y2)
def reset_position(self):
for item in self.parts:
self.canvas.delete(item)
self.parts = []
self.x = -200
self.y = self.SCREEN_HEIGHT * 0.7
self.speed = max(1.0, self.SCREEN_WIDTH / 400)
self.create_boat()
class FloatingZongzi:
def __init__(self, canvas):
self.canvas = canvas
self.SCREEN_WIDTH = SCREEN_WIDTH
self.SCREEN_HEIGHT = SCREEN_HEIGHT
# 确保使用整数参数
min_y = int(SCREEN_HEIGHT * 0.7)
max_y = int(SCREEN_HEIGHT - 50)
self.x = random.randint(50, SCREEN_WIDTH - 50)
self.y = random.randint(min_y, max_y) if min_y < max_y else min_y
self.size = random.randint(
max(10, int(SCREEN_WIDTH / 80)),
max(20, int(SCREEN_WIDTH / 40))
)
self.speed = random.uniform(0.3, 1.0)
self.direction = random.choice([-1, 1])
self.zongzi = self.create_zongzi()
def create_zongzi(self):
# 粽体
body = self.canvas.create_polygon(
self.x, self.y,
self.x - self.size / 2, self.y + self.size,
self.x + self.size / 2, self.y + self.size,
self.x, self.y,
fill="#3CB371", outline="black", width=1, smooth=True
)
# 粽叶纹理
for i in range(3):
y_offset = self.y + (i + 1) * self.size / 4
line = self.canvas.create_line(
self.x - self.size / 2 + 5, y_offset,
self.x + self.size / 2 - 5, y_offset,
fill="#2E8B57", width=1
)
# 绑绳
rope_y = self.y + self.size * 0.7
rope = self.canvas.create_line(
self.x - self.size / 2, rope_y,
self.x + self.size / 2, rope_y,
fill="#8B4513", width=2
)
return [body, rope]
def move(self):
self.y -= self.speed
self.x += self.speed * self.direction * 0.3
for item in self.zongzi:
self.canvas.move(item, self.speed * self.direction * 0.3, -self.speed)
# 如果飘出屏幕,重置位置
if self.y < -50:
self.reset_position()
def reset_position(self):
for item in self.zongzi:
self.canvas.delete(item)
self.x = random.randint(50, self.SCREEN_WIDTH - 50)
self.y = self.SCREEN_HEIGHT + 50
self.zongzi = self.create_zongzi()
def show_blessing():
"""显示随机祝福"""
blessing = random.choice(blessings)
messagebox.showinfo("端午安康", blessing)
def create_background(canvas):
"""创建自适应背景"""
# 清除现有背景
canvas.delete("background")
# 渐变天空
for i in range(int(SCREEN_HEIGHT * 0.7)):
y = i
blue_value = max(100.0, 235 - i * 0.7)
color = f"#87CE{int(blue_value):02X}"
canvas.create_line(0, y, SCREEN_WIDTH, y, fill=color, width=1, tags="background")
# 水面
canvas.create_rectangle(
0, SCREEN_HEIGHT * 0.7,
SCREEN_WIDTH, SCREEN_HEIGHT,
fill="#1E90FF", outline="", tags="background"
)
# 远山
num_mountains = max(3, int(SCREEN_WIDTH / 200))
for i in range(num_mountains):
x_start = i * (SCREEN_WIDTH / num_mountains) - 100
height = random.randint(int(SCREEN_HEIGHT * 0.1), int(SCREEN_HEIGHT * 0.2))
points = [x_start, SCREEN_HEIGHT * 0.7]
segments = 5
for j in range(segments):
points.extend([
x_start + j * (SCREEN_WIDTH / num_mountains / segments),
SCREEN_HEIGHT * 0.7 - random.randint(20, height)
])
points.extend([x_start + SCREEN_WIDTH / num_mountains, SCREEN_HEIGHT * 0.7])
canvas.create_polygon(points, fill="#228B22", outline="#006400", smooth=True, tags="background")
# 水波纹
wave_height = min(10.0, SCREEN_HEIGHT * 0.02)
for i in range(int(SCREEN_HEIGHT * 0.3 / 10)):
y = SCREEN_HEIGHT * 0.7 + i * 10
for j in range(int(SCREEN_WIDTH / 40)):
x_start = j * 40
canvas.create_arc(
x_start, y,
x_start + 40, y + wave_height * 2,
start=180, extent=-180,
outline="#87CEEB", width=1, tags="background"
)
def create_title(canvas):
"""创建自适应标题"""
canvas.delete("title")
canvas.create_text(
SCREEN_WIDTH / 2, SCREEN_HEIGHT * 0.15,
text="端午节安康",
font=("楷体", 36, "bold"),
fill="#B22222",
activefill="#FF4500",
tags="title"
)
# 装饰花纹
for i in range(8):
angle = i * math.pi / 4
radius = min(150.0, SCREEN_WIDTH / 8)
x = SCREEN_WIDTH / 2 + radius * math.cos(angle)
y = SCREEN_HEIGHT * 0.15 + radius * math.sin(angle)
canvas.create_line(SCREEN_WIDTH / 2, SCREEN_HEIGHT * 0.15, x, y, fill="gold", width=2, dash=(4, 4),
tags="title")
# 装饰粽子
size = max(10.0, min(20.0, SCREEN_WIDTH / 60))
zongzi = canvas.create_polygon(
x, y,
x - size / 2, y + size,
x + size / 2, y + size,
x, y,
fill="#3CB371", outline="black", width=1, tags="title"
)
# 装饰艾草
if i % 2 == 0:
canvas.create_line(x, y, x, y - size * 2, fill="#228B22", width=3, tags="title")
canvas.create_line(x, y - size * 2, x - size, y - size * 3, fill="#228B22", width=2, tags="title")
canvas.create_line(x, y - size * 2, x + size, y - size * 3, fill="#228B22", width=2, tags="title")
def create_button(canvas):
"""创建自适应按钮"""
canvas.delete("button")
button_width = 100
button_height = 50
button_x = SCREEN_WIDTH / 2 - button_width / 2
button_y = SCREEN_HEIGHT * 0.85
button_bg = canvas.create_rectangle(
button_x, button_y,
button_x + button_width, button_y + button_height,
fill="#FFD700", outline="#8B0000", width=2, tags="button"
)
button_text = canvas.create_text(
SCREEN_WIDTH / 2, button_y + button_height / 2,
text="端午祝福",
font=("微软雅黑", 18, "bold"),
fill="#8B0000",
tags="button"
)
# 绑定事件
canvas.tag_bind(button_bg, "<Button-1>", lambda e: show_blessing())
canvas.tag_bind(button_text, "<Button-1>", lambda e: show_blessing())
# 添加悬停效果
def on_enter(e):
canvas.itemconfig(button_bg, fill="#FFA500")
def on_leave(e):
canvas.itemconfig(button_bg, fill="#FFD700")
canvas.tag_bind(button_bg, "<Enter>", on_enter)
canvas.tag_bind(button_bg, "<Leave>", on_leave)
canvas.tag_bind(button_text, "<Enter>", on_enter)
canvas.tag_bind(button_text, "<Leave>", on_leave)
def center_window(root):
"""将窗口置于屏幕中央"""
root.update_idletasks()
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
x = (screen_width - SCREEN_WIDTH) // 2
y = (screen_height - SCREEN_HEIGHT) // 4
root.geometry(f"{SCREEN_WIDTH}x{SCREEN_HEIGHT}+{x}+{y}")
def animate():
"""动画循环"""
global paddle_angle
dragon_boat.move()
for zongzi in floating_zongzis:
zongzi.move()
paddle_angle += 0.1 # 控制摆动速度
root.after(30, animate)
# 创建主窗口
root = tk.Tk()
root.title("端午安康")
root.configure(bg="#F0F8FF")
root.resizable(False, False)
# 创建画布
canvas = Canvas(root, width=SCREEN_WIDTH, height=SCREEN_HEIGHT, bg="white", highlightthickness=0)
canvas.pack()
# 初始化元素
create_background(canvas)
create_title(canvas)
create_button(canvas)
# 初始化动画元素
dragon_boat = DragonBoat(canvas)
floating_zongzis = [FloatingZongzi(canvas) for _ in range(10)]
# 窗口居中
center_window(root)
# 开始动画
animate()
root.mainloop()
儿童节
想绘制出一个好的节日祝福,需要考虑到这个节日有哪些特色的元素。
import pygame
import sys
import random
import math
from pygame import gfxdraw
from datetime import datetime
# 初始化pygame
pygame.init()
# 设置窗口
WIDTH, HEIGHT = 1000, 700
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("儿童节快乐!")
# 颜色定义
BACKGROUND = (173, 216, 230) # 淡蓝色背景
RED = (255, 50, 50)
GREEN = (50, 200, 50)
BLUE = (50, 50, 255)
YELLOW = (255, 255, 0)
PURPLE = (200, 50, 200)
ORANGE = (255, 165, 0)
PINK = (255, 105, 180)
CYAN = (0, 255, 255)
COLORS = [RED, GREEN, BLUE, YELLOW, PURPLE, ORANGE, PINK, CYAN]
# 字体
title_font = pygame.font.SysFont("simhei", 60, bold=True)
subtitle_font = pygame.font.SysFont("simhei", 36)
message_font = pygame.font.SysFont("simhei", 28)
# 气球类
class Balloon:
def __init__(self):
self.radius = random.randint(20, 50)
self.x = random.randint(self.radius, WIDTH - self.radius)
self.y = HEIGHT + self.radius
self.color = random.choice(COLORS)
self.speed = random.uniform(0.5, 2.0)
self.swing = random.uniform(0.01, 0.05)
self.angle = random.uniform(0, 2 * math.pi)
self.string_length = random.randint(80, 150)
def update(self):
self.y -= self.speed
self.angle += self.swing
self.x += math.sin(self.angle) * 0.5
def draw(self, surface):
# 绘制气球
pygame.draw.circle(surface, self.color, (int(self.x), int(self.y)), self.radius)
pygame.draw.circle(surface, (255, 255, 255), (int(self.x - self.radius // 3), int(self.y - self.radius // 3)),
self.radius // 4)
# 绘制绳子
points = []
for i in range(self.string_length):
px = self.x + math.sin(self.angle + i * 0.1) * 2
py = self.y + self.radius + i
points.append((px, py))
if len(points) > 1:
pygame.draw.lines(surface, (100, 100, 100), False, points, 1)
def is_off_screen(self):
return self.y < -self.radius
# 粒子效果类
class Particle:
def __init__(self, x, y):
self.x = x
self.y = y
self.size = random.randint(2, 6)
self.color = random.choice(COLORS)
self.speed_x = random.uniform(-3, 3)
self.speed_y = random.uniform(-5, -2)
self.gravity = 0.1
self.life = 100
def update(self):
self.x += self.speed_x
self.y += self.speed_y
self.speed_y += self.gravity
self.life -= 1
def draw(self, surface):
alpha = min(255, self.life * 3)
color = (self.color[0], self.color[1], self.color[2], alpha)
pygame.gfxdraw.filled_circle(surface, int(self.x), int(self.y), self.size, color)
def is_dead(self):
return self.life <= 0
# 祝福语
messages = [
"祝所有小朋友儿童节快乐!",
"愿你们永远保持童真和好奇心!",
"健康成长,快乐学习!",
"天天开心,笑容常在!",
"梦想成真,未来可期!",
"愿你们的童年充满欢乐和美好回忆!",
"六一儿童节快乐!愿你永远保持纯真笑脸,健康成长每一天!",
"童心未泯,快乐常在!祝小朋友节日快乐,梦想成真!",
"愿你像小树苗一样茁壮成长,像小星星一样闪闪发光!",
"儿童节到啦!愿你的童年充满糖果般的甜蜜和彩虹般的色彩!",
"保持好奇心,探索大世界!祝聪明的小朋友节日快乐!",
"愿你眼中永远有星光,心中永远有童话,节日快乐小天使!",
"乘着快乐的翅膀,飞向梦想的远方!儿童节快乐!",
"今天是你的专属节日!尽情欢笑,尽情玩耍,做最快乐的小孩!",
"愿你的书包装满知识,口袋装满糖果,心里装满快乐!",
"像奥特曼一样勇敢,像哆啦A梦一样神奇!节日快乐小超人!",
"画个太阳照亮童年,折个纸飞机放飞梦想!六一快乐!",
"愿你用蜡笔画下七彩童年,用积木搭建美好未来!",
"保持童真看世界,带着梦想向前冲!儿童节快乐!",
"今天是童话成真的日子,愿你的生活像动画片一样精彩!",
"愿快乐常驻你的酒窝,智慧点亮你的双眸!节日快乐!",
"像小蜜蜂一样勤劳,像小蝴蝶一样美丽!做最棒的小朋友!",
"吹起欢乐的泡泡,荡起幸福的秋千,享受属于你的节日!",
"愿你拥有佩奇的快乐,熊大的勇敢,汪汪队的智慧!",
"童年是生命中最美的乐章,愿你奏响最欢快的音符!",
"收集全世界的阳光,装点你的笑脸!儿童节快乐小太阳!"
]
# 创建气球
balloons = []
particles = []
message_index = 0
message_timer = 0
current_message = messages[0] # 初始祝福语
previous_message = None
# 主循环
clock = pygame.time.Clock()
running = True
while running:
current_time = pygame.time.get_ticks()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
elif event.key == pygame.K_SPACE:
# 空格键添加气球
for _ in range(5):
balloons.append(Balloon())
# 随机添加气球
if random.random() < 0.05:
balloons.append(Balloon())
# 更新气球
for balloon in balloons[:]:
balloon.update()
if balloon.is_off_screen():
balloons.remove(balloon)
# 更新粒子
for particle in particles[:]:
particle.update()
if particle.is_dead():
particles.remove(particle)
# 随机生成粒子
if random.random() < 0.2:
particles.append(Particle(random.randint(0, WIDTH), HEIGHT - 10))
# 更新祝福语
message_timer += 1
if message_timer > 200: # 每200帧切换一次祝福语
while True:
new_msg = random.choice(messages)
if new_msg != previous_message:
previous_message = new_msg
current_message = new_msg
break
message_timer = 0
# 绘制背景
screen.fill(BACKGROUND)
# 绘制云朵
for i in range(3):
cloud_x = (current_time // 30 + i * 300) % (WIDTH + 200) - 100
cloud_y = 100 + i * 80
pygame.draw.circle(screen, (250, 250, 250), (cloud_x, cloud_y), 30)
pygame.draw.circle(screen, (250, 250, 250), (cloud_x + 20, cloud_y - 15), 25)
pygame.draw.circle(screen, (250, 250, 250), (cloud_x + 40, cloud_y), 30)
pygame.draw.circle(screen, (250, 250, 250), (cloud_x + 20, cloud_y + 15), 25)
# 绘制草地
pygame.draw.rect(screen, (100, 200, 100), (0, HEIGHT - 50, WIDTH, 50))
for i in range(20):
x = i * 50
pygame.draw.arc(screen, (0, 150, 0), (x, HEIGHT - 80, 50, 50), 0, math.pi, 3)
# 绘制气球
for balloon in balloons:
balloon.draw(screen)
# 绘制粒子
for particle in particles:
particle.draw(screen)
# 绘制标题
title = title_font.render("儿童节快乐!", True, (200, 0, 100))
screen.blit(title, (WIDTH // 2 - title.get_width() // 2, 30))
# 绘制日期
today = datetime.now().strftime("%Y年%m月%d日")
date_text = subtitle_font.render(today, True, (0, 100, 200))
screen.blit(date_text, (WIDTH // 2 - date_text.get_width() // 2, 100))
# 绘制祝福语
message = current_message
msg_surface = message_font.render(message, True, (0, 0, 150))
screen.blit(msg_surface, (WIDTH // 2 - msg_surface.get_width() // 2, HEIGHT - 200))
# 绘制气球提示
hint = message_font.render("按空格键添加更多气球", True, (100, 100, 100))
screen.blit(hint, (WIDTH // 2 - hint.get_width() // 2, HEIGHT - 150))
# 绘制退出提示
exit_hint = message_font.render("按ESC键退出", True, (100, 100, 100))
screen.blit(exit_hint, (WIDTH - exit_hint.get_width() - 20, HEIGHT - 40))
# 绘制儿童节标志
pygame.draw.circle(screen, (255, 240, 0), (WIDTH // 2, HEIGHT // 2 - 50), 60)
pygame.draw.circle(screen, (255, 150, 0), (WIDTH // 2, HEIGHT // 2 - 50), 55, 5)
# 绘制笑脸 - 修正后的笑脸
pygame.draw.circle(screen, (0, 0, 0), (WIDTH // 2 - 20, HEIGHT // 2 - 60), 8) # 左眼
pygame.draw.circle(screen, (0, 0, 0), (WIDTH // 2 + 20, HEIGHT // 2 - 60), 8) # 右眼
# 绘制笑脸的嘴巴(向上弯曲)
mouth_rect = (WIDTH // 2 - 25, HEIGHT // 2 - 40, 50, 40)
pygame.draw.arc(screen, (0, 0, 0), mouth_rect, math.pi, 2 * math.pi, 3)
# 绘制彩带
for i in range(8):
angle = i * math.pi / 4 + current_time / 1000
length = 100
end_x = WIDTH // 2 + math.cos(angle) * length
end_y = HEIGHT // 2 - 50 + math.sin(angle) * length
pygame.draw.line(screen, COLORS[i % len(COLORS)],
(WIDTH // 2, HEIGHT // 2 - 50),
(end_x, end_y), 3)
pygame.display.flip()
clock.tick(60)
pygame.quit()
sys.exit()