질문이 있으십니까?

기본 컨텐츠 및 사용자가 직접 참여하여 만들어진 다양한 내용을 검색합니다.

pygame 모듈

설치

pygame은 python 2.x와 python 3.x 모두에서 지원합니다. 때문에 설치를 위한 명령어는 다음과 같습니다.
c:\> pip install pygame

pagame 기본 구조

  1. 선언 pygame 선언 (import)
  2. 초기화 pygame 초기화(pygame.init())
  3. 전역변수 선언 size(x크기, y크기), screen(pygame.display.set_mode(size)), clock(pygame.time.Clock()) 등 전역변수 선언
  4. 메인 루프 pygame 메인 루프(while문), Event설정, 화면설정, 사용자행위수신

기본 샘플 코드

import pygame

pygame.init() # 초기화

BLACK = (0,0,0)
WHITE = (255,255,255)
BLUE = (0,0,255)
GREEN = (0,255,0)
RED = (255,0,0)

size = [400, 300]
screen = pygame.display.set_mode(size)

pygame.display.set_caption("Game Title")

done = False
clock = pygame.time.Clock() # 화면을 초당 몇 번 출력하는가 설정변수

while not done:
    clock.tick(10) # 1초당 10번을 출력하라 (숫자가 높으면 시스템 부하), 적정값(10,30,60)

    for event in pygame.event.get(): # 이벤트 잡아내라
        if event.type == pygame.QUIT: # pygame가 종료되는 이벤트
            done=True
    
    screen.fill(WHITE) # 화면 전체를 흰색으로 채워라

    pygame.draw.polygon(screen, GREEN, [[30,150], [125,100], [200,150]], 5) # 삼각형
    pygame.draw.polygon(screen, GREEN, [[30,150], [125,100], [200,150]], 0) 
    pygame.draw.lines(screen, RED, False, [[50,150], [50,250], [200,250], [200,150]], 5) # 선
    pygame.draw.rect(screen, BLACK, [75,175,75,50], 5) # 사각형
    pygame.draw.rect(screen, BLACK, [75,175,75,50], 0) # 사각형
    pygame.draw.line(screen, BLACK, [112,175], [112,225], 5) # 선
    pygame.draw.line(screen, BLACK, [75,200], [150,200], 5) # 선

    pygame.display.flip() # 화면 업데이트

pygame.quit()

PyGame에서 지원되는 도형

  1. pygame.draw.rect 사각형 - 화면에 사각형을 그려줍니다.
  2. pygame.draw.polygon 삼각형 - 화면에 삼각형을 그려줍니다.
  3. pygame.draw.circle 원 - 화면에 원을 그려줍니다.
  4. pygame.draw.ellipse 타원 - 화면에 타원을 그려줍니다.
  5. pygame.draw.arc 원 - 화면에 원하는 만큼의 원을 그려줍니다.
  6. pygame.draw.line 선 - 화면에 선을 그려줍니다.
  7. pygame.draw.lines 여러개의 선 - 화면에 여러개의 선을 이어서 그립니다.
  8. pygame.draw.aaline 부드러운 선 - 화면에 부드러운 선을 그려줍니다.
  9. pygame.draw.aalines 부드러운 선들 - 화면에 부드러운 선을 여러 개 이어서 그립니다.

pygame.draw.polygon 인자값

  1. Surface pygame을 실행할 때 전체적으로 화면을 선언한 변수 값
  2. Color 삼각형의 색깔로 (R,G,B)의 형태로 데이터의 값을 삽입함
  3. PointList 삼각형의 세 개의 점을 리스트 형태로 입력함
  4. Width 삼각형의 선 크기를 말하며, 기본적으로 0으로 설정됨

pygame.draw.line 인자값

  1. Surface pygame을 실행할 때 전체적으로 화면을 선언한 변수 값
  2. Color 선의 색깔로 (R, G, B)의 형태로 데이터의 값을 삽입함
  3. Start_pos 선이 시작하는 점을 말하며 [x, y]형태로 값을 삽입함
  4. End_pos 선이 끝나는 점을 말하며 [x, y]형태로 값을 삽입함
  5. Width 선의 두께를 말하며, 기본적으로 1으로 설정됨

