파이썬으로 만드는 나만의 게임 개발 강좌 3강 – 방향키로 캐릭터 움직이기

파이썬으로 만드는 나만의 게임 개발 강좌, 3강에 오신 걸 환영합니다!

이전 강의에서 우리는 배경과 캐릭터 이미지를 출력해봤습니다. 이번 강의에서는 본격적으로 키보드 입력을 받아 캐릭터를 **상하좌우로 자유롭게 움직이는 방법**을 배워볼게요.

이번 강의에서 배울 내용

  • 이벤트(Event) 처리 방식 이해
  • 방향키 입력 감지하기
  • 캐릭터 위치 갱신 및 화면 반영

1. 방향키 이벤트란?

Pygame에서는 사용자의 키보드나 마우스 입력을 이벤트로 인식합니다. 키를 누르는 행위는 KEYDOWN, 떼는 행위는 KEYUP 이벤트로 처리합니다.

또한, 키보드에서 어떤 키가 눌렸는지를 알기 위해 event.key 값을 검사해야 합니다.


2. 전체 코드 실습

import pygame

pygame.init()

# 화면 크기 설정
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))

# 게임 창 제목
pygame.display.set_caption("방향키로 캐릭터 움직이기")

# 배경과 캐릭터 이미지 불러오기
background = pygame.image.load("background.png")
character = pygame.image.load("character.png")

# 캐릭터 위치 및 크기 정보
character_size = character.get_rect().size
character_width = character_size[0]
character_height = character_size[1]
character_x_pos = (screen_width - character_width) / 2
character_y_pos = screen_height - character_height

# 이동할 좌표
to_x = 0
to_y = 0

# 이동 속도
speed = 0.6

# FPS 설정
clock = pygame.time.Clock()

running = True
while running:
    dt = clock.tick(60)  # 초당 60 프레임 유지

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                to_x -= speed
            elif event.key == pygame.K_RIGHT:
                to_x += speed
            elif event.key == pygame.K_UP:
                to_y -= speed
            elif event.key == pygame.K_DOWN:
                to_y += speed

        if event.type == pygame.KEYUP:
            if event.key in [pygame.K_LEFT, pygame.K_RIGHT]:
                to_x = 0
            if event.key in [pygame.K_UP, pygame.K_DOWN]:
                to_y = 0

    character_x_pos += to_x * dt
    character_y_pos += to_y * dt

    # 캐릭터가 화면 밖으로 나가지 않게
    if character_x_pos < 0:
        character_x_pos = 0
    elif character_x_pos > screen_width - character_width:
        character_x_pos = screen_width - character_width

    if character_y_pos < 0:
        character_y_pos = 0
    elif character_y_pos > screen_height - character_height:
        character_y_pos = screen_height - character_height

    screen.blit(background, (0, 0))
    screen.blit(character, (character_x_pos, character_y_pos))
    pygame.display.update()

pygame.quit()

3. 코드 설명

  • pygame.KEYDOWN / KEYUP: 키보드 입력 감지
  • pygame.K_LEFT: 왼쪽 방향키
  • dt: 프레임 보정값 (속도 일정 유지용)
  • to_x / to_y: 이동 방향과 속도
  • 화면 밖으로 나가지 않도록 경계 조건 추가

4. 직접 해보는 연습

  • 속도를 조절해 캐릭터 움직임을 부드럽게 해보기
  • 배경 이미지를 바꿔보며 이동 느낌 확인
  • 캐릭터 이미지를 다른 이미지로 교체해 보기

5. 다음 강의 예고

4강: 충돌 처리 – 두 객체가 부딪혔을 때 멈추기
다음 시간에는 움직이는 캐릭터가 특정 오브젝트와 충돌했을 때, 동작을 멈추거나 다른 반응을 하도록 만드는 방법을 배워볼게요. 게임의 핵심 기능 중 하나인 충돌 감지의 시작입니다!

이 강의는 Pygame으로 직접 게임을 만드는 파이썬 실전 프로젝트 연재입니다. 누구나 따라 할 수 있도록 쉽게 설명하고 있습니다.