Pygame
1. 개요
Pygame은 피트 시너스가 개발한 파이썬 프로그래밍 언어 기반의 실시간 컴퓨터 그래픽스 및 컴퓨터 게임 개발을 위한 라이브러리이다. 2000년부터 자유 소프트웨어 커뮤니티 프로젝트로 시작되었으며, GNU 약소 일반 공중 사용 허가서에 따라 배포된다. 2009년 1.9.1 버전 이후 개발이 정체되었으나, 2016년 말부터 재개되어 2020년 10월 2.0.0 버전을 출시하였다. Pygame은 SDL 라이브러리를 사용하여 다양한 기능을 제공하며, 안드로이드 환경에서도 사용 가능하다.
이미지 준비중입니다.
| 개발자 | Pygame 커뮤니티 |
|---|---|
| 최초 릴리스 | 2000년 10월 28일 |
| 최신 릴리스 버전 | 2.6.0 |
| 최신 릴리스 날짜 | 2024년 6월 25일 |
| 운영체제 | 크로스 플랫폼 |
| 장르 | API |
| 라이선스 | GNU LGPL |
| 웹사이트 | Pygame 공식 웹사이트 |
| 프로그래밍 언어 | 파이썬 C Cython 어셈블리어 |
|---|
-
윈도우 API -
유니버설 윈도우 플랫폼
유니버설 윈도우 플랫폼(UWP)은 마이크로소프트에서 개발한 애플리케이션 모델로, Windows 10, 11 등 다양한 기기에서 실행되는 앱 개발을 위한 통합 플랫폼이며, Visual Studio를 통해 개발되고 XAML Islands를 통해 기존 WinAPI 기반 애플리케이션에서도 활용 가능하다. -
윈도우 API -
WinG
WinG는 윈도우 3.x의 그래픽 성능 향상을 위해 개발된 기술로, DirectX로 발전하는 기반이 되었으며 한국 게임 산업에도 영향을 미쳤다. -
파이썬 라이브러리 -
Tkinter
Tkinter는 Tcl/Tk 툴킷을 파이썬 래퍼로 구현한 GUI 표준 라이브러리로서, 다양한 위젯과 배치 관리자를 제공하며 테마 Tk 기능을 통해 위젯 외관을 변경할 수 있도록 지원한다. -
파이썬 라이브러리 -
SciPy
SciPy는 NumPy 배열 구조를 기반으로 수치 적분, 선형 대수, 최적화, 통계 등 과학 및 공학 계산에 사용되는 다양한 기능을 제공하는 파이썬 과학 컴퓨팅 라이브러리이다. -
MacOS API -
오픈스텝
오픈스텝은 넥스트와 선 마이크로시스템즈가 개발한 객체 지향 프로그래밍 환경 및 API 표준으로, 넥스트스텝을 기반으로 다양한 운영체제에서 실행 가능하도록 설계되었으며, macOS, iOS의 Cocoa API 및 GNUstep과 같은 자유 소프트웨어 구현체의 기반이 되었다. -
MacOS API -
코어 오디오
코어 오디오는 macOS의 오디오 프레임워크로서 낮은 레이턴시와 유연한 설계를 특징으로 하며, 오디오 유닛 플러그인, 다양한 오디오 포맷, 그리고 하드웨어 추상화 계층 등의 서비스로 구성된다.
2. 역사
Pygame은 개발이 중단된 PySDL을 대체하기 위해 피트 시너스(Pete Shinners)가 개발했다. 2000년부터 커뮤니티 프로젝트로, 자유 소프트웨어 GNU 약소 일반 공중 사용 허가서(GNU Lesser General Public License)에 따라 배포되어 Pygame이 오픈 소스 및 상업용 소프트웨어와 함께 배포될 수 있게 되었다.
Pygame은 한동안 개발이 정체되었지만, 2020년 10월 28일 버전 2.0.0 출시 이후 활발하게 개발되고 있다.
2.1. 개발 정체와 Pygame 2 출시
Pygame은 개발이 중단된 http://pysdl.sourceforge.net/ PySDL을 대체하기 위해 Pete Shinners가 개발하였다. 2000년부터 이어온 커뮤니티 프로젝트이며 자유 소프트웨어 GNU 약소 일반 공중 사용 허가서로 배포된다.
2009년 8월에 출시된 버전 1.9.1을 마지막으로 개발이 정체되었다. 2009년 말에 pygame reloaded로서 pygame2를 향해 나아가는 듯했지만, 이루어지지 않았다. 2016년 말부터 회복되어, 2019년까지 버전 1.9.2부터 1.9.5까지 출시되었다. 버전 1.9.5 이후, pygame2 개발이 재시동되었다. 이후 버전 2.0.0 릴리스 이후 활발한 개발이 유지되고 있다.
2.1.1. Pygame 2 개발 이정표
Pygame 2 버전은 2009년에 "Pygame Reloaded"로 계획되었지만, 2016년 말까지 Pygame 1.9.1 버전의 개발 및 유지보수가 완전히 중단되었다. 2019년 3월 1.9.5 버전이 출시된 후, 새로운 2 버전 개발이 로드맵에서 활발하게 진행되었다.
Pygame 2.0은 Pygame 20주년 기념일인 2020년 10월 28일에 출시되었다.
pygame 2가 완성되는 상태에 대한 마일스톤은 다음과 같다.
* pygame API가 SDL2 위에서 하위 호환성을 유지하며 거의 작동해야 한다.
* 일부 작동하지 않는 부분이 있다면, 그렇게 명시되어 있어야 한다.
* 최소한 Mac, 리눅스, Windows용 바이너리가 파이썬 2.7, 3.4, 3.5, 3.6, 3.7, 32비트/64비트 버전으로 제공되어야 한다.
2.1.2. Pygame 2 출시 이력
Pygame 2 버전은 2009년에 "Pygame Reloaded"로 계획되었지만, 2016년 말까지 Pygame 1.9.1 버전의 개발 및 유지보수가 완전히 중단되었다. 2019년 3월 1.9.5 버전이 출시된 후, 새로운 2 버전 개발이 로드맵에서 활발하게 진행되었다.
Pygame 2.0은 Pygame 20주년 기념일인 2020년 10월 28일에 출시되었다. 2009년 8월에 출시된 버전 1.9.1을 마지막으로 개발이 정체되었다. 2009년 말에 pygame reloaded로서 pygame2를 향해 나아가는 듯했지만, 이루어지지 않았다. 2016년 말부터 회복되어, 2019년까지 버전 1.9.2부터 1.9.5까지 출시되었다. 버전 1.9.5 이후, pygame2 개발이 재시동되었다.
2019년 3월 31일, 이전부터 리팩터 릴리스(리팩토링 (프로그래밍))라고 불리던 버전 1.9.5가 출시되었으며, 다음과 같은 공지가 있었다.
* SDL2 지원을 병합했다.
* 동일한 코드 베이스에서 SDL1과 함께 컴파일하는 것도 가능하므로, pygame 2로의 전환이 용이해진다.
* pygame2가 SDL2와 함께 출시될 때까지 SDL1 기반의 pygame 1.9.x의 릴리스는 계속된다.
2020년 10월 28일, pygame 20주년에 버전 2.0.0 안정판이 출시되었다.
| 날짜 | 버전 | 비고 |
|---|---|---|
| 2019년 5월 5일 | 2.0.0.dev1 | pre-release |
| 2019년 6월 20일 | 2.0.0.dev2 | pre-release |
| 2019년 7월 14일 | 2.0.0.dev3 | pre-release |
| 2019년 10월 8일 | 2.0.0.dev4 | pre-release |
| 2019년 10월 28일 | 2.0.0.dev6 | pre-release |
| 2020년 5월 6일 | 2.0.0.dev8 | pre-release |
| 2020년 5월 31일 | 2.0.0.dev10 | pre-release |
| 2020년 9월 20일 | 2.0.0.dev12 | pre-release |
| 2020년 10월 11일 | 2.0.0.dev14 | pre-release |
| 2020년 10월 20일 | 2.0.0.dev16 | pre-release |
| 2020년 10월 21일 | 2.0.0.dev18 | pre-release |
| 2020년 10월 22일 | 2.0.0.dev20 | pre-release |
| 2020년 10월 23일 | 2.0.0.dev22 | pre-release |
| 2020년 10월 27일 | 2.0.0.dev24 | pre-release |
| 2020년 10월 28일 | 2.0.0 | 정식 버전 |
2.2. 지원하는 Python 버전
Pygame 1.9.x 버전은 Python 2.7 및 Python 3.4부터 Python 3.7까지 지원한다. Pygame 2 버전은 Python 3.4부터 Python 3.8까지 지원하며, Python 2.7 지원도 당분간 계속된다.
3. 기능
Pygame은 심플 다이렉트미디어 레이어(SDL) 라이브러리를 사용하며 실시간 컴퓨터 게임 개발을 가능하게 하는 것을 목표로 한다. 이는 C 프로그래밍 언어 및 파생 언어의 저수준 메커니즘을 사용하지 않고도 가능하다. 이는 게임 내에서 가장 비용이 많이 드는 기능들을 게임 로직에서 추상화하여, 파이썬과 같은 고수준 프로그래밍 언어를 사용하여 게임을 구조화할 수 있다는 가정에 기반한다.
SDL이 제공하는 다른 기능으로는 벡터 수학, 충돌 감지, 2D 스프라이트 장면 그래프 관리, MIDI 지원, 카메라, 픽셀 배열 조작, 변환, 필터링, 고급 freetype 폰트 지원 및 그리기가 있다.
Pygame을 사용하는 애플리케이션은 Pygame Subset for Android(pgs4a)를 사용하여 안드로이드 폰 및 태블릿에서 실행할 수 있다. 안드로이드에서 사운드, 진동, 키보드 및 가속도계가 지원된다.
4. 커뮤니티
Pygame은 원래 개발이 중단된 http://pysdl.sourceforge.net/ PySDL을 대체하기 위해 피트 시너스(Pete Shinners)가 개발한 것이다. 2000년부터 이어온 커뮤니티 프로젝트이며 자유 소프트웨어 GNU 약소 일반 공중 사용 허가서로 배포된다.
과거 핵심 개발자와 저장소 소유자 간의 의견 불일치로 인해 pygame-ce (커뮤니티 에디션)라는 포크가 생성되었다.
파이썬 (그리고 일반적으로, 필수는 아니지만 Pygame)을 사용하여 게임을 만드는 PyWeek라는 정기적인 대회가 있다. 커뮤니티는 Pygame에 대한 많은 튜토리얼을 만들었다.
5. Pygame을 사용한 주요 게임
* 프레츠 온 파이어
* 위험한 고등학교 소녀들, 위험에 빠지다!
* 슬링샷
* [http://www.pygame.org/project-Spacemax-1698-.html Space Max (슈팅 게임)]
6. 관련 자료
Pygame은 개발이 중단된 http://pysdl.sourceforge.net/ PySDL을 대체하기 위해 피트 시너스(Pete Shinners)가 개발하였다. 2000년부터 이어온 커뮤니티 프로젝트이며 자유 소프트웨어 GNU 약소 일반 공중 사용 허가서로 배포된다.
2D 엔진 및 라이브러리는 다음과 같다.
* https://code.google.com/archive/p/pgu Pygame Utilities (PGU): Python을 강화하기 위한 도구와 라이브러리 모음이다. 도구에는 타일 편집기 및 레벨 편집기 (사각형, 등각 투영, 육각형)가 포함된다. GUI 강화에는 완벽한 기능을 갖춘 GUI, HTML 렌더링, 문서 레이아웃, 텍스트 렌더링이 포함된다. 라이브러리에는 스프라이트 및 타일 엔진, 상태 엔진, 타이머, 하이 스코어 시스템이 포함된다.
* Pyglet: OpenGL 기반 라이브러리로, 게임이나 시각적으로 풍부한 애플리케이션을 만드는 데 사용된다.
* [http://www.mirthkit.com MirthKit]: 크로스 플랫폼 2D 게임 제작 및 배포를 위한 간단한 툴킷이다.
7. 참고 문헌
* L-Line영어 게임 프로그래밍 -- 파이썬과 pygame을 사용하여 프로그래밍과 게임 개발을 배우는 입문서
* Python영어과 Pygame을 사용한 컴퓨터 과학 입문 -- 파이썬과 pygame을 사용하여 프로그래밍을 배우는 전자책
8. 샘플 코드
python
import pygame, sys
pygame.init()
screen = pygame.display.set_mode((1280, 720))
clock = pygame.time.Clock()
clock.tick(30)
black = 0, 0, 0
raccoon = pygame.image.load("raccoon.png")
raccoon = pygame.transform.scale(raccoon, (200, 140))
raccoonrect = raccoon.get_rect()
velocity = [1,1]
while True:
raccoonrect = raccoonrect.move(velocity)
if raccoonrect.left < 0 or raccoonrect.right > 1280:
velocity[0] = -velocity[0]
raccoon = pygame.transform.flip(raccoon,True,False)
if raccoonrect.top < 0 or raccoonrect.bottom > 720:
velocity[1] = -velocity[1]
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
#screen update
screen.fill(black)
screen.blit(raccoon, raccoonrect)
pygame.display.flip()
```
다음은 가장자리에 닿으면 튕기는 "raccoon.png" 이미지를 만드는 코드이다.