В компьютерной графике эффекты частиц — это технология, использующая большое количество маленьких и простых элементов изображения (частиц) для моделирования крупномасштабных физических явлений.
Сначала вам нужно установить библиотеку Pygame. Если вы еще не установили его, вы можете установить его с помощью следующей команды:
pip install pygame
import pygame
import random
import math # Импортируйте математическую библиотеку для вычислений.
pygame.init()
window_size = (800, 600)
screen = pygame.display.set_mode(window_size)
pygame.display.set_caption("Динамические частицы любви, спецэффекты")
Эти формулы основаны на параметре t, определяющем расположение точек на форме сердца.
Метод расчета t: В этом контексте t — это параметр, который обычно варьируется в определенном диапазоне для создания всех точек формы сердца. Этот диапазон обычно составляет от 0 до 2π (или, в более общем смысле, любой диапазон, охватывающий полный период).
class Particle:
def __init__(self, x, y):
self.x = x
self.y = y
self.vx = random.uniform(-1, 1)
self.vy = random.uniform(-1, 1)
self.color = (random.randint(200, 255), 0, 0) # случайный красный градиент
self.size = random.randint(1, 6) # Размер частиц случайный
self.life = 100 # Здоровье частиц
def update(self):
self.x += self.vx
self.y += self.vy
self.life -= 1
def generate_heart_particles(num_particles):
particles = []
t_values = [i * 0.05 for i in range(int(2 * math.pi * 10))] # Используйте math.pi, чтобы получить значение π
for t in t_values:
x = 16 * (math.sin(t) ** 3)
y = 13 * math.cos(t) - 5 * math.cos(2 * t) - 2 * math.cos(3 * t) - math.cos(4 * t)
for _ in range(num_particles // len(t_values)):
particles.append(Particle(x + random.uniform(-20, 20), y + random.uniform(-20, 20)))
return particles
particles = generate_heart_particles(200)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((0, 0, 0)) # очистить экран
for particle in particles[:]: # Используйте [:] для предотвращения изменения исходного списка.
particle.update()
if particle.life > 0:
pygame.draw.circle(screen, particle.color, (int(particle.x), int(particle.y)), particle.size)
else:
particles.remove(particle) # Удалите частицы, исчерпавшие свое здоровье
pygame.display.flip()
pygame.time.Clock().tick(60) # Установите частоту кадров на 60 кадров в секунду.
pygame.quit()
Ниже приведен полный код
import pygame
import random
import math
pygame.init()
window_size = (800, 600)
screen = pygame.display.set_mode(window_size)
pygame.display.set_caption("Динамические частицы любви, спецэффекты")
class Particle:
def __init__(self, x, y):
self.x = x
self.y = y
self.vx = random.uniform(-1, 1)
self.vy = random.uniform(-1, 1)
self.color = (random.randint(200, 255), 0, 0)
self.size = random.randint(1, 6)
self.life = 100
def update(self):
self.x += self.vx
self.y += self.vy
self.life -= 1
def generate_heart_particles(num_particles):
particles = []
t_values = [i * 0.05 for i in range(int(2 * math.pi * 10))]
for t in t_values:
x = 16 * (math.sin(t) ** 3)
y = 13 * math.cos(t) - 5 * math.cos(2 * t) - 2 * math.cos(3 * t) - math.cos(4 * t)
for _ in range(num_particles // len(t_values)):
particles.append(Particle(x + random.uniform(-20, 20), y + random.uniform(-20, 20)))
return particles
particles = generate_heart_particles(200)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((0, 0, 0))
for particle in particles[:]:
particle.update()
if particle.life > 0:
pygame.draw.circle(screen, particle.color, (int(particle.x), int(particle.y)), particle.size)
else:
particles.remove(particle)
pygame.display.flip()
pygame.time.Clock().tick(60)
pygame.quit()