티스토리 뷰
Part 02 pygame 라이브러리 소개
이 장에서는 Python으로 게임을 만들 때 사용할 수 있는 대표적인 라이브러리인 pygame에 대해 학습한다. 앞부분에서 게임의 기본 구조를 살펴보았다면, 이번 부분에서는 그 구조를 실제 코드로 구현하기 위해 필요한 도구를 알아본다. pygame은 게임 화면을 만들고, 키보드나 마우스 입력을 처리하며, 이미지와 도형을 화면에 출력할 수 있도록 도와주는 라이브러리이다. 일반적인 Python 코드만으로도 간단한 계산 프로그램은 만들 수 있지만, 게임처럼 화면이 계속 바뀌고 사용자의 입력에 실시간으로 반응하는 프로그램을 만들기 위해서는 별도의 기능이 필요하다. 이때 사용하는 도구가 바로 pygame이다.
이 단원에서는 pygame이 무엇인지 이해하고, 설치 방법을 확인한 뒤, 실제로 게임 화면을 만들기 위한 준비 과정을 학습한다.

필요 라이브러리: PyGame
pygame은 Python을 이용하여 게임을 만들 수 있도록 도와주는 오픈소스 라이브러리이다. 라이브러리란 개발자가 자주 사용하는 기능을 미리 만들어 놓은 코드 모음이라고 이해할 수 있다. 즉, 우리가 게임 화면을 처음부터 모두 직접 만들 필요 없이, pygame이 제공하는 기능을 활용하여 게임 창을 만들고, 그림을 출력하고, 키보드 입력을 처리할 수 있다.
pygame은 화면 출력, 이미지 출력, 키보드와 마우스 입력 처리, 애니메이션 구현, 음악이나 효과음 재생과 같은 기능을 제공한다. 따라서 초보자는 복잡한 그래픽 처리 원리를 모두 알지 못하여도, 기본 명령어를 사용하여 간단한 게임 화면을 만들 수 있다.
pygame을 사용하려면 먼저 설치가 필요하다. 설치 명령어는 다음과 같다.
pip install pygame
이 명령어는 터미널에서 입력한다. 이전에 hello.py 파일을 실행했던 터미널을 그대로 사용하면 된다. 설치가 정상적으로 완료되면 Python 코드에서 다음과 같이 pygame을 불러와 사용할 수 있다.
import pygame
설치 확인- 터미널
pip show pygame
설치 확인- edit
import pygame
print(pygame.__version__)
pygame 공식 사이트 확인

pygame 공식 사이트에서는 pygame의 최신 버전, 문서, 예제, 업데이트 정보를 확인할 수 있다.
라이브러리를 사용할 때에는 공식 문서를 참고하는 습관이 중요하다.
pygame news
Over the next weeks we have plenty of game jams that people from the pygame communities take part in. The pygames hackathon runs from March 20th, 2023 to April 17th 2023, and is open to people in USA and Canada. For this one there's $12,700 in prizes. "If
www.pygame.org
pygame Turtorial
https://coderslegacy.com/python/python-pygame-tutorial/
Python PyGame Tutorial - The Complete Guide - CodersLegacy
The Python Pygame library consists of various modules and functions for graphics, audio, handling mouse input, events, animation and more.
coderslegacy.com
Part03. 게임 기본 뼈대 구현하기

