티스토리 뷰
Part01. 다양한 도형 출력하기
이 단원에서는 pygame을 사용하여 게임 화면에 여러 가지 도형을 출력하는 방법을 학습한다. 지금까지는 게임이 실행될 수 있는 기본 뼈대를 만들고, init(), handle_input(), update_game(), render(), run_game()의 역할을 구분하였다. 이제 그중에서 화면을 담당하는 render() 함수 안에 실제로 보이는 요소를 추가하여 본다.
게임에서 화면에 보이는 캐릭터, 장애물, 배경, 점수판은 모두 출력 처리 과정을 통해 나타난다. 처음부터 복잡한 이미지를 다루기보다, 먼저 선, 사각형, 원과 같은 기본 도형을 그려보면 화면 출력의 원리를 쉽게 이해할 수 있다.
이번 단원에서는 먼저 선을 그리고, 이어서 사각형과 원을 출력하며, 마지막으로 이미지 파일을 화면에 출력하는 방법을 학습한다.

화면 출력 — 선
선을 그리려면 먼저 선이 어디에서 시작하고 어디에서 끝나는지를 정하여야 한다. 즉, 시작 좌표와 끝 좌표가 필요하다. 또한 선의 색상과 굵기도 함께 정하여야 한다.
pygame 화면의 좌표는 일반 수학 그래프와 다르게 왼쪽 위 모서리가 (0, 0)이다. 오른쪽으로 이동할수록 x값이 커지고, 아래쪽으로 이동할수록 y값이 커진다. 따라서 화면 중앙에 도형을 그리고 싶다면 화면의 가로 길이와 세로 길이를 기준으로 좌표를 계산하여야 한다.
색상은 (R, G, B) 형식으로 표현한다. 여기서 R은 빨강, G는 초록, B는 파랑을 의미한다.
(255, 0, 0) → 빨강
(0, 255, 0) → 초록
(0, 0, 255) → 파랑
(255, 255, 255) → 흰색
(0, 0, 0) → 검은색
수평선 그리기 코드

예를 들어 게임 화면의 크기가 가로 600, 세로 400이라면 화면의 세로 중앙은 HEIGHT / 2, 즉 200이다. 화면 중앙에 수평선을 그리려면 시작점과 끝점의 y좌표를 모두 HEIGHT / 2로 설정하면 된다.
수평선의 핵심:
시작점 y좌표 = 끝점 y좌표
pygame 기본 뼈대 코드에서 render() 함수 안에
화면 중앙에 흰색 수평선을 그리는 코드를 추가하여줘.
pygame.draw.line() 함수를 사용하여 실제로 수평선을 그리는 코드이다. pygame.draw.line()은 pygame에서 선을 그릴 때 사용하는 함수이다. 기본 형식은 다음과 같다.
pygame.draw.line(screen, 색상, 시작좌표, 끝좌표, 두께)

예를 들어 화면 중앙에 길이 400인 흰색 수평선을 그리고 싶다면 다음과 같이 작성할 수 있다.
start_pos = (WIDTH / 2 - 200, HEIGHT / 2)
end_pos = (WIDTH / 2 + 200, HEIGHT / 2)
pygame.draw.line(screen, (255, 255, 255), start_pos, end_pos, 3)
여기서 WIDTH / 2는 화면의 가로 중앙이고, HEIGHT / 2는 화면의 세로 중앙이다. WIDTH / 2 - 200은 중앙에서 왼쪽으로 200만큼 이동한 위치이고, WIDTH / 2 + 200은 중앙에서 오른쪽으로 200만큼 이동한 위치이다. 따라서 전체 선의 길이는 400이 된다.
중앙선을 그릴 때에는 화면 크기의 절반 좌표를 기준으로 시작점과 끝점을 계산한다.
수평선은 시작점과 끝점의 y좌표가 같아야 한다.
수평선 추가 코드 예시
import pygame
import sys
WIDTH, HEIGHT = 600, 400
FPS = 60
screen = None
clock = None
running = True
def init():
global screen, clock
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("수평선 그리기")
clock = pygame.time.Clock()
def handle_input():
global running
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
def update_game():
pass
def render():
screen.fill((0, 0, 0))
# 화면 중앙에 길이 400인 수평선 그리기
start_pos = (WIDTH / 2 - 200, HEIGHT / 2)
end_pos = (WIDTH / 2 + 200, HEIGHT / 2)
pygame.draw.line(
screen,
(255, 255, 255),
start_pos,
end_pos,
3
)
pygame.display.flip()
def run_game():
init()
while running:
handle_input()
update_game()
render()
clock.tick(FPS)
pygame.quit()
sys.exit()
run_game()
핵심 정리
| 구분 | 핵심 내용 |
| 도형 출력 위치 | render() 함수 |
| 선 그리기 함수 | pygame.draw.line() |
| 수평선 조건 | 시작점과 끝점의 y좌표가 같음 |
| 화면 중앙 y좌표 | HEIGHT / 2 |
| 화면 갱신 | pygame.display.flip() |
도형은 render() 함수 안에서 그린다. 수평선은 y좌표가 같은 두 점을 연결하여 그린다.

