1설치하기
터미널(명령 프롬프트)에서 아래 명령어 한 줄만 입력하면 됩니다.
pip install pygame
설치가 잘 됐는지 확인하려면 파이썬에서
import pygame을 입력했을 때 오류가 안 나면 성공입니다.2창 띄우기 & 게임 루프
파이게임은 "게임 루프"라는 무한 반복문 안에서 계속 화면을 새로 그리는 방식으로 동작합니다. 아래 코드가 가장 기본이 되는 뼈대이고, 앞으로 모든 프로젝트가 이 구조 위에서 시작합니다.
# 1. pygame 불러오고 초기화
import pygame
pygame.init()
# 2. 창 크기 정하고 화면 만들기
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("나의 첫 파이게임")
# 3. 시간(초당 프레임 수)을 관리해주는 시계
clock = pygame.time.Clock()
# 4. 게임 루프 — 창을 닫기 전까지 계속 반복됨
running = True
while running:
# 4-1. 이벤트(사용자 행동) 확인하기
for event in pygame.event.get():
if event.type == pygame.QUIT: # 창의 X 버튼을 눌렀을 때
running = False
# 4-2. 화면을 배경색으로 지우기 (매 프레임마다 새로 그려야 함)
screen.fill((253, 248, 240)) # RGB 색상, 여기선 크림색
# 4-3. (여기에 도형/글자 등을 그리는 코드가 들어감)
# 4-4. 실제 화면에 반영하기
pygame.display.flip()
# 4-5. 초당 60프레임으로 속도 제한 (너무 빨리 도는 것 방지)
clock.tick(60)
pygame.quit()
핵심 흐름 암기하기: 이벤트 확인 → 화면 지우기 → 그리기 →
flip()으로 반영. 이 4단계가 매 프레임(1초에 60번)마다 반복됩니다.
3도형 그리기
게임 루프 안, screen.fill(...) 다음 줄에 아래 코드들을 넣으면 도형이 그려집니다.
사각형
# pygame.draw.rect(화면, 색상, (x좌표, y좌표, 너비, 높이))
pygame.draw.rect(screen, (10, 122, 48), (100, 100, 120, 80))
x, y는 사각형의 왼쪽 위 꼭짓점 좌표입니다. 파이게임 좌표는 왼쪽 위가 (0,0), 오른쪽으로 갈수록 x 증가, 아래로 갈수록 y 증가입니다.
원
# pygame.draw.circle(화면, 색상, (중심x, 중심y), 반지름)
pygame.draw.circle(screen, (204, 24, 24), (400, 300), 50)
색상은 RGB 튜플
| 색 | RGB 값 |
|---|---|
| 빨강 | (204, 24, 24) |
| 초록 | (10, 122, 48) |
| 파랑 | (30, 100, 220) |
| 흰색 | (255, 255, 255) |
| 검정 | (0, 0, 0) |
4글자 쓰기
글자는 "이미지로 만든 다음 화면에 붙이기"라는 2단계 과정을 거칩니다.
# 게임 루프 밖(위쪽)에서 폰트 준비 — 한 번만 하면 됨
font = pygame.font.SysFont(None, 40)
# 게임 루프 안에서, screen.fill() 다음에
text_img = font.render("안녕하세요", True, (26, 16, 8)) # 글자, 매끄럽게, 색상
screen.blit(text_img, (100, 50)) # (x, y) 위치에 붙이기
한글 폰트가 깨져 보이면
pygame.font.SysFont("malgungothic", 40) 처럼 한글 지원 폰트 이름을 지정해보세요.5마우스 클릭 이벤트
이벤트 확인 부분(for event in pygame.event.get():) 안에 조건을 추가해서 클릭을 감지합니다.
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.MOUSEBUTTONDOWN: # 마우스 버튼을 눌렀을 때
mouse_x, mouse_y = event.pos # 클릭한 위치 좌표
print("클릭 위치:", mouse_x, mouse_y)
"이 사각형을 클릭했는지" 확인하기
파이게임의 Rect 객체를 쓰면 "이 좌표가 사각형 안에 있는지"를 쉽게 확인할 수 있습니다.
button_rect = pygame.Rect(100, 100, 120, 80) # x, y, 너비, 높이
# 이벤트 처리 안에서
if event.type == pygame.MOUSEBUTTONDOWN:
if button_rect.collidepoint(event.pos):
print("버튼이 클릭됐습니다!")
6종합 예제 — 클릭하면 색이 바뀌는 사각형
지금까지 배운 걸 다 합친 실행 가능한 전체 코드입니다. 그대로 복사해서 실행해보세요.
import pygame
pygame.init()
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("클릭하면 색이 바뀌는 사각형")
clock = pygame.time.Clock()
font = pygame.font.SysFont(None, 30)
box = pygame.Rect(340, 260, 120, 80)
box_color = (10, 122, 48) # 초록으로 시작
click_count = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.MOUSEBUTTONDOWN:
if box.collidepoint(event.pos):
click_count += 1
# 클릭할 때마다 랜덤 색으로 변경
import random
box_color = (random.randint(0,255), random.randint(0,255), random.randint(0,255))
screen.fill((253, 248, 240))
pygame.draw.rect(screen, box_color, box)
text_img = font.render(f"클릭 횟수: {click_count}", True, (26, 16, 8))
screen.blit(text_img, (20, 20))
pygame.display.flip()
clock.tick(60)
pygame.quit()
이 예제 하나에 창 띄우기 + 도형 그리기 + 글자 쓰기 + 클릭 이벤트가 전부 들어있습니다. 이 구조를 이해하면 두 프로젝트 다 시작할 수 있어요.
7이제 각자 프로젝트로!
🪑 최선우 — 공평 자리배치
- 사각형 여러 개를 격자(그리드)로 배치 — 이중 for문으로 row, col 돌면서
pygame.draw.rect()반복 호출 - 각 자리(사각형)에 점수에 따라 다른 색 칠하기
- 자리를 클릭하면 학생 배정 정보 출력해보기 (Rect.collidepoint 활용)
- 그 다음 단계: 그리디 배치 → 스왑 알고리즘을 직접 코드로 작성하고, 스왑될 때마다 화면 다시 그리기
- 📘 챕터별 가이드로 직접 만들어보기 →
🎤 김지환 — 음성 주문 도우미
- 먼저
pip install SpeechRecognition pyaudio설치 - 마이크 버튼(사각형) 하나 그리고, 클릭하면 녹음을 시작하도록 이벤트 연결
speech_recognition라이브러리로 녹음된 음성을 텍스트로 변환- 인식된 텍스트를 화면에
font.render()로 표시 - 그 다음 단계: 인식된 텍스트와 메뉴 목록을 비교하는 매칭 알고리즘 직접 작성
- 📘 챕터별 가이드로 직접 만들어보기 →
📝 산출물이 어느 정도 만들어졌다면
- 영재원 자기소개서 3번 문항(주요 활동 작성)을 직접 채워볼 수 있는 워크시트가 있습니다
- 문제 발견 → 조사 → 설계 → 구현 → 검증 → 한계까지 빈칸을 채우면 초안이 완성됩니다
- 📝 작품 소개 작성 가이드 열기 →
- 직접 타이핑하는 워드 파일: 최선우 워드 · 김지환 워드
- 손으로 쓰는 인쇄용 PDF: 최선우 PDF · 김지환 PDF
막히는 부분이 생기면 언제든 물어보라고 하세요 — 다만 정답 코드를 바로 주기보다는, 어디서 막혔는지 같이 짚어보면서 학생이 직접 고치도록 유도하는 게 좋습니다.