pygame을 사용하여 게임 프로그램의 기본 뼈대를 구현한다. 앞에서 게임은 초기화 → 메인 루프 → 종료의 구조로 이루어진다고 학습하였다. 이제 이 개념을 실제 코드로 작성하면서, 게임 프로그램이 어떤 순서로 실행되는지 확인한다.
게임 기본 뼈대는 아직 완성된 게임은 아니다. 캐릭터 이동, 점수 계산, 충돌 처리와 같은 세부 기능이 들어가기 전, 게임이 실행될 수 있는 최소한의 구조를 만드는 단계이다. 집을 짓기 전에 기초 공사를 먼저 하는 것처럼, 게임을 만들 때에도 먼저 기본 구조를 안정적으로 작성하여야 한다.
Pygame의 핵심 구조
pygame 프로그램은 대부분 일정한 구조를 따른다. 먼저 pygame.init()을 사용하여 pygame 기능을 사용할 준비를 한다. 그다음 게임 화면을 생성하고, 게임이 실행되는 동안 반복될 게임 루프를 만든다. 마지막으로 게임이 끝나면 pygame.quit()과 sys.exit()를 사용하여 프로그램을 종료한다.
이 구조에서 가장 중요한 부분은 게임 루프이다. 게임 루프 안에서는 사용자의 입력을 확인하고, 게임 상태를 바꾸고, 변경된 결과를 화면에 다시 출력한다. 이 과정이 계속 반복되기 때문에 게임 화면이 멈추지 않고 실시간으로 반응하는 것처럼 보인다.
초보자는 이 코드를 단순히 외우기보다, 각 코드가 어떤 역할을 하는지 이해하여야 한다.
- pygame.init()은 준비 단계이고,
- pygame.display.set_mode()는 화면 생성 단계이며,
- while running:은 게임을 계속 실행시키는 반복 구조이다.
- pygame.quit()과 sys.exit()은 게임을 안전하게 끝내는 종료 단계이다.

초기화와 화면 생성
초기화는 게임을 시작하기 전에 필요한 기능을 사용할 수 있도록 준비하는 과정이다. 코드에서는 pygame.init()이 이 역할을 한다.
pygame.init()
이 코드를 실행하면 pygame 내부의 그래픽, 입력, 사운드와 관련된 기능을 사용할 준비가 된다. 따라서 pygame 프로그램을 시작할 때 가장 먼저 작성하는 코드 중 하나이다. 다음으로 화면을 생성한다.
screen = pygame.display.set_mode((800, 600))
또한 다음 코드를 사용하여 게임 창의 제목을 설정할 수 있다.
pygame.display.set_caption("게임 기본 구조")

게임 루프와 종료
이 화면에서는 pygame 프로그램에서 가장 중요한 부분인 게임 루프와 종료 처리를 설명한다. 게임 루프는 while running:으로 표현된다.
running = True
while running:
게임 루프 안에는 다음과 같은 이벤트 처리 코드가 들어간다.
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
반복문이 끝난 뒤에는 다음 코드가 실행된다.
pygame.quit()
sys.exit()
# pygame 라이브러리 불러오기
import pygame
import sys
# pygame 초기화 (게임 시작 준비)
pygame.init()
#screen display
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption('첫 번째 pygame 창!')
# game 실행 상태 변수
running = True
# game loop start
while running:
for event in pygame.event.get():
# 이벤트 확인 (사용자 입력 감지)
if event.type == pygame.QUIT:
# ⑦ 창 닫기 버튼 클릭 시
running = False
# ⑧ 게임 루프 종료 (while 탈출)
# game end
pygame.quit()
sys.exit()
게임 기본 뼈대 구현하기 — 주요 핵심 개념

게임은 한 번 실행되고 끝나는 프로그램이 아니다. 사용자의 입력을 계속 확인하고, 입력에 따라 게임 상태를 바꾸며, 바뀐 결과를 화면에 계속 다시 보여준다. 이 반복 구조를 만드는 것이 while 반복문이다. 화면 출력에서는 보통 다음 순서를 따른다.
fill → draw 또는 blit → flip
따라서 게임 화면은 매 순간 새로 그려진다고 이해하면 된다. 이전 장면을 지우고, 새로운 위치에 캐릭터를 그리고, 그 결과를 화면에 보여주는 과정이 매우 빠르게 반복된다.
이 구조는 컴퓨팅 사고력의 관점에서도 중요하다. 게임을 만들 때에는 문제를 한꺼번에 해결하지 않는다. 먼저 입력을 확인하고, 그 입력에 따라 값을 바꾸고, 바뀐 결과를 출력하는 단계로 나누어 생각한다. 이것이 게임 프로그래밍에서의 기본적인 문제 분해 방식이다.

