[파이썬] pygame 입자 시스템 및 효과

소개

pygame은 파이썬으로 게임을 만들기 위한 모듈입니다. pygame의 파티클 시스템과 효과 기능을 사용하면 다양한 시각적 효과를 구현할 수 있습니다. 입자 시스템은 입자들이 화면에서 움직이고 상호작용하면서 시각적으로 인상적인 효과를 만들어냅니다. 이 블로그 포스트에서는 pygame을 사용하여 입자 시스템을 만들고 효과를 추가하는 방법을 알아보겠습니다.

파티클 시스템 만들기

파티클 시스템은 작은 입자들의 그룹으로 구성됩니다. 각 입자는 위치, 속도, 크기, 색상 등의 속성을 가질 수 있습니다. 다음은 pygame을 사용하여 간단한 파티클 시스템을 만드는 예제 코드입니다.

import pygame
import random

class Particle:
    def __init__(self, position):
        self.position = position
        self.velocity = pygame.math.Vector2(random.uniform(-1, 1), random.uniform(-1, 1))
        self.size = random.randint(1, 5)
        self.color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))

    def update(self):
        self.position += self.velocity
        self.velocity *= 0.99
        self.size -= 0.05

    def draw(self, screen):
        pygame.draw.circle(screen, self.color, (int(self.position.x), int(self.position.y)), int(self.size))

pygame.init()

screen_width, screen_height = 800, 600
screen = pygame.display.set_mode((screen_width, screen_height))
clock = pygame.time.Clock()

particles = []

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

    if len(particles) < 100:
        particles.append(Particle(pygame.math.Vector2(screen_width/2, screen_height/2)))

    screen.fill((0, 0, 0))

    for particle in particles:
        particle.update()
        particle.draw(screen)

    particles = [particle for particle in particles if particle.size > 0]

    pygame.display.flip()
    clock.tick(60)

pygame.quit()

위의 코드는 파티클 시스템을 구현하고 화면에 입자들을 그리는 예제입니다. 각 입자는 초기 위치와 속도, 크기, 색상을 가지며, 시간이 경과함에 따라 위치를 업데이트하고 크기를 줄이면서 화면에 그려집니다. 또한 입자의 크기가 일정 값보다 작아지면 파티클 리스트에서 제거됩니다.

효과 추가하기

파티클 시스템에 다양한 효과를 추가할 수 있습니다. 예를 들어 입자들이 특정 패턴으로 움직이거나 충돌 시 특별한 효과를 보여줄 수 있습니다. 다음은 파티클 시스템에 입자 간에 중력을 적용하는 효과를 추가한 예제 코드입니다.

import pygame
import random

class Particle:
    def __init__(self, position):
        self.position = position
        self.velocity = pygame.math.Vector2(random.uniform(-1, 1), random.uniform(-1, 1))
        self.size = random.randint(1, 5)
        self.color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))

    def update(self):
        gravity = pygame.math.Vector2(0, 0.1)  # 중력 벡터
        self.velocity += gravity
        self.position += self.velocity
        self.velocity *= 0.99
        self.size -= 0.05

    def draw(self, screen):
        pygame.draw.circle(screen, self.color, (int(self.position.x), int(self.position.y)), int(self.size))

pygame.init()

screen_width, screen_height = 800, 600
screen = pygame.display.set_mode((screen_width, screen_height))
clock = pygame.time.Clock()

particles = []

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

    if len(particles) < 100:
        particles.append(Particle(pygame.math.Vector2(screen_width/2, screen_height/2)))

    screen.fill((0, 0, 0))

    for particle in particles:
        particle.update()
        particle.draw(screen)

    particles = [particle for particle in particles if particle.size > 0]

    pygame.display.flip()
    clock.tick(60)

pygame.quit()

위의 코드에서는 입자에 중력을 적용하여 입자들이 화면 아래로 떨어지는 효과를 보여줍니다. 입자들은 위치와 속도를 업데이트할 때 중력을 고려하여 속도 벡터에 중력 벡터를 더합니다.

이처럼 파이썬과 pygame을 사용하여 입자 시스템과 다양한 효과를 구현할 수 있습니다. 입자 시스템을 사용하면 게임이나 시뮬레이션에서 다양한 시각적 효과를 만들 수 있으므로 흥미로운 프로젝트에 활용할 수 있습니다.