최근 수정 시각 : 2023-09-18 19:12:10

Pygame


공식 사이트. 공식 문서와 커뮤니티 등의 기능을 한다.
1. 개요2. 주요 모듈
2.1. pygame2.2. sprite
3. 예제4. 여담

1. 개요

Python으로 작성 가능한 게임 등의 멀티미디어 표현을 위한 라이브러리이다. SDL 기반이다.[1] 오픈 소스이자 무료 도구이며, Python을 돌릴 수 있는 플랫폼이라면 어디서든 실행할 수 있다. 게임 개발 도구이지만 이미지 프로세스 또는 조이스틱 입력, 음악 재생 등의 기능만 떼어다 쓸 수도 있다.

상징은 게임패드를 물고 있는 노란색 뱀이다.

국산 생존 로그라이크인 터미너스: 좀비 생존자들이 Pygame으로 제작됐다. 비주얼 노벨 툴인 Ren'Py 또한 Pygame에 기반하고 있다.

2. 주요 모듈

2.1. pygame

pygame 모듈들을 사용하기 위해서는 pygame.init(), pygame.quit() 등으로 초기화, 종료를 시켜줘야 한다. 또 디스플레이에 작업한 내용을 보이려면 pygame.display.update()를 시켜줘야 한다.

2.2. sprite

pygame.sprite.Sprite() 클래스로 스프라이트 객체를 생성할 수 있다. sprite의 모음인 pygame.sprite.Group() 클래스로 스프라이트들을 효율적으로 관리할 수 있다.

3. 예제

3.1. Hello, world!

#!syntax python
import pygame # pygame 모듈의 임포트
import sys # 외장 모듈
from pygame.locals import * # QUIT 등의 pygame 상수들을 로드한다.

width = 600 # 상수 설정
height = 400
white = (255, 255, 255)
black = (  0,   0,   0)
fps = 30

pygame.init() # 초기화

pygame.display.set_caption('Hello, world!') # 창 제목 설정
displaysurf = pygame.display.set_mode((width, height), 0, 32) # 메인 디스플레이를 설정한다
clock = pygame.time.Clock() # 시간 설정

gulimfont = pygame.font.SysFont('굴림', 70) # 서체 설정
helloworld = gulimfont.render('Hello, world!', 1, black) 
# .render() 함수에 내용과 안티앨리어싱, 색을 전달하여 글자 이미지 생성
hellorect = helloworld.get_rect() # 생성한 이미지의 rect 객체를 가져온다
hellorect.center = (width / 2, height / 2) # 해당 rect의 중앙을 화면 중앙에 맞춘다

while True: # 아래의 코드를 무한 반복한다.
    for event in pygame.event.get(): # 발생한 입력 event 목록의 event마다 검사
        if event.type == QUIT: # event의 type이 QUIT에 해당할 경우
            pygame.quit() # pygame을 종료한다
            sys.exit() # 창을 닫는다
    displaysurf.fill(white) # displaysurf를 하얀색으로 채운다
    displaysurf.blit(helloworld, hellorect) # displaysurf의 hellorect의 위치에 helloworld를 뿌린다
    
    pygame.display.update() # 화면을 업데이트한다
    clock.tick(fps) # 화면 표시 회수 설정만큼 루프의 간격을 둔다

pygame 초기화, 기본 세팅과 디스플레이 상에 폰트를 렌더링하는 기초 예제이다. 결과는 아래와 같다.

파일:pygamehell.png

4. 여담


한때, pygame 메인 화면에 아카이브 링크와 github 링크가 있고, 검정화면에 I can't breathe라고 적혀있던 적이 있었다.아카이브 링크
[1] 2.0 버전부터는 SDL2 기반