게임 기본 뼈대 구현하기 — 가이드라인 입력
가이드라인에는 몇 가지 중요한 규칙이 포함되어 있다. 첫째, 질문에서 요청한 행동만 수행하도록 제한한다. 이는 불필요한 기능이 갑자기 추가되는 것을 막기 위한 규칙이다. 둘째, 변수명은 영어로 작성하도록 한다. 파이썬에서는 한글 변수명도 사용할 수 있지만, 프로그래밍 수업에서는 코드 가독성과 오류 예방을 위해 영어 변수명을 사용하는 것이 적절하다.
셋째, 게임 기본 구조를 반드시 지키도록 한다. 이 수업에서는 게임을 초기화, 메인 루프, 종료의 구조로 나누고, 메인 루프 안에서는 입력 처리 → 게임 업데이트 → 출력 처리가 반복되도록 구성한다. 이렇게 하면 생성된 코드가 복잡하게 보이더라도 각 코드가 어느 부분에 해당하는지 쉽게 구분할 수 있다.
또한 코드의 가독성을 높이기 위해 게임을 다섯 개의 함수로 나누어 작성하도록 요청한다. 다섯 개의 함수는 init(), handle_input(), update_game(), render(), run_game()이다. 각각 게임 초기화, 입력 처리, 게임 업데이트, 출력 처리, 전체 실행을 담당한다. 함수 이름을 통일하면 학생마다 생성된 코드가 조금씩 다르더라도 수업에서 함께 비교하고 수정하기가 쉬워진다.
심은 AI가 만든 코드를 그대로 사용하는 것이 아니라, 수업에서 정한 구조에 맞추어 생성하고 이해하는 것이다. 생성형 AI는 코드를 빠르게 만들어 주는 도구이지만, 어떤 구조가 좋은 코드인지 판단하는 것은 학습자의 역할이다.

