import pygame
import numpy as np
import sys
from math import sin, cos, pi
pygame.init()
screen = pygame.display.set_mode((800, 600))
clock = pygame.time.Clock()
pygame.display.set_caption("粒子爱心动态验证系统")
def verify_resolution():
assert screen.get_size() == (800, 600), "分辨率必须800x600"
def verify_particle_count():
assert len(particles) == 3000, "粒子数量必须3000个"
def verify_heart_shape():
t = pi/2
x = 16*(sin(t)**3)
y = -(13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t))
assert abs(x-16) < 0.01 and abs(y+8) < 0.01, "心形参数方程错误"
def verify_dual_text():
assert "Merry Christmas" in text_content and "毕业快乐" in text_content, "缺失双主题文字"
def verify_teacher_contract():
assert selected == "是", "必须选择'是'才能维持师徒契约"
assert scale >= 1.0, "爱心尺寸必须持续增长"
particles = []
selected = None
scale = 1.0
scale_speed = 0.0
no_button_x = 600
text_content = ["Merry Christmas", "毕业快乐"]
text_frames = 0
for i in range(3000):
t = i * 0.002 * pi
x = 16 * (sin(t) ** 3)
y = -(13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t))
particles.append([x*15+400, y*15+250, 0, 0, 255, 0, 0])
while True:
screen.fill((0, 0, 0))
if selected is None:
font = pygame.font.SysFont(None, 48)
screen.blit(font.render("你是我永远的老师吗?", True, (255,100,100)), (200, 150))
yes_btn = pygame.draw.rect(screen, (0,200,0), (250, 300, 120, 60))
screen.blit(font.render("是", True, (255,255,255)), (290, 315))
no_button_x = (no_button_x + 3) % 700 + 50
no_btn = pygame.draw.rect(screen, (200,0,0), (no_button_x, 300, 120, 60))
screen.blit(font.render("否", True, (255,255,255)), (no_button_x+40, 315))
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
if yes_btn.collidepoint(event.pos):
selected = "是"
scale_speed = 0.005
elif no_btn.collidepoint(event.pos):
selected = "否"
scale_speed = -0.01
else:
for p in particles:
if selected == "否":
p[2] += (np.random.random()-0.5)*0.5
p[3] += (np.random.random()-0.5)*0.5
scale = max(0.1, scale + scale_speed)
else:
p[0] += (400 - p[0]) * 0.01
p[1] += (250 - p[1]) * 0.01
scale = min(3.0, scale + scale_speed)
p[0] += p[2] * scale
p[1] += p[3] * scale
size = max(0.5, 5 * scale - abs(p[4] * 0.02))
pygame.draw.circle(screen, (p[4], 0, 0), (int(p[0]), int(p[1])), int(size))
p[4] = (p[4] + 1) % 256
text_frames += 1
if text_frames > 100:
font = pygame.font.SysFont(None, 48)
screen.blit(font.render("Merry Christmas", True, (255,0,0)), (250, 450))
screen.blit(font.render("毕业快乐", True, (255,0,0)), (280, 500))
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
verify_resolution()
verify_particle_count()
verify_heart_shape()
verify_dual_text()
if selected: verify_teacher_contract()
pygame.display.flip()
clock.tick(60)