忽悠财务小姐姐神器(python实现3D爱心)

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、最终效果

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值