[파이썬] pygame 게임 루프와 이벤트 처리

Pygame은 Python으로 게임을 개발하기 위한 매우 유용한 라이브러리입니다. 이 라이브러리는 게임 루프와 이벤트 처리를 간단하게 구현할 수 있는 다양한 함수와 기능을 제공합니다. 이번 글에서는 pygame 라이브러리를 사용하여 게임 루프와 이벤트 처리를 어떻게 구현하는지 살펴보겠습니다.

게임 루프란?

게임 루프는 게임에서 가장 중요한 부분 중 하나로, 게임에 필요한 로직을 반복적으로 실행하는 역할을 합니다. Pygame에서는 pygame.time.Clock()clock.tick() 함수를 사용하여 게임 루프를 구현할 수 있습니다. 게임 루프는 다음과 같이 작성할 수 있습니다.

import pygame
pygame.init()

# 게임 초기화 로직

clock = pygame.time.Clock()
running = True

while running:
    # 게임 실행 로직
    
    clock.tick(60) # 초당 프레임 설정

pygame.quit()

위 코드에서 pygame.init() 함수를 사용하여 pygame을 초기화합니다. 그리고 게임 초기화 로직을 실행한 뒤, pygame.time.Clock() 함수를 사용하여 clock 객체를 생성합니다. 이 clock 객체는 게임 루프 내에서 프레임 속도를 조절하는 데 사용됩니다.

running 변수를 True로 설정하고, while 루프 내에서 게임 실행 로직을 반복적으로 실행합니다. 게임 실행 로직은 게임의 상태를 업데이트하고, 그래픽을 그리는 등의 작업을 수행합니다. clock.tick() 함수를 사용하여 초당 프레임 속도를 조절할 수 있습니다. 위의 코드에서는 초당 60프레임으로 설정되어 있습니다.

마지막으로 pygame.quit() 함수를 사용하여 pygame을 종료합니다.

이벤트 처리

Pygame에서는 이벤트 처리를 위한 pygame.event 모듈을 제공합니다. 이 모듈을 사용하여 키보드, 마우스 등의 이벤트를 감지하고 처리할 수 있습니다. 이벤트 처리의 기본적인 패턴은 다음과 같습니다.

for event in pygame.event.get():
    if event.type == pygame.KEYDOWN:
        # 키보드 이벤트 처리
    elif event.type == pygame.MOUSEBUTTONDOWN:
        # 마우스 이벤트 처리
    ...

위의 코드에서 pygame.event.get() 함수를 호출하여 현재 발생한 모든 이벤트를 가져옵니다. 그리고 for 루프를 사용하여 각 이벤트를 처리합니다. 이벤트의 타입에 따라 키보드 이벤트, 마우스 이벤트 등을 처리할 수 있습니다.

예제

이제 예제를 통해 pygame 게임 루프와 이벤트 처리를 구현하는 방법을 살펴보겠습니다. 아래의 예제는 간단한 게임을 생성하고 키보드 이벤트를 처리하는 코드입니다.

import pygame
pygame.init()

screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("My Game")

clock = pygame.time.Clock()
running = True

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

    screen.fill((0, 0, 0))
    pygame.display.flip()
    
    clock.tick(60)

pygame.quit()

위의 코드에서는 pygame 창의 크기를 800x600으로 설정하고, 창의 제목을 “My Game”으로 설정합니다. 게임 루프 내에서 QUIT 이벤트(창을 닫는 이벤트)가 발생하면 running 변수를 False로 설정하여 게임 루프를 종료할 수 있습니다. 또한 KEYDOWN 이벤트에서 ESC 키를 누르면 running 변수를 False로 설정하여 게임 루프를 종료할 수 있습니다.

게임 루프 내에서는 화면을 검정색으로 채우고, pygame.display.flip() 함수를 호출하여 화면을 업데이트합니다.

위 예제를 실행하면 pygame 창이 열리고, 창이 닫히거나 ESC 키를 누를 때까지 실행됩니다.

이처럼 pygame을 사용하면 간단하게 게임 루프와 이벤트 처리를 구현할 수 있습니다. pygame의 다양한 기능을 활용하여 게임을 개발해보세요!