🎮 파이게임(Pygame) 기초
창 띄우기 → 도형 그리기 → 클릭 이벤트까지, 프로젝트 시작 전 꼭 알아야 할 기본기
목차
  1. 설치하기
  2. 창 띄우기 & 게임 루프
  3. 도형 그리기 (사각형·원)
  4. 글자 쓰기
  5. 마우스 클릭 이벤트
  6. 종합 예제 — 클릭하면 색 바뀌는 사각형
  7. 이제 각자 프로젝트로!

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()로 표시
  • 그 다음 단계: 인식된 텍스트와 메뉴 목록을 비교하는 매칭 알고리즘 직접 작성
  • 📘 챕터별 가이드로 직접 만들어보기 →

📝 산출물이 어느 정도 만들어졌다면

막히는 부분이 생기면 언제든 물어보라고 하세요 — 다만 정답 코드를 바로 주기보다는, 어디서 막혔는지 같이 짚어보면서 학생이 직접 고치도록 유도하는 게 좋습니다.