pygame을 사용하여 게임의 기본 골격을 만들고 싶어.
간단한 예시 코드를 제공하여줘.
이 화면은 생성형 AI가 만든 기본 게임 코드의 예시를 보여준다. 코드에는 pygame을 불러오고, 화면을 만들고, 게임 루프를 실행하고, 키보드 입력을 받아 원을 움직이는 내용이 포함되어 있다.
먼저 다음 코드는 pygame과 시스템 종료 기능을 사용하기 위해 필요한 라이브러리를 불러오는 부분이다.
import pygame
import sys
pygame.init()
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Simple Pygame Example")
핵심은 while running:으로 시작하는 게임 루프이다. 이 반복문 안에서 사용자의 입력을 확인하고, 방향키 입력에 따라 x, y 좌표를 변경한다. 예를 들어 왼쪽 방향키가 눌리면 x 값을 줄이고, 오른쪽 방향키가 눌리면 x 값을 증가시킨다. 위쪽 방향키가 눌리면 y 값을 줄이고, 아래쪽 방향키가 눌리면 y 값을 증가시킨다.
if keys[pygame.K_LEFT]:
x -= speed
if keys[pygame.K_RIGHT]:
x += speed
if keys[pygame.K_UP]:
y -= speed
if keys[pygame.K_DOWN]:
y += speed
출력 처리에서는 먼저 screen.fill((0, 0, 0))으로 화면을 검은색으로 지운다. 이후 pygame.draw.circle()로 현재 좌표에 흰색 원을 그리고, pygame.display.flip()으로 화면을 갱신한다.
screen.fill((0, 0, 0))
pygame.draw.circle(screen, (255, 255, 255), (x, y), 20)
pygame.display.flip()
생성된 코드는 실행될 수 있지만, 기능별 구분이 어렵다.
수업에서는 이 코드를 함수로 나누어 더 읽기 쉬운 구조로 정리한다.
☞함수 없이 작성한 기본 코드
import pygame
import sys
# pygame 초기화
pygame.init()
# 화면 크기 설정
WIDTH, HEIGHT = 600, 400
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("기본 게임 코드")
# 프레임 속도 설정
clock = pygame.time.Clock()
FPS = 60
# 사각형 위치와 속도
x = 250
y = 150
speed = 5
# 게임 실행 상태
running = True
# 게임 메인 루프
while running:
# 1. 입력 처리
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
x -= speed
if keys[pygame.K_RIGHT]:
x += speed
if keys[pygame.K_UP]:
y -= speed
if keys[pygame.K_DOWN]:
y += speed
# 2. 게임 업데이트
# 사각형이 화면 밖으로 나가지 않도록 제한
if x < 0:
x = 0
if x > WIDTH - 100:
x = WIDTH - 100
if y < 0:
y = 0
if y > HEIGHT - 100:
y = HEIGHT - 100
# 3. 출력 처리
screen.fill((0, 0, 0)) # 화면 지우기
pygame.draw.rect(screen, (255, 0, 0), (x, y, 100, 100)) # 사각형 그리기
pygame.display.flip() # 화면 갱신
# 프레임 속도 제어
clock.tick(FPS)
# 게임 종료
pygame.quit()
sys.exit()
게임 기본 뼈대 구현하기 — 함수화 추가
생성형 AI를 활용하여 만든 게임 기본 코드를 함수 중심 구조로 다시 정리하는 단계이다. 앞에서 생성한 코드는 실행은 가능하지만, 입력 처리, 좌표 계산, 화면 출력, 종료 코드가 한 곳에 섞여 있어 초보자가 기능별 역할을 구분하기 어렵다.
그래서 이번 단계에서는 게임 코드를 다섯 개의 함수로 나눈다. init()은 게임을 시작하기 위한 준비를 담당하고, handle_input()은 키보드나 마우스 입력을 처리한다. update_game()은 입력 결과를 바탕으로 좌표나 상태 값을 변경한다. render()는 변경된 결과를 화면에 출력한다. 마지막으로 run_game()은 전체 게임 흐름을 반복 실행한다.
함수로 나누면 코드가 길어져도 각 부분의 역할을 쉽게 찾을 수 있다. 예를 들어 캐릭터 이동이 이상하면 handle_input()이나 update_game()을 확인하면 되고, 화면에 그림이 보이지 않으면 render()를 확인하면 된다. 즉, 함수화는 단순히 코드를 보기 좋게 만드는 것이 아니라, 수정과 오류 해결을 쉽게 만드는 방법이다.