수직선 그리기
수직선은 위에서 아래로 그어지는 선이다. 수평선이 왼쪽에서 오른쪽으로 그어지는 선이었다면, 수직선은 화면의 위쪽에서 아래쪽으로 내려가는 선이다. 따라서 수직선을 그릴 때에는 시작점과 끝점의 x좌표가 같아야 한다.
예를 들어 게임 화면의 크기가 가로 600, 세로 400이라면 화면의 가로 중앙은 WIDTH // 2, 즉 300이다. 화면 중앙에 수직선을 그리려면 시작점과 끝점의 x좌표를 모두 WIDTH // 2로 설정하면 된다.
수직선의 핵심:
시작점 x좌표 = 끝점 x좌표
시작점: (화면 가로 중앙, 화면 세로 중앙 - 200)
끝점: (화면 가로 중앙, 화면 세로 중앙 + 200)
프롬프트 예시
슬라이드의 문제 문구는 “화면 중앙에 수직선 그리기”로 정리하는 것이 좋다.
pygame 기본 뼈대 코드에서 render() 함수 안에
게임 화면 중앙에 길이 400인 흰색 수직선을 그리는 코드를 추가하여줘.
수직선 그리기 코드
def render():
screen.fill((0, 0, 0)) # 검은색 배경
# 화면 중앙에 길이 400인 수직선
# 시작점: 가운데에서 위쪽으로 200
start_pos = (WIDTH // 2, HEIGHT // 2 - 200)
# 끝점: 가운데에서 아래쪽으로 200
end_pos = (WIDTH // 2, HEIGHT // 2 + 200)
# 흰색, 두께 3인 수직선 그리기
pygame.draw.line(screen, (255, 255, 255), start_pos, end_pos, 3)
pygame.display.flip()
전체 코드 예시
import pygame
import sys
WIDTH, HEIGHT = 600, 400
FPS = 60
screen = None
clock = None
running = True
def init():
global screen, clock
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("수직선 그리기")
clock = pygame.time.Clock()
def handle_input():
global running
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
def update_game():
pass
def render():
screen.fill((0, 0, 0)) # 검은색 배경
# 화면 중앙에 길이 400인 수직선
start_pos = (WIDTH // 2, HEIGHT // 2 - 200)
end_pos = (WIDTH // 2, HEIGHT // 2 + 200)
pygame.draw.line(screen, (255, 255, 255), start_pos, end_pos, 3)
pygame.display.flip()
def run_game():
init()
while running:
handle_input()
update_game()
render()
clock.tick(FPS)
pygame.quit()
sys.exit()
run_game()
수평선과 수직선 비교
| 구분 | 좌표 | 예시 |
| 수평선 | y좌표가 같다 | (100, 200) → (500, 200) |
| 수직선 | x좌표가 같다 | (300, 0) → (300, 400) |
수평선은 y좌표를 고정하고 x좌표를 바꾸어 그린다.
수직선은 x좌표를 고정하고 y좌표를 바꾸어 그린다.

대각선 그리기
대각선은 가로 방향과 세로 방향으로 동시에 이동하는 선이다. 수평선은 y좌표가 같고, 수직선은 x좌표가 같지만, 대각선은 시작점과 끝점의 x좌표와 y좌표가 모두 달라진다.
예를 들어 왼쪽 위에서 오른쪽 아래로 내려가는 대각선을 그리고 싶다면, 시작점은 화면의 왼쪽 위에 가까운 좌표로 두고, 끝점은 오른쪽 아래에 가까운 좌표로 두면 된다. pygame 화면에서는 왼쪽 위가 (0, 0)이고, 오른쪽으로 갈수록 x값이 커지며, 아래로 내려갈수록 y값이 커진다. 따라서 왼쪽 위에서 오른쪽 아래로 향하는 대각선은 다음과 같은 좌표 관계를 가진다.
시작점: (작은 x값, 작은 y값)
끝점: (큰 x값, 큰 y값)
시작점: (0, 0)
끝점: (WIDTH, HEIGHT)
프롬프트 예시
pygame 기본 뼈대 코드에서 render() 함수 안에
왼쪽 위에서 오른쪽 아래로 가로지르는 흰색 대각선을 그리는 코드를 추가하여줘.
선의 두께는 3으로 설정하여줘.
pygame 기본 뼈대 코드에서 render() 함수 안에
게임 화면의 왼쪽 위에서 오른쪽 아래로 향하는 대각선을 그려줘.
단, 화면 가장자리에서 약간 떨어지도록 시작점과 끝점에 여백을 두어줘.
대각선 그리기 코드
1. 화면 전체를 가로지르는 대각선
def render():
screen.fill((0, 0, 0)) # 검은색 배경
# 왼쪽 위에서 오른쪽 아래로 대각선 그리기
start_pos = (0, 0)
end_pos = (WIDTH, HEIGHT)
pygame.draw.line(screen, (255, 255, 255), start_pos, end_pos, 3)
pygame.display.flip()
2. 여백을 두고 그리는 대각선
def render():
screen.fill((0, 0, 0)) # 검은색 배경
# 화면 가장자리에서 50만큼 떨어진 대각선
start_pos = (50, 50)
end_pos = (WIDTH - 50, HEIGHT - 50)
pygame.draw.line(screen, (255, 255, 255), start_pos, end_pos, 3)
pygame.display.flip()
수평선, 수직선, 대각선 비교
| 구분 | 좌표 특징 | 예시 |
| 수평선 | y좌표가 같다 | (100, 200) → (500, 200) |
| 수직선 | x좌표가 같다 | (300, 50) → (300, 350) |
| 대각선 | x좌표와 y좌표가 모두 달라진다 | (50, 50) → (550, 350) |
대각선은 두 점을 연결하여 그리는 선이라는 점에서는 수평선, 수직선과 동일하다. 차이는 시작점과 끝점의 좌표 변화에 있다. 수평선은 y좌표가 같고, 수직선은 x좌표가 같지만, 대각선은 x좌표와 y좌표가 모두 달라진다. 따라서 왼쪽 위에서 오른쪽 아래로 내려가는 대각선을 그리려면 시작점은 작은 x값과 작은 y값으로 설정하고, 끝점은 큰 x값과 큰 y값으로 설정한다.

사각형
사각형은 가로 길이와 세로 길이를 가진 도형이다. pygame에서 사각형을 그리려면 먼저 사각형이 화면의 어느 위치에서 시작할지 정하여야 한다. 또한 사각형의 가로 길이, 세로 길이, 선의 두께, 색상을 함께 지정하여야 한다. 사각형을 그리기 위한 문제는 다음 요소로 나누어 생각할 수 있다.
| 요소 | 의미 |
| 사각형 시작 좌표 | 사각형의 왼쪽 위 위치 |
| 사각형 가로 길이 | 사각형의 폭 |
| 사각형 세로 길이 | 사각형의 높이 |
| 사각형 선의 두께 | 테두리의 굵기 |
| 사각형 선의 색상 | RGB 값으로 표현 |
사각형은 시작 좌표, 가로 길이, 세로 길이로 위치와 크기를 정한다.
pygame에서 사각형의 시작 좌표는 사각형의 왼쪽 위 모서리를 의미한다.
정사각형 그리기
화면 중앙에 정사각형을 그리려면 먼저 화면의 중앙 좌표를 기준으로 정사각형의 왼쪽 위 좌표를 계산하여야 한다. 예를 들어 한 변의 길이가 200인 정사각형을 화면 중앙에 배치하려면, 화면 중앙에서 왼쪽으로 100, 위쪽으로 100 이동한 지점을 시작 좌표로 잡는다.
정사각형 시작 x좌표 = WIDTH // 2 - 100
정사각형 시작 y좌표 = HEIGHT // 2 - 100
가로 길이 = 200
세로 길이 = 200
pygame 기본 뼈대 코드에서 render() 함수 안에
화면 중앙에 한 변의 길이가 200인 흰색 정사각형을 그리는 코드를 추가하여줘.
정사각형은 내부를 채우지 말고 테두리만 보이게 하여줘.
정사각형 그리기 코드
pygame.Rect()는 사각형의 위치와 크기 정보를 만드는 코드이고, 실제로 화면에 사각형을 그리는 코드는 pygame.draw.rect()이다. 따라서 다음 코드만 있으면 사각형 정보만 만든 것이며, 화면에는 보이지 않는다.
rect = pygame.Rect(WIDTH // 2 - 100, HEIGHT // 2 - 100, 200, 200)
pygame.draw.rect(screen, (255, 255, 255), rect, 3)
def render():
screen.fill((0, 0, 0)) # 검은색 배경
# 화면 중앙에 한 변의 길이가 200인 정사각형 배치
rect = pygame.Rect(WIDTH // 2 - 100, HEIGHT // 2 - 100, 200, 200)
# 흰색, 두께 3인 정사각형 테두리 그리기
pygame.draw.rect(screen, (255, 255, 255), rect, 3)
pygame.display.flip()
화면 출력 — 원
원은 한 점을 중심으로 일정한 거리만큼 떨어진 점들의 집합이다. 이때 중심에서 원의 가장자리까지의 거리를 반지름이라고 한다. pygame에서 원을 그리려면 원의 중심 좌표, 반지름, 선의 두께, 색상을 정하여야 한다.원을 그리기 위한 문제는 다음 요소로 나눌 수 있다.
| 요소 | 의미 |
| 원의 중심 | 원이 배치될 중심 좌표 |
| 원의 반지름 | 중심에서 원의 둘레까지의 거리 |
| 원 선의 두께 | 원 테두리의 굵기 |
| 원 선의 색상 | RGB 값으로 표현 |
원을 그릴 때에는 사각형과 달리 시작 좌표가 아니라 중심 좌표를 사용한다.
따라서 원은 중심점과 반지름을 기준으로 크기와 위치가 결정된다.
화면 중앙에 원을 그리려면 중심 좌표를 화면의 중앙으로 설정하면 된다. 예를 들어 화면 크기가 600×400이라면 중심 좌표는 (300, 200)이다. 이를 일반화하면 다음과 같이 쓸 수 있다.
원의 중심 좌표 = (WIDTH // 2, HEIGHT // 2)
pygame 기본 뼈대 코드에서 render() 함수 안에
화면 중앙에 반지름이 100인 흰색 원을 그리는 코드를 추가하여줘.
원은 내부를 채우지 말고 테두리만 보이게 하여줘.
원 그리기 코드
pygame에서 원을 그릴 때에는 pygame.draw.circle() 함수를 사용한다. 기본 형식은 다음과 같다.
pygame.draw.circle(screen, 색상, 중심좌표, 반지름, 두께)
def render():
screen.fill((0, 0, 0)) # 검은색 배경
# 화면 중앙에 반지름 100인 원 그리기
pygame.draw.circle(
screen,
(255, 255, 255),
(WIDTH // 2, HEIGHT // 2),
100,
5
)
pygame.display.flip()
pygame.draw.circle()에는 화면, 색상, 중심 좌표, 반지름, 두께가 들어간다.
마지막 두께 값을 생략하면 내부가 채워진 원이 그려지고, 두께 값을 지정하면 테두리만 그려진다.
실습 — 타원 그리기
타원은 원과 비슷하지만 가로 길이와 세로 길이가 서로 다른 도형이다. pygame에서 타원은 원처럼 중심과 반지름만으로 직접 그리지 않고, 먼저 타원이 들어갈 사각형 영역을 정한 뒤 그 사각형 안에 맞추어 그린다. 즉, 타원은 다음 순서로 생각할 수 있다.
타원이 들어갈 사각형 영역 정하기
→ 그 사각형 안에 타원 그리기
프롬프트 예시는 다음과 같다.
pygame 기본 뼈대 코드에서 render() 함수 안에
화면 중앙에 가로 400, 세로 200 크기의 흰색 타원을 그리는 코드를 추가하여줘.
타원은 내부를 채우지 말고 테두리만 보이게 하여줘.
타원은 사각형 영역 안에 그려지는 도형이다.
따라서 먼저 타원이 들어갈 사각형의 위치와 크기를 정한 다음, 그 사각형 정보를 이용하여 타원을 그린다
타원 그리기 코드
pygame에서 타원을 그릴 때에는 pygame.draw.ellipse() 함수를 사용한다. 이 함수는 pygame.Rect()로 만든 사각형 영역을 기준으로 타원을 그린다. 기본 형식은 다음과 같다.
pygame.draw.ellipse(screen, 색상, 사각형영역, 두께)
def render():
screen.fill((0, 0, 0)) # 검은색 배경
# 타원의 가로와 세로 크기
oval_width = 400
oval_height = 200
# 화면 중앙 좌표
cx = WIDTH // 2
cy = HEIGHT // 2
# 타원이 들어갈 사각형 영역 만들기
rect = pygame.Rect(
cx - oval_width // 2,
cy - oval_height // 2,
oval_width,
oval_height
)
# 흰색, 두께 3인 타원 그리기
pygame.draw.ellipse(screen, (255, 255, 255), rect, 3)
pygame.display.flip()
도형별 함수 정리
| 도형 | 함수 | 필요 정보 |
| 선 | pygame.draw.line() | 시작 좌표, 끝 좌표, 색상, 두께 |
| 사각형 | pygame.draw.rect() | 시작 좌표, 가로 길이, 세로 길이, 색상, 두께 |
| 원 | pygame.draw.circle() | 중심 좌표, 반지름, 색상, 두께 |
| 타원 | pygame.draw.ellipse() | 사각형 영역, 색상, 두께 |
도형 출력 핵심 정리
도형은 render() 함수 안에서 그린다.
사각형은 시작 좌표와 가로·세로 길이로 그리고,
원은 중심 좌표와 반지름으로 그리며,
타원은 사각형 영역 안에 맞추어 그린다.

이미지 출력
이미지 출력은 게임 화면에 미리 준비한 그림 파일을 보여주는 과정이다. 선, 사각형, 원은 pygame 코드만으로 직접 그릴 수 있지만, 캐릭터나 적, 아이템처럼 구체적인 모양은 이미지 파일을 불러와서 사용하는 경우가 많다. 이미지를 출력하기 위해서는 먼저 초기화 단계에서 이미지 파일을 불러와야 한다. 예를 들어 img1.png와 같은 PNG 파일을 준비하고, pygame.image.load()를 사용하여 코드 안으로 불러온다. 이후 이미지의 처음 위치를 정하고, 출력 처리 단계에서 화면에 이미지를 그린다.
이때 이미지의 위치는 x좌표와 y좌표로 설정한다. pygame 화면의 원점 (0, 0)은 왼쪽 위 모서리이므로, 이미지가 어디에 나타날지 정할 때 이 좌표 체계를 이해하여야 한다.
이미지 출력은 도형 출력과 비슷하지만, 먼저 이미지 파일을 불러오는 과정이 필요하다.
초기화 단계에서는 이미지를 불러오고 위치를 정하며, 출력 처리 단계에서는 이미지를 화면에 그린다.
이미지 출력 — 이미지 Tip
이미지 파일은 보통 PNG 형식을 사용하는 것이 좋다. PNG 파일은 투명 배경을 지원하기 때문에 캐릭터 주변에 흰색 네모 배경이 생기지 않고 자연스럽게 출력할 수 있다. 게임 캐릭터 이미지는 너무 크지 않은 것이 좋다. 이미지가 지나치게 크면 화면을 가리거나, 처리 속도에 부담이 될 수 있다. 초보자 실습에서는 32px에서 128px 정도 크기의 이미지를 사용하는 것이 적절하다.
이미지를 찾을 때에는 다음과 같은 검색어를 사용할 수 있다.
png transparent game sprite
게임 이미지로는 투명 배경 PNG 파일을 사용하는 것이 좋다.
파일 이름은 코드에 입력한 이름과 정확히 같아야 하며, 파이썬 파일과 같은 폴더에 두는 것이 가장 쉽다.
이미지 출력 실습
프롬프트 예시는 다음과 같다.
pygame 기본 뼈대 코드를 이용하여
게임 창 밑에서 3/4 위치에 img1.png 이미지를 출력하는 코드를 추가하여줘.
이미지는 투명 배경 PNG 파일이라고 가정하여줘.
이미지 파일 불러오기
→ 이미지 위치 정하기
→ screen.blit()으로 화면에 출력하기
→ pygame.display.flip()으로 화면 갱신하기
이미지 출력 코드
이미지 출력 코드에서 가장 중요한 부분은 세 가지이다.
첫째, 이미지 변수를 선언한다.
img1 = None
둘째, 초기화 함수에서 이미지를 불러온다.
img1 = pygame.image.load("img1.png").convert_alpha()
셋째, 출력 함수에서 이미지를 화면에 그린다.
img1_rect = img1.get_rect(center=(WIDTH // 2, HEIGHT * 3 // 4))
screen.blit(img1, img1_rect)
이미지 파일 자체는 그림 데이터이고, rect는 그 이미지가 화면 어디에 놓일지를 정하는 위치 정보이다.
screen.blit()은 이미지를 실제 화면에 붙이는 명령이다.
최소 이미지 출력 코드 예시
def render():
screen.fill((0, 0, 0))
img1_rect = img1.get_rect(center=(WIDTH // 2, HEIGHT * 3 // 4))
screen.blit(img1, img1_rect)
pygame.display.flip()
랜덤한 위치에 이미지 출력
이 화면은 이미지 출력에 랜덤 기능을 추가하는 단계이다. 기존 기능은 이미지를 불러오고 정해진 위치에 출력하는 것이었다. 여기에 추가로 적 이미지의 위치를 무작위로 정하는 기능을 넣는다. 랜덤 위치를 만들기 위해서는 Python의 random 모듈이 필요하다.
import random
enemy_rect = img2.get_rect(
center=(random.randint(20, WIDTH - 50), 30)
)
import random
enemy_rect = img2.get_rect(
center=(random.randint(20, WIDTH - 50), 30)
)
def render():
screen.fill((0, 0, 0))
screen.blit(img1, player_rect)
screen.blit(img2, enemy_rect)
pygame.display.flip()
랜덤 위치에 새 이미지 추가
이 화면은 새로운 이미지 img2.png를 추가하고, 그 이미지의 x좌표를 랜덤하게 정하는 실습이다. 여기서 중요한 점은 새로운 이미지를 추가할 때 단순히 출력 코드만 추가하면 안 된다는 것이다. 새 이미지를 사용하려면 다음 세 가지가 필요하다.
1. 새 이미지 변수 선언
2. 새 이미지 파일 불러오기
3. 새 이미지 위치 설정 후 출력
pygame 기본 뼈대 코드에서 새로운 이미지 img2.png를 추가하여줘.
img2.png의 x좌표는 랜덤하게 정하고,
y좌표는 게임 창의 위쪽에 위치하도록 해줘.
랜덤 위치에 새 이미지 추가 코드 1
이 화면은 새로운 이미지와 위치 변수를 선언하고, 초기화 함수에서 이미지를 불러오는 부분을 보여준다.
먼저 random 모듈을 불러온다.
import random
img1, img2 = None, None
player_rect = None
enemy_rect = None
img1 = pygame.image.load("img1.png").convert_alpha()
img2 = pygame.image.load("img2.png").convert_alpha()
새로운 이미지를 추가하려면 먼저 변수를 만들고, 초기화 단계에서 이미지를 불러와야 한다. 이미지 파일 이름과 코드에 적은 이름이 다르면 이미지가 출력되지 않는다.
랜덤 위치에 새 이미지 추가 코드 2
이 화면은 적 이미지의 위치를 랜덤하게 정하고 화면에 출력하는 부분을 보여준다. 적의 초기 위치는 다음과 같이 설정할 수 있다.
enemy_rect = img2.get_rect(
center=(random.randint(20, WIDTH - 50), 30)
)
출력 함수에서는 플레이어 이미지와 적 이미지를 모두 출력한다.
screen.blit(img1, player_rect)
screen.blit(img2, enemy_rect)
random 함수는 적 이미지의 위치를 매번 다르게 만들 때 사용한다.
이미지를 여러 개 출력하려면 각각의 이미지와 rect를 screen.blit()으로 따로 출력하여야 한다.
두개 이미지 출력
import pygame
# 전역 변수
screen = None
clock = None
running = True
image1 = None # ADDED
image2 = None # ADDED
x1, y1 = 100, 100 # ADDED
x2, y2 = 300, 200 # ADDED
# 1) 게임 초기화
def init():
global screen, clock, image1, image2
pygame.init() # ADDED
screen = pygame.display.set_mode((600, 400)) # ADDED
pygame.display.set_caption("2개 이미지 출력") # ADDED
clock = pygame.time.Clock() # ADDED
# 이미지 불러오기
image1 = pygame.image.load("img1.png") # ADDED
image2 = pygame.image.load("img2.png") # ADDED
# 2) 게임 입력
def handle_input():
global running
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 3) 게임 업데이트
def update_game():
pass
# 4) 출력 처리
def render():
screen.fill((0, 0, 0)) # ADDED
# 첫 번째 이미지
screen.blit(image1, (x1, y1)) # ADDED
# 두 번째 이미지
screen.blit(image2, (x2, y2)) # ADDED
pygame.display.flip() # ADDED
# 5) 실행
def run_game():
global running
init() # ADDED
while running:
handle_input()
update_game()
render()
clock.tick(60) # ADDED
pygame.quit() # ADDED
# 시작
run_game()
이미지 출력 — 실수 Top4
- 첫째, pygame.display.flip()을 쓰지 않는 경우이다.
도형이나 이미지를 코드로 그렸더라도, flip()을 실행하지 않으면 화면에 반영되지 않는다. - 둘째, screen.fill()을 쓰지 않는 경우이다.
화면을 지우지 않고 계속 이미지를 그리면 이전 그림이 남아 잔상처럼 보일 수 있다. - 셋째, 이미지 파일 경로 오류이다.
img1.png라고 작성했는데 실제 파일 이름이 다르거나, 파이썬 파일과 다른 폴더에 있으면 이미지를 불러올 수 없다. - 넷째, while 반복문 밖에서 이미지를 출력하는 경우이다.
게임 화면은 반복문 안에서 계속 다시 그려져야 하므로, 출력 코드는 보통 render() 함수 안에 있어야 한다.
이미지 출력 핵심 함수 정리
| 함수 | 역할 |
| pygame.image.load("파일명") | 이미지 파일 불러오기 |
| convert_alpha() | PNG 투명 배경 처리 |
| get_rect() | 이미지의 위치와 크기 정보 만들기 |
| screen.blit(이미지, 위치정보) | 이미지를 화면에 출력하기 |
| pygame.display.flip() | 새로 그린 화면을 실제 창에 보여주기 |
| random.randint(a, b) | a부터 b 사이의 정수 중 하나를 랜덤 선택 |
전체소스
import pygame
import sys
pygame.init()
screen = pygame.display.set_mode((600, 400))
# ① 이미지 불러오기
image = pygame.image.load("img1.png") # ADDED
# ② 위치 설정
x = 0
y = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# ③ 화면 출력
screen.fill((0, 0, 0))
screen.blit(image, (x, y)) # ADDED
pygame.display.flip()
pygame.quit()
sys.exit()
랜덤 이미지
import pygame
import random # ADDED
# 전역 변수
screen = None
clock = None
running = True
image = None
x = 0
y = 0
# 1) 게임 초기화
def init():
global screen, clock, image, x, y
pygame.init() # ADDED
screen = pygame.display.set_mode((600, 400)) # ADDED
clock = pygame.time.Clock() # ADDED
# 이미지 불러오기
image = pygame.image.load("player2.png") # ADDED
image = pygame.transform.scale(image, (50, 50)) # ADDED (이미지 크기 조정)
# 랜덤 위치 설정
x = random.randint(0, 500) # ADDED
y = random.randint(0, 300) # ADDED
# 2) 게임 입력
def handle_input():
global running, x, y
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 키를 누르면 위치 변경
if event.type == pygame.KEYDOWN: # ADDED
x = random.randint(0, 500) # ADDED
y = random.randint(0, 300) # ADDED
# 3) 게임 업데이트
def update_game():
pass
# 4) 출력 처리
def render():
screen.fill((0, 0, 0)) # ADDED
screen.blit(image, (x, y)) # ADDED
pygame.display.flip() # ADDED
# 5) 실행
def run_game():
global running
init() # ADDED
while running:
handle_input()
update_game()
render()
clock.tick(60) # ADDED
pygame.quit() # ADDED
# 시작
run_game()
Summary





- Total
- Today
- Yesterday
- Text Mining
- matplotlib
- HIG
- 파이썬
- IOT
- 텍스트 마이닝
- HCI
- 라이브러리
- 텍스트마이닝
- 챗봇
- 관계자분석
- 데이타R지
- 사물인터넷
- UI
- 파이썬 기초
- 안드로이드
- 프로토타입
- 초보자를 위한 텍스트마이닝
- Idle
- python
- 파이썬기초
- 데이터R지
- 챗GPT
- 4차산업혁명
- 휴리스틱평가
- 피그마
- UX
- figma
- 컴퓨팅사고력
- 스마트기술
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |