pygame 튜토리얼
파이 게임 시작하기
수색…
비고
Pygame은 Pete Shinners가 작성한 멀티미디어 제어용 크로스 플랫폼 C 라이브러리 인 SDL 용 Python 래퍼입니다. 즉, 파이 게임을 사용하면 비디오 게임이나 다른 멀티미디어 응용 프로그램을 파이썬으로 작성할 수 있습니다.이 응용 프로그램은 SDL의 지원 플랫폼 (Windows, Unix, Mac, beOS 및 기타)에서 변경되지 않고 실행됩니다.
이 섹션에서는 파이 게임이 무엇인지, 그리고 왜 파이 게임이 그것을 사용하고 싶어하는지에 대한 개요를 제공합니다.
또한 파이 게임 (pygame) 내의 큰 주제를 언급하고 관련 주제와 연결됩니다. pygame에 대한 문서는 새로운 것이므로 관련 주제의 초기 버전을 만들어야 할 수도 있습니다.
버전
| 버전 | ==============> | 발매일 |
| 파이 게임 1.9.0 | ========> | 2009 년 8 월 1 일 |
| 파이 게임 1.8.1 | ========> 2008 년 7 월 30 일 |
| 파이 게임 1.8.0 | ========> | 2008 년 3 월 29 일 |
| 파이 게임 1.7.1 | ========> | 2005 년 8 월 16 일 |
| 파이 게임 1.6.2 | ========> | - |
| 파이 게임 1.6 | =========> | 2003 년 10 월 23 일 |
| 파이 게임 1.5 | =========> | 2002 년 5 월 30 일 |
| 파이 게임 1.4 | =========> 2002 년 1 월 30 일 |
| 파이 게임 1.3 | =========> | 2001 년 12 월 19 일 |
| 파이 게임 1.2 | =========> 2001 년 9 월 4 일 |
| 파이 게임 1.1 | =========> | 2001 년 6 월 23 일 |
| 파이 게임 1.0 | =========> 2001 년 4 월 5 일 |
| 파이 게임 0.9 | =========> 2001 년 2 월 13 일 |
| 파이 게임 0.5 | =========> 2001 년 1 월 6 일 14 일 |
| 파이 게임 0.4 | =========> | 2000 년 12 월 14 일 |
| 파이 게임 0.3 | =========> | 2000 년 11 월 20 일 |
| 파이 게임 0.2 | =========> | 2000 년 11 월 3 일 |
| 파이 게임 0.1 | =========> | 2000 년 10 월 28 일 |
간단한 '게임'
가져 오기 및 초기화
모든 모듈을 가져와야하고 파이 게임도 예외는 아닙니다. 파이 게임에서 임포트 된 모든 모듈이 제대로 초기화되도록하려면 pygame.init()
함수를 호출해야합니다. 이것을 잊어 버리면 일부 모듈은 작동하지 않습니다. 이 함수는 또한 모든 초기화 성공 및 실패의 튜플을 반환합니다 (모듈 초기화 실패시 오류를 발생시키지 않습니다).
import pygame
successes, failures = pygame.init()
print("{0} successes and {1} failures".format(successes, failures))
필수품 만들기
또한 디스플레이를 만들어야합니다. 파이 게임은 이미 (숨겨진) 디스플레이를 만들었으므로 디스플레이의 모드를 설정하기 만하면됩니다 (이 예에서는 해상도를 설정합니다). 또한 프로그램을 고정 된 속도로 업데이트 할 수 있도록 시계를 만드는 것이 좋습니다. 그렇지 않으면 컴퓨터 속도에 따라 다른 속도로 실행됩니다.
screen = pygame.display.set_mode((720, 480)) # Notice the tuple! It's not 2 arguments.
clock = pygame.time.Clock()
FPS = 60 # This variable will define how many frames we update per second.
나중에 코드에서 가독성을 위해 빨강, 녹색 및 파랑 (RGB)의 튜플을 나타내는 두 개의 색상 상수를 만듭니다. 값은 0 (빛 없음)에서 255 (완전 빛)로 바뀝니다.
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
파이 게임에서는 일반적으로 객체의 모양을 나타 내기 위해 서페이스 를 사용하고 개체의 위치를 나타내는 Rect (사각형)을 사용합니다. 표면 은 색상이나 이미지가 포함 된 빈 종이와 같습니다. 클래스를 만드는 경우 많은 함수가 이러한 속성을 찾아 사용하므로 속성 이미지 와 rect의 이름을 지정해야합니다. 이러한 클래스는 여기에서 읽을 수있는 이유로 pygame.sprite.Sprite
클래스를 상속하면 도움이됩니다.
rect = pygame.Rect((0, 0), (32, 32)) # First tuple is position, second is size.
image = pygame.Surface((32, 32)) # The tuple represent size.
image.fill(WHITE) # We fill our surface with a nice white color (by default black).
게임 루프
이제 우리는 게임 루프를위한 모든 것을 갖추게되었습니다. 이것은 게임 전체에서 실행되는 루프입니다. 여기서 우리는 이벤트를 처리하고 객체의 화면과 위치를 업데이트합니다.
먼저 루프가 주어진 FPS 에서 실행되는지 확인합니다. 우리는 FPS를 정의하고 프로그램 시작시에 시계를 만들었습니다. 다음 코드는 우리 프로그램이 우리의 FPS 를 정의한 양만큼 우리의 반복을 반복 할 수있는 충분한 시간을 자도록 합니다. 이 예에서는 초당 60 회입니다.
clock.tick(FPS)
그런 다음 우리는 사건들을 처리 할 것입니다. 이벤트는 기본적으로 마우스를 움직이거나 키를 누르는 것과 같은 사용자 동작입니다. 파이 게임은 pygame.event.get()
을 호출하여 이러한 모든 이벤트를 대기열에 등록합니다. 이 문제를 반복하여 처리 할 수있는 이벤트가 있는지 확인할 수 있습니다. 이벤트는 파이 게임 모듈의 상수와 비교하여 어떤 유형의 이벤트인지를 확인할 수있는 type 속성을 가지고 있습니다.
for event in pygame.event.get():
if event.type == pygame.QUIT: # The user pressed the close button in the top corner of the window.
quit()
# Close the program. Other methods like 'raise SystemExit' or 'sys.exit()'.
# Calling 'pygame.quit()' won't close the program! It will just uninitialize the modules.
if event.type == pygame.KEYDOWN
인지 확인하여 사용자가 키를 눌렀는지 확인할 수도 있습니다. 이 경우 이벤트에는 속성 키 가 있으며이 속성 키 가 나타내는 키를 확인할 수 있습니다.
for event in pygame.event.get():
if event.type == pygame.QUIT:
quit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_w:
rect.move_ip(0, -2) # Changes the rect's position.
elif event.key == pygame.K_s:
rect.move_ip(0, 2)
elif event.key == pygame.K_a:
rect.move_ip(-2, 0)
elif event.key == pygame.K_d:
rect.move_ip(2, 0)
이제 이미지를 표시해야합니다. 먼저 이전 렌더링에서 화면을 지우고 싶을 수 있습니다. 전체 화면을 검은 색으로 채우는 방법으로 코드를 제거합니다. 그런 다음 이미지 를 화면에 블릿 해야합니다. 본질적으로 블리 딩이란 이미지 를 다른 표면에 복사하는 것을 의미합니다 (여기서는 화면). 마지막으로 화면을 뒤집 거나 업데이트 합니다.
우리가 블리 팅 할 때 실제로 사용자에게 아무것도 표시하지 않습니다. 한쪽에는 컴퓨터, 다른 한쪽에 사용자라고 상상해보십시오. 컴퓨터는 화면의 측면에 ( 블리트 )를 그려 사용자쪽으로 넘기고 반복합니다.
screen.fill(BLACK)
screen.blit(image, rect)
pygame.display.update() # Or 'pygame.display.flip()'.
이제 우리는 기본적인 게임을 가지고 있습니다! 꽤 지루한, 그렇습니다. 그러나 본질은 거기에 있습니다! 이것을 현재의 파이썬 지식과 결합하면 멋진 것을 만들 수 있습니다.
완전한 코드
import pygame
successes, failures = pygame.init()
print("{0} successes and {1} failures".format(successes, failures))
screen = pygame.display.set_mode((720, 480))
clock = pygame.time.Clock()
FPS = 60 # Frames per second.
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
# RED = (255, 0, 0), GREEN = (0, 255, 0), BLUE = (0, 0, 255).
rect = pygame.Rect((0, 0), (32, 32))
image = pygame.Surface((32, 32))
image .fill(WHITE)
while True:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
quit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_w:
rect.move_ip(0, -2)
elif event.key == pygame.K_s:
rect.move_ip(0, 2)
elif event.key == pygame.K_a:
rect.move_ip(-2, 0)
elif event.key == pygame.K_d:
rect.move_ip(2, 0)
screen.fill(BLACK)
screen.blit(image, rect)
pygame.display.update() # Or pygame.display.flip()
약간 개선 된 게임 메 커닉
프로그램이 키를 눌렀을 때를 확인하고 키를 누르고있는 경우가 아니라면 확인합니다. 이를 해결하기 위해 속도 변수를 도입 할 수 있습니다. 플레이어 클래스를 만들어서 더 체계적으로 유지할 수 있습니다. 프레임 종속적 인 동작을 피하기 위해 (FPS를 30으로 변경하면 객체가 속도의 절반으로 움직입니다.) 틱 사이의 시간을 이동 가능한 객체에 전달하여 시간 의존 동작을 도입합니다.
import pygame
successes, failures = pygame.init()
print("Initializing pygame: {0} successes and {1} failures.".format(successes, failures))
screen = pygame.display.set_mode((720, 480))
clock = pygame.time.Clock()
FPS = 60
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.Surface((32, 32))
self.image.fill(WHITE)
self.rect = self.image.get_rect() # Get rect of some size as 'image'.
self.velocity = [0, 0]
def update(self):
self.rect.move_ip(*self.velocity)
player = Player()
running = True
while running:
dt = clock.tick(FPS) / 1000 # Returns milliseconds between each call to 'tick'. The convert time to seconds.
screen.fill(BLACK) # Fill the screen with background color.
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_w:
player.velocity[1] = -200 * dt # 200 pixels per second
elif event.key == pygame.K_s:
player.velocity[1] = 200 * dt
elif event.key == pygame.K_a:
player.velocity[0] = -200 * dt
elif event.key == pygame.K_d:
player.velocity[0] = 200 * dt
elif event.type == pygame.KEYUP:
if event.key == pygame.K_w or event.key == pygame.K_s:
player.velocity[1] = 0
elif event.key == pygame.K_a or event.key == pygame.K_d:
player.velocity[0] = 0
player.update()
screen.blit(player.image, player.rect)
pygame.display.update() # Or pygame.display.flip()
print("Exited the game loop. Game will quit...")
quit() # Not actually necessary since the script will exit anyway.
이 코드에 대해 개선해야 할 사항이 많이 있습니다. 리차드 존스 (Richard Jones)가 파이 게임 튜토리얼 과이 토크 를 읽어 보길 권합니다.
파이 게임 설치하기
창문에
http://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame - Christoph Gohlke 의 공식 CPython 배포판을위한 오픈 소스 파이썬 패키지의 윈도우 바이너리를 제공하는 비공식 사이트로 이동 하십시오 .
설치된 파이썬 버전에 따라 적절한 파이 게임
.whl
파일을 다운로드하십시오. (이 파일의 이름은pygame -
<pygame version> - <python version>
- win32.whl
)운영
pip install your-pygame-package.whl
터미널, bash 또는 콘솔 내부.
참고 :PATH
pip
가 없으면python -m pip install your-pygame-package.whl
을 실행python -m pip install your-pygame-package.whl
pygame을 파이썬 모듈로 가져올 수 있는지 확인하십시오.
import pygame
오류가 발생하지 않으면 컴퓨터에 파이 게임이 올바르게 설치되어 있어야합니다. :)
리눅스에서
터미널을 열고 실행하십시오.
sudo apt-get install python-pygame
참고 : python2에 pygame을 설치합니다.
파이 게임 내부로 가져 오십시오.
import pygame
오류가 없다면 리눅스 시스템에 pygame을 올바르게 설치했습니다 :)
macOS에서
Mac에 설치하는 방법에는 두 가지가 있습니다.
방법 1
파이 게임 다운로드 페이지로 가서 맥 설치 프로그램을 다운로드하십시오 . 실행하면 파이 게임이 Mac에 설치됩니다.
방법 2
Homebrew 설치 :
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
그런 다음 Homebrew를 사용하여 Python 2.7.12 및 Pygame을 설치하십시오.
brew install python; brew install homebrew/python/pygame
이제 터미널에서 파이썬을 실행하고 import pygame
시도하십시오. 아무 말도하지 않으면 성공적으로 설치됩니다.
디스플레이에서 파이 게임 및 그림 불러 오기
시작하기
파이 게임을 시작하려면 다음을 수행해야합니다.
import pygame
그러면 크기 640,480의 창이 열리고이를 screen이라는 변수에 저장합니다.
창 이름 설정하기
파이 게임 창에 대한 이름을 설정하려면 다음 구문이 필요합니다.
pygame.display.set_caption('Name')
화면 정보
- 점 (0,0)은 화면의 왼쪽 상단 모서리에 있습니다.
- x 좌표는 왼쪽에서 오른쪽으로 증가하고, y 좌표는 위에서 아래로 증가합니다. 데카르트 평면의 오른쪽 좌표는 양수이고 왼쪽은 음수입니다. 그러나 데카르트 평면의 위쪽 좌표는 위쪽과 아래쪽이 음수입니다. ( 주 : 점이 원점에서 가져온 경우 고려됩니다.)
화면 업데이트
화면에서 변경 한 사항 (예 : 색상 채우기 또는 그림 그리기)이 즉시 표시되지 않습니다!
그렇게하는 방법?
이 함수를 호출해야합니다.
pygame.display.update()
그림 물감
파이 게임의 색상은 RGB 모드에서 작동합니다.
채색을위한 코드는 다음과 같습니다.
color_Name = (r,g,b)
- R은 빨간색을 의미합니다.
- G는 녹색을 의미합니다.
- B는 파란색을 의미합니다.
- 세 가지 모두 0에서 255 사이의 정수 여야하며 255는 가장 밝고 0은 가장 어두워 야합니다.
그림
선을 그리려면
pygame.draw.lines(screen, color, closed, pointlist, thickness)
사각형 그리기
pygame.draw.rect(screen, color, (x,y,width,height), thickness)
원 그리기
pygame.draw.circle(screen, color, (x,y), radius, thickness)
모든 것을 루프로 설정하기
루프를 만들려면 다음 코드를 사용하십시오.
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
파이 게임 창 (코드)에 직사각형 그리기
import pygame
background_colour = (255,255,255) # White color
(width, height) = (300, 200) # Screen size
color=(0,0,0) #For retangle
screen = pygame.display.set_mode((width, height)) #Setting Screen
pygame.display.set_caption('Drawing') #Window Name
screen.fill(background_colour)#Fills white to screen
pygame.draw.rect(screen, color, (100,50,30,40), 1) #Drawing the rectangle
pygame.display.update()
#Loop
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()