Pygame 을 사용한 코드 비 애니메이션 만들기

PythonBeginner
지금 연습하기

소개

이 프로젝트에서는 Python 의 Pygame 라이브러리를 사용하여 간단한 코드 레인 애니메이션을 만드는 방법을 배웁니다. "매트릭스"와 같은 영화에서 대중화된 코드 레인 애니메이션은 화면에 떨어지는 문자를 표시하여 디지털 비가 내리는 듯한 인상을 줍니다. Pygame 라이브러리를 사용하여 애니메이션을 만들고 창에 표시합니다.

👀 미리보기

Code rain

🎯 작업

이 프로젝트에서는 다음을 배우게 됩니다.

  • Pygame 에서 애니메이션 창을 설정하는 방법
  • 각 떨어지는 문자를 나타내는 "Raindrop" 클래스를 정의하는 방법
  • Raindrop 클래스의 여러 인스턴스를 생성하고 표시하는 방법
  • 애니메이션을 지속적으로 업데이트하는 메인 루프를 구현하는 방법
  • 애니메이션 창을 올바르게 닫는 방법

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다.

  • Pygame 라이브러리를 사용하여 애니메이션을 만들 수 있습니다.
  • Python 에서 클래스를 정의하고 사용할 수 있습니다.
  • Pygame 에서 사용자 이벤트를 처리할 수 있습니다.
  • Pygame 에서 메인 애니메이션 루프를 만들 수 있습니다.
  • Pygame 에서 애니메이션 창을 올바르게 닫을 수 있습니다.

프로젝트 파일 생성

시작하기 전에 Pygame 이 설치되어 있는지 확인하십시오. Pygame 이 설치되어 있지 않은 경우 pip 를 사용하여 설치할 수 있습니다.

sudo pip install pygame

다음으로, 선호하는 코드 편집기 또는 IDE 에서 code_rain.py라는 파일을 생성하십시오. 이 파일은 Pong 게임의 코드를 작성할 주요 파일이 됩니다.

cd ~/project
touch code_rain.py
✨ 솔루션 확인 및 연습

애니메이션 창 설정

code_rain.py 파일 내에서 코드 시작 부분에 필요한 라이브러리를 import 합니다.

import pygame
import random

그런 다음 pygame.init()을 호출하여 Pygame 을 초기화합니다.

pygame.init()

다음으로, 너비, 높이 및 캡션을 정의하여 애니메이션 창을 설정합니다.

width, height = 800, 600
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Code Rain")

애니메이션에 사용되는 색상을 정의합니다.

background_color = (0, 0, 0)
text_color = (0, 255, 0)

글꼴 설정:

font = pygame.font.Font(None, 36)
✨ 솔루션 확인 및 연습

빗방울 클래스 정의

다음으로, 코드 비 애니메이션에서 각 떨어지는 문자를 나타내는 Raindrop 클래스를 정의합니다. Raindrop 클래스는 각 빗방울의 초기 위치, 텍스트 및 낙하 속성과 같은 속성을 포함합니다.

class Raindrop:
    def __init__(self):
        self.x = random.randint(0, width)
        self.y = random.randint(0, height)
        self.text = chr(random.randint(33, 126))
        self.speed = random.randint(1, 5)

    def fall(self):
        self.y += self.speed
        if self.y > height:
            self.y = 0
            self.x = random.randint(0, width)

    def display(self):
        text_surface = font.render(self.text, True, text_color)
        screen.blit(text_surface, (self.x, self.y))

__init__ 메서드는 클래스가 인스턴스화될 때 호출되어 빗방울의 속성, 즉 임의의 초기 위치 (x, y), 임의의 텍스트 문자 (33 에서 126 사이의 ASCII) 및 임의의 낙하 속도 (1 에서 5 사이) 를 초기화합니다.

fall 메서드는 빗방울을 아래로 이동하는 데 사용됩니다. 빗방울의 속도에 따라 self.y의 값을 증가시킵니다. 빗방울이 화면 밖으로 이동하면 (self.y가 화면 높이보다 클 때), 화면 상단으로 재설정하고 화면에서 새로운 x 위치를 무작위로 선택합니다.

display 메서드는 빗방울을 표시하는 데 사용됩니다. pygame 라이브러리의 font.render 함수를 사용하여 텍스트 표면을 생성하고 화면의 빗방울 위치 (self.x, self.y)에 렌더링합니다.

✨ 솔루션 확인 및 연습

빗방울 생성 및 표시

이제 Raindrop 클래스의 여러 인스턴스를 생성하고 표시하여 떨어지는 문자를 시뮬레이션합니다. 아래 코드는 지정된 수의 빗방울을 생성하고 화면에서 해당 위치를 업데이트합니다.

num_raindrops = 100
raindrops = [Raindrop() for _ in range(num_raindrops)]
✨ 솔루션 확인 및 연습

메인 루프 처리

이 단계에서는 화면을 지속적으로 업데이트하여 애니메이션을 처리하는 메인 루프를 구현합니다. 또한 창을 제대로 닫기 위해 종료 이벤트를 수신 대기합니다.

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

    screen.fill(background_color)

    for drop in raindrops:
        drop.fall()
        drop.display()

    pygame.display.flip()

pygame.quit()

애니메이션 루프의 주요 부분은 while 루프이며, 여기서 running 변수가 루프를 제어합니다. 루프는 runningTrue인 경우에만 계속 실행됩니다.

애니메이션 루프 내에서 pygame.event.get()을 사용하여 pygame 이벤트 목록을 가져오고 이벤트 목록을 반복하여 각 이벤트를 검사합니다. 이 경우 주요 확인 사항은 사용자가 애니메이션 창을 닫을 때 생성되는 종료 이벤트 pygame.QUIT가 있는지 여부입니다. 종료 이벤트가 감지되면 runningFalse로 설정하여 애니메이션 루프를 종료합니다.

screen.fill(background_color)는 이전 프레임의 내용을 덮어쓰기 위해 애니메이션 창 screen의 배경색을 채워 새 프레임을 그릴 준비를 합니다.

raindrops 목록을 반복하여 각 빗방울 객체에 대해 fall() 메서드를 호출하여 떨어지게 하고, display() 메서드를 호출하여 게임 창에 빗방울을 표시합니다.

pygame.display.flip()은 애니메이션을 위해 위의 모든 그리기 작업을 화면에 새로 고치는 데 사용됩니다.

애니메이션 루프가 종료된 후 pygame.quit()을 호출하여 pygame 라이브러리를 정리하고 애니메이션을 종료합니다.

✨ 솔루션 확인 및 연습

프로젝트 실행

마지막으로, 데스크톱으로 전환하고 다음 명령을 사용하여 프로젝트를 실행합니다.

python code_rain.py
Code rain
✨ 솔루션 확인 및 연습

요약

이 프로젝트에서는 Python 의 Pygame 라이브러리를 사용하여 간단한 코드 비 애니메이션을 만드는 방법을 배웠습니다. Pygame 모듈을 초기화하고, Raindrop 클래스를 정의하고, 여러 빗방울을 생성 및 표시하고, 애니메이션을 처리하는 메인 루프를 구현했습니다. 이 프로젝트는 Pygame 을 사용하여 간단한 애니메이션을 만드는 방법에 대한 기본적인 이해를 제공합니다.