[Python_mini_projects_2] 슈팅게임 만들기 #2. pygame 소개
Pygame
pygame은 python을 통해 게임을 만들 수 있도록 지원해주는 모듈이다. pygame 모듈을 사용하기 위해서는 모듈 설치가 필요하다.
cmd를 통해 설치를 하였다.
C:/ > pip install pygame
Successfully installed pygame 메세지를 본다면 설치에 성공
설치가 제대로 됐는지 확인하고 싶다면 import pygame을 작성하여 실행하였을 때 Hello from the pygame community~ 메세지가 출력된다면 제대로 설치에 성공한 것이다.
pygame 기본 구조
pygame 모듈을 사용하기 위한 기본적인 구조이다.
# 1. pygame 선언
import pygame
pygame.init() # pygame 초기화
# 2. pygame에 사용되는 전역변수 선언
Color = (255, 255, 255) # 하얀색(r,g,b)
size = [400, 300]
screen = pygame.display.set_mode(size)
done = False
pygame.display.set_caption("Avoid Fucking Virus")
clock = pygame.time.Clock()
#### 3. pygame 무한루프 : 게임 본체
def runGame():
global done
while not done:
clock.tick(10)
screen.fill(Color)
for event in pygame.event.get():
if event.type == pygame.QUIT: # 게임 화면 종료
done = True
pygame.display.flip() # 게임 화면 업데이트
#### 4. pygame 게임 종료
runGame()
pygame.quit()
-
pygame.init()
pygame을 사용하기 위해서 pygame을 우선 초기화(init) 시켜준다.
-
screen = pygame.display.set_mode(size)
size에는 (a,b) 값을 받는데 a = 너비, b = 높이 이다.
나는 width 값과 height값을 따로 쓰기 위해서 각각 변수명을 정해주었다.
-
pygame.display.set_caption(“Avoid Fucking Virus”)
()안에 들어갈 내용은 GUI창이 켜질 때, 창의 이름을 설정하는 라인이다.
-
clock = pygame.time.Clock()
초당 화면을 몇 번 출력하는 가를 설정하기 위해 선언된 변수이다. milisecond 단위이며 게임에서 FPS(Frame Per Second)라고도 한다.
다음은 게임을 구동시키기 위해서 중요한 game loop를 선언한 함수 runGame()을 살펴보겠다.
-
clock.tick(10)
위에서 Clock() 메서드를 선언한 clock 을 통해 FPS를 설정해준다. 10은 초당 10번 화면을 출력해주겠다는 의미이다.
-
screen.fill(color)
전체 화면을 담당하는 변수인 screen에 fill() 메서드를 사용하여 화면 전체의 색깔을 채워준다.
위에 color 변수에 rgb 값으로 흰색을 선언하였기 때문에 전체 화면은 흰색으로 채워진다.
-
pygame.event.get()
게임 중간에 발생한 이벤트(마우스 클릭, 키보드 클릭)등을 가져와 어떠한 event 가 발생하였는지 for, if 문을 통하여 검사하는 라인이다. 사용되는 event 에 대해선 다음에 다루도록 하겠다.
-
event.type == pygame.QUIT
event.get()을 통해 입력받은 event의 type이 QUIT인지 확인하는 라인이다. QUIT 값은 pygame이 종료되는 이벤트이다. QUIT이 맞다면 runGame의 while문이 더 이상 돌아가지 않도록 하여 게임을 강제로 종료시킨다.
-
pygame.display.flip()
게임 화면이 계속 업데이트 될 수 있도록 해주는 라인이다. 게임 창이 계속 유지되고 지정했던 변수들이나 함수들이 계속 유지되기 위해서 게임의 메인 루프 끝에 항상 pygame.display.flip()을 사용해주어야 한다.
-
flip과 update의 차이
-flip
전체 surface를 업데이트 하는 것
-update
특정 부분만을 update 하는 것으로 pygame.display.update()처럼 ()안에 아무것도 넣지 않으면 전체 surface를 대상으로 update하게 되어 flip과 같은 기능을 하게 된다.
-
다음은 pygame으로 열게 된 창의 x,y 좌표이다.
맨 왼쪽 위가 (0,0)이 되고 오른쪽으로 갈 수록 x좌표 값이, 아래로 갈 수록 y좌표 값이 커지게 된다. 이를 통해 구현하고자 하는 이미지나 텍스트들의 위치를 정할 수 있다.