1、设计背景

        最近在网上看到了很多粒子爱心的python源码,所以就突发奇想也做一个爱心,但是粒子爱心这么多人做了就没什么意思了,那我就来做一个3D粉嫩旋转爱心,要的就是别出心裁,出人意料。这发给财务小姐姐,我恏大力的春天不就来了!!

2、使用技术

        这次使用的是一个python很流行的游戏设计库pygame,这个库基本上可以做大部分单机小游戏,而且有独立的社区,很值得去研究一下。

3、源码如下:

        好的,废话不多说,上源码!(注释都在代码里)

import pygame
from math import sin, cos, pi
import random

# 初始化Pygame
pygame.init()

# 设置窗口
WIDTH = 800
HEIGHT = 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("流动的粒子爱心")

# 粒子类
class Particle:
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z
        self.original_x = x
        self.original_y = y
        self.original_z = z
        self.color = (255, 192, 203)  # 粉色
        self.size = random.randint(2, 4)
        self.speed = random.uniform(0.02, 0.05)
        self.offset = random.uniform(0, 2 * pi)

    def update(self, time):
        # 添加波动效果
        wave = sin(time + self.offset) * 0.5
        self.x = self.original_x + wave
        self.y = self.original_y + wave
        self.z = self.original_z + wave

# 生成心形粒子
def create_heart_particles(num_particles):
    particles = []
    for _ in range(num_particles):
        t = random.uniform(0, 2 * pi)
        r = random.uniform(0, 2)
        x = 16 * (sin(t) ** 3)
        y = -(13 * cos(t) - 5 * cos(2*t) - 2 * cos(3*t) - cos(4*t))
        z = random.uniform(-5, 5)
        particles.append(Particle(x, y, z))
    return particles

# 创建粒子
particles = create_heart_particles(5000)  # 增加粒子数量

# 主循环
running = True
angle = 0
time = 0
clock = pygame.time.Clock()

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 清空屏幕
    screen.fill((0, 0, 0))

    # 更新时间
    time += 0.05

    # 更新和绘制粒子
    for particle in particles:
        # 更新粒子位置
        particle.update(time)

        # 3D旋转
        x = particle.x * cos(angle) - particle.z * sin(angle)
        z = particle.x * sin(angle) + particle.z * cos(angle)
        
        # 3D到2D的投影
        scale = 200 / (z + 20)
        x2d = int(x * scale + WIDTH/2)
        y2d = int(particle.y * scale + HEIGHT/2)
        
        # 绘制粒子,添加渐变色效果
        if 0 <= x2d < WIDTH and 0 <= y2d < HEIGHT:
            size = int(particle.size * scale)
            if size < 1:
                size = 1
            # 根据波动改变颜色
            color_offset = int(abs(sin(time + particle.offset)) * 55)
            color = (255, 192 - color_offset, 203 - color_offset)
            pygame.draw.circle(screen, color, (x2d, y2d), size)

    angle += 0.01  # 减慢旋转速度
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

4、最终效果

        效果大概是这个样子的,这个效果实现也是没有任何素材,直接就能够运行,打包起来也很方便!

学会了就赶紧发给财务小姐姐吧!!!

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