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)
html2.link ·粘贴 HTML,一键生成链接
举报