pygame.draw.rect 인자값

  1. Surface pygame을 실행할 때 전체적으로 화면을 선언한 변수 값
  2. Color 사각형의 색깔로(R,G,B)의 형태로 데이터의 값을 삽입함
  3. Rect 사각형의 [x축,y축,가로,세로]의 형태로 삽입함
  4. Width 사각형의 선 크기를 말하며, 기본적으로 0으로 설정됨

실행 결과

[ 화면. 소스코드를 실행한 결과 ]

이미지, 소리, 폰트 다루기

  1. 윈도우 녹음기 녹음할 수 있는 프로그램. 윈도우 실행에서 녹음기라고 치시면 됩니다.
  2. WAV무료 https://www.pacdv.com/sounds/voices-3.html
  3. 오디오변환기 https://online-audio-converter.com/ko/
import sys
import pygame # pygame 모듈을 import
from pygame.locals import * # pygame.locals 하위 모듈을 import

# 초당 프레임수를 정의
TARGET_FPS = 30

clock = pygame.time.Clock()
 
# 색 정의
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
 
# 마우스 버튼 인덱스 정의
LEFT = 1  # 왼쪽 버튼에 대한 버튼 인덱스
RIGHT = 3  # 오른쪽 버튼에 대한 버튼 인덱스
 
# 라이브러리 및 디스플레이 초기화
pygame.init()
screen = pygame.display.set_mode((480, 320), DOUBLEBUF)

#FULLSCREEN : 전체 화면 모드를 사용
#HWSURFACE : 하드웨어 가속 사용. 전체 화면 모드에서만 가능
#OPENGL : OpenGL 사용 가능한 디스플레이를 초기화
#DOUBLEBUF : 더블 버퍼 모드를 사용. HWSURFACE or OPENGL에서 사용을 추천
 
# 이미지 파일을 로딩
img = pygame.image.load('banana.jpg')
 
# 폰트 로딩 및 텍스트 객체 초기화
fontObj = pygame.font.Font('batang.ttc', 32)
textSurfaceObj = fontObj.render('분당경영고!', True, GREEN)
textRectObj = textSurfaceObj.get_rect();
textRectObj.center = (150, 200)
 
# 사운드 파일을 로딩
soundObj = pygame.mixer.Sound('beeps.wav')
 
# 메인 루프
while True:
  for event in pygame.event.get():
    # 이벤트를 처리하는 부분
    if event.type == QUIT:
      pygame.quit()
      sys.exit()
 
    # 키보드 이벤트 처리
    if event.type == KEYDOWN:
      if event.key == K_RIGHT:
        # 오른쪽 키가 눌리면 사운드를 플레이한다
        soundObj.play()
 
    # 마우스 이벤트 처리
    if event.type == MOUSEBUTTONDOWN and event.button == LEFT:
      # 왼쪽 버튼이 눌렸을 때의 처리
      print ("left mouse up (%d, %d)" % event.pos)
    elif event.type == MOUSEBUTTONUP and event.button == LEFT:
      # 왼쪽 버튼이 떨어졌을 때의 처리
      print ("left mouse down (%d, %d)" % event.pos)
    elif event.type == pygame.MOUSEMOTION:
      # 마우스 이동시의 처리
      print ("mouse move (%d, %d)" % event.pos)
 
  screen.fill(WHITE)  # 화면을 검은색으로 지운다
 
  # 이미지 파일 그리기
  screen.blit(img, (50, 100))
  
  # 이미지 파일 회전하여 그리기
  x = 300
  y = 100
  degree = 90 # 90도 
rotated = pygame.transform.rotate(img, degree)
  rect = rotated.get_rect()
  rect.center = (x, y)
  screen.blit(rotated, rect)
 
  # 텍스트 오브젝트를 출력
  screen.blit(textSurfaceObj, textRectObj)
 
  pygame.display.flip()  # 화면 전체를 업데이트
  clock.tick(TARGET_FPS)  # 프레임 수 맞추기
[ 그림. 이미지 다루는 화면 ]

댓글을 작성하세요

문서 이력

  • 2020-07-08 날짜로 신달수 님으로 부터 컨텐츠명이 변경 되었습니다.
  • 2020-07-08 날짜로 신달수 님께서 등록 작업을 하였습니다.