
패들(Paddle) 구현
이번 강의에서는 벽돌깨기 게임에서 플레이어가 직접 조작하는
패들(Paddle) 을 구현합니다.
패들은 키보드 입력을 받아 좌우로 이동하는 객체이며,
이 강의를 통해 다음 개념을 학습하는 것이 목표입니다.
- 키보드 입력 처리
- 객체 이동
- 화면 밖 이동 제한
파이게임 기본 구조 준비
패들을 구현하기 전에
파이게임 프로그램의 기본 구조를 먼저 준비합니다.
import pygame
import sys
pygame.init()
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Breakout Game")
이 코드는 파이게임을 초기화하고
게임 화면을 생성하는 가장 기본적인 설정입니다.
패들의 크기와 위치 설정
패들은 사각형(Rect)으로 표현합니다.
먼저 패들의 크기와 초기 위치를 변수로 정의합니다.
paddle_width = 100
paddle_height = 15
paddle_x = (SCREEN_WIDTH - paddle_width) // 2
paddle_y = SCREEN_HEIGHT - 40
패들은 화면 하단 중앙에 위치해야 하므로
화면 너비를 기준으로 x좌표를 계산합니다.
Rect 객체로 패들 생성하기
파이게임에서는 대부분의 충돌과 위치 처리를
Rect 객체를 사용해 처리합니다.
paddle_rect = pygame.Rect(
paddle_x,
paddle_y,
paddle_width,
paddle_height
)
이 Rect 객체 하나로
- 위치
- 크기
- 충돌 판정
모두 처리할 수 있습니다.
게임 루프 만들기
게임은 게임 루프 안에서 계속 실행됩니다.
clock = pygame.time.Clock()
FPS = 60
running = True
while running:
clock.tick(FPS)
이 구조는 매 프레임마다
화면을 갱신하고 입력을 처리하는 역할을 합니다.
종료 이벤트 처리
창을 닫았을 때 프로그램이 정상 종료되도록
이벤트 처리를 추가합니다.
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
이 코드는 모든 파이게임 프로젝트에서
반드시 필요한 기본 코드입니다.
키보드 입력으로 패들 이동시키기
패들은 키보드를 누르고 있는 동안 계속 이동해야 합니다.
이를 위해 pygame.key.get_pressed() 방식을 사용합니다.
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
paddle_rect.x -= 7
if keys[pygame.K_RIGHT]:
paddle_rect.x += 7
이 방식은
키를 누르고 있는 동안 매 프레임 이동하도록 만들어 줍니다.
화면 밖으로 나가지 않도록 제한하기
패들이 화면 밖으로 나가면 게임이 깨지게 됩니다.
따라서 이동 범위를 제한해야 합니다.
if paddle_rect.left < 0:
paddle_rect.left = 0
if paddle_rect.right > SCREEN_WIDTH:
paddle_rect.right = SCREEN_WIDTH
이 코드는 패들의 왼쪽과 오른쪽 경계를
화면 안으로 고정합니다.
화면에 패들 그리기
이제 패들을 화면에 그립니다.
screen.fill((0, 0, 0))
pygame.draw.rect(screen, (255, 255, 255), paddle_rect)
pygame.display.flip()
- 화면을 검은색으로 지웁니다
- 흰색 사각형으로 패들을 그립니다
- 변경된 화면을 출력합니다
현재 단계의 결과
이번 강의까지 구현된 결과는 다음과 같습니다.
- 검은 배경의 게임 화면이 표시됩니다
- 화면 하단에 패들이 나타납니다
- 방향키로 패들을 좌우로 이동할 수 있습니다
아직 공과 벽돌은 없지만,
플레이어 입력과 이동 구조는 완성된 상태입니다.

전체 코드
import pygame
import sys
pygame.init()
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Breakout Game")
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
clock = pygame.time.Clock()
FPS = 60
paddle_width = 100
paddle_height = 15
paddle_speed = 7
paddle_x = (SCREEN_WIDTH - paddle_width) // 2
paddle_y = SCREEN_HEIGHT - 40
paddle_rect = pygame.Rect(
paddle_x,
paddle_y,
paddle_width,
paddle_height
)
running = True
while running:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
paddle_rect.x -= paddle_speed
if keys[pygame.K_RIGHT]:
paddle_rect.x += paddle_speed
if paddle_rect.left < 0:
paddle_rect.left = 0
if paddle_rect.right > SCREEN_WIDTH:
paddle_rect.right = SCREEN_WIDTH
screen.fill(BLACK)
pygame.draw.rect(screen, WHITE, paddle_rect)
pygame.display.flip()
pygame.quit()
sys.exit()
'⚙️ Python > 🎮 Pygame 실전' 카테고리의 다른 글
| [Pygame] 🧱 벽돌 깨기 게임 만들기 4강 | 벽과의 충돌 처리 (0) | 2026.02.21 |
|---|---|
| [Pygame] 🧱 벽돌 깨기 게임 만들기 3강 | 공(Ball) 기본 이동 (0) | 2026.02.20 |
| [Pygame] 🧱 벽돌 깨기 게임 만들기 1강 | 게임 구조 개요 (0) | 2026.02.18 |
| [Pygame] 🏰 2D 타워 디펜스 게임 만들기 17강 | 스프라이트 적용 (0) | 2026.02.17 |
| [Pygame] 🏰 2D 타워 디펜스 게임 만들기 16강 | 타워 판매 기능 추가 (0) | 2026.02.16 |