함수화된 코드 예시
함수화된 pygame 코드 전체 예시를 보여준다. 코드가 길어 보일 수 있지만, 중요한 것은 코드의 양이 아니라 역할별로 나뉘어 있다는 점이다.
먼저 위쪽에는 전역 변수들이 선언되어 있다. screen, clock, running, x, y, speed는 게임 전체에서 함께 사용하는 값이다. x와 y는 사각형의 위치를 나타내고, speed는 키보드를 눌렀을 때 이동하는 거리를 의미한다.
init() 함수는 게임을 시작하기 위한 준비를 담당한다. 이 함수 안에서 pygame.init()을 실행하고, 게임 창을 만들며, 창 제목과 시간 제어 객체를 설정한다.
handle_input() 함수는 사용자의 입력을 처리한다. 방향키가 눌렸는지 확인하고, 그에 따라 x, y 값을 변경한다. 또한 창 닫기 이벤트가 발생하면 running 값을 False로 바꾸어 게임 루프가 종료되도록 한다.
update_game() 함수는 게임 상태를 점검하고 조정한다. 예시 코드에서는 사각형이 화면 밖으로 나가지 않도록 좌표 값을 제한한다. 즉, 캐릭터가 화면을 벗어나지 않게 하는 안전 장치이다.
render() 함수는 화면을 다시 그리는 역할을 한다. 먼저 screen.fill()로 이전 화면을 지우고, pygame.draw.rect()로 현재 좌표에 사각형을 그린 뒤, pygame.display.flip()으로 화면을 갱신한다.
마지막으로 run_game() 함수는 전체 게임을 실행한다. 이 함수 안에서 init()을 한 번 실행하고, while running: 반복문 안에서 handle_input(), update_game(), render()를 계속 호출한다. 이 구조가 바로 게임의 핵심 흐름이다.
함수화 핵심 이해
함수화된 게임 코드에서 반드시 기억하여야 할 구조를 정리한 화면이다. 가장 중요한 순서는 다음과 같다.
init() → 준비
handle_input() → 입력
update_game() → 변화
render() → 출력
run_game() → 반복 실행
while running:
handle_input()
update_game()
render()
따라서 이 화면의 핵심 문장은 다음과 같다.
입력 → 값 변경 → 화면 출력이 반복되면 게임이 된다.
함수로 나누어 작성한 코드
import pygame
import sys
# 전역 변수
WIDTH, HEIGHT = 600, 400
FPS = 60
screen = None
clock = None
running = True
x = 250
y = 150
speed = 5
# 1. 게임 초기화 함수
def init():
global screen, clock
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("함수화된 기본 게임 코드")
clock = pygame.time.Clock()
# 2. 입력 처리 함수
def handle_input():
global running, x, y
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
x -= speed
if keys[pygame.K_RIGHT]:
x += speed
if keys[pygame.K_UP]:
y -= speed
if keys[pygame.K_DOWN]:
y += speed
# 3. 게임 업데이트 함수
def update_game():
global x, y
# 사각형이 화면 밖으로 나가지 않도록 제한
if x < 0:
x = 0
if x > WIDTH - 100:
x = WIDTH - 100
if y < 0:
y = 0
if y > HEIGHT - 100:
y = HEIGHT - 100
# 4. 출력 처리 함수
def render():
screen.fill((0, 0, 0)) # 화면 지우기
pygame.draw.rect(
screen,
(255, 0, 0),
(x, y, 100, 100)
) # 사각형 그리기
pygame.display.flip() # 화면 갱신
# 5. 게임 실행 함수
def run_game():
global running
init()
while running:
handle_input() # 입력 처리
update_game() # 상태 변경
render() # 화면 출력
clock.tick(FPS) # 프레임 속도 제어
pygame.quit()
sys.exit()
# 프로그램 시작
run_game()

| 함수 | 역할 | 코드에서 하는 일 |
| init() | 게임 초기화 | pygame.init() 실행, 화면 생성, 창 제목 설정, 시간 제어 객체 생성 |
| handle_input() | 입력 처리 | 키보드 입력, 마우스 입력, 창 닫기 이벤트 확인 |
| update_game() | 게임 업데이트 | 캐릭터 좌표 변경, 충돌 확인, 점수 변경, 화면 밖 이동 제한 |
| render() | 출력 처리 | 화면 지우기, 도형 또는 이미지 그리기, 화면 갱신 |
| run_game() | 게임 실행 | 초기화 실행 후 게임 루프 안에서 입력 처리, 업데이트, 출력 반복 |
| pygame.quit() | 게임 종료 | pygame에서 사용한 기능을 종료하고 게임 창 닫기 |
| sys.exit() | 프로그램 종료 | 실행 중인 프로그램을 완전히 끝냄 |
- Total
- Today
- Yesterday
- HIG
- 초보자를 위한 텍스트마이닝
- 데이터R지
- UI
- 텍스트 마이닝
- UX
- 휴리스틱평가
- python
- 텍스트마이닝
- HCI
- matplotlib
- 피그마
- figma
- 챗봇
- 파이썬
- 컴퓨팅사고력
- 프로토타입
- 안드로이드
- IOT
- Text Mining
- 라이브러리
- 챗GPT
- 스마트기술
- 4차산업혁명
- 관계자분석
- 파이썬 기초
- Idle
- 사물인터넷
- 파이썬기초
- 데이타R지
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |