[python] Pygame을 활용한 복셀 그래픽 게임 제작하기

이번 포스트에서는 Python 프로그래밍 언어와 Pygame 라이브러리를 사용하여 복셀 그래픽 게임을 제작하는 방법에 대해 알아보겠습니다. 복셀 그래픽은 최근에 다시 인기를 얻고 있는 그래픽 스타일 중 하나입니다. 게임 개발에 관심이 있는 분들에게는 흥미로울 것입니다.

1. Pygame 설치하기

먼저, 게임을 개발하기 위해 Pygame을 설치해야 합니다. Pygame은 Python에서 게임을 개발하기 위한 강력한 도구입니다. 다음 명령어를 사용하여 Pygame을 설치할 수 있습니다.

pip install pygame

2. 게임 윈도우 생성하기

게임을 만들기 위해 가장 먼저 해야 할 것은 게임 윈도우를 생성하는 것입니다. 다음의 코드를 사용하여 Pygame으로 간단한 게임 윈도우를 생성해 보겠습니다.

import pygame

WIDTH = 800
HEIGHT = 600

pygame.init()
window = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("복셀 그래픽 게임")

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

pygame.quit()

위 코드에서는 pygame 모듈을 불러오고, 게임 윈도우의 너비와 높이를 정의하고, pygame.init() 함수를 호출하여 Pygame을 초기화합니다. 그리고 pygame.display.set_mode() 함수를 사용하여 윈도우를 생성하고, pygame.display.set_caption() 함수를 사용하여 윈도우의 제목을 설정합니다.

그리고나서 running 변수를 True로 설정하여 게임 루프를 실행합니다. 이 게임 루프는 게임이 실행되는 동안 프로그램을 계속해서 실행합니다. pygame.event.get() 함수를 사용하여 이벤트(예: 마우스 클릭, 키보드 입력)를 가져오고, 이벤트 종류가 pygame.QUIT인 경우 running 변수를 False로 설정하여 게임 루프를 종료합니다.

마지막으로 pygame.quit() 함수를 호출하여 Pygame을 종료합니다.

3. 이미지 로드하기

복셀 그래픽 게임에서는 이미지 말고도 Sprite라는 개념을 사용합니다. Sprite는 게임에 등장하는 모든 개체를 나타내는 객체입니다. Sprite는 이미지를 포함하고 있으며, 게임 속에서 움직이거나 상호작용할 수 있습니다. 다음의 코드를 사용하여 이미지를 로드하고 화면에 표시해 보겠습니다.

import pygame

WIDTH = 800
HEIGHT = 600

# Colors
WHITE = (255, 255, 255)

pygame.init()
window = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("복셀 그래픽 게임")

player_image = pygame.image.load("player.png").convert()
player_rect = player_image.get_rect()
player_rect.center = (WIDTH // 2, HEIGHT // 2)

running = True
while running:
    window.fill(WHITE)
    window.blit(player_image, player_rect)
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    pygame.display.flip()

pygame.quit()

위 코드에서는 pygame.image.load() 함수를 사용하여 이미지 파일을 로드합니다. 로드한 이미지는 pygame.Surface 객체로 반환되고, convert() 함수를 사용하여 이미지의 픽셀 형식을 게임에 최적화된 형식으로 변환합니다.

그리고나서 이미지의 사각형 영역을 가져오고, 이를 윈도우의 중심으로 설정합니다. 화면을 채우는 색상으로 흰색을 사용하고, 이미지와 이미지 사각형을 윈도우에 표시합니다.

pygame.display.flip() 함수를 호출하여 화면을 업데이트합니다.

4. 키 입력 처리하기

게임에서는 플레이어의 조작이 필요합니다. 키보드의 특정 키를 누를 때마다 플레이어의 위치 또는 행동을 변경할 수 있도록 해야 합니다. 다음의 코드를 사용하여 키 입력을 처리해 보겠습니다.

import pygame

WIDTH = 800
HEIGHT = 600

# Colors
WHITE = (255, 255, 255)

pygame.init()
window = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("복셀 그래픽 게임")

player_image = pygame.image.load("player.png").convert()
player_rect = player_image.get_rect()
player_rect.center = (WIDTH // 2, HEIGHT // 2)

player_speed = 5

running = True
while running:
    window.fill(WHITE)
    window.blit(player_image, player_rect)

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player_rect.x -= player_speed
    if keys[pygame.K_RIGHT]:
        player_rect.x += player_speed
    if keys[pygame.K_UP]:
        player_rect.y -= player_speed
    if keys[pygame.K_DOWN]:
        player_rect.y += player_speed
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    pygame.display.flip()

pygame.quit()

위 코드에서는 pygame.key.get_pressed() 함수를 사용하여 현재 눌려있는 키를 확인합니다. 특정 키가 눌렸는지 확인하고, 플레이어의 위치를 변경합니다.

플레이어의 이동 속도를 조정하기 위해 player_speed 변수를 도입하였습니다. 이 변수를 사용하여 플레이어의 이동 속도를 조정할 수 있습니다.

5. 게임 세계 만들기

게임을 제작할 때에는 게임 세계를 만들어야 합니다. 게임 세계는 게임 내의 여러 요소들을 관리하고 조정하는 역할을 합니다. 게임 세계는 배경, 맵, 적들 등을 포함할 수 있습니다. 다음의 코드를 사용하여 게임 세계를 만들어 보겠습니다.

import pygame

WIDTH = 800
HEIGHT = 600

# Colors
WHITE = (255, 255, 255)

pygame.init()
window = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("복셀 그래픽 게임")

player_image = pygame.image.load("player.png").convert()
player_rect = player_image.get_rect()
player_rect.center = (WIDTH // 2, HEIGHT // 2)

player_speed = 5

def update():
    # 게임 세계 업데이트 로직 구현
    pass

def draw():
    window.fill(WHITE)
    window.blit(player_image, player_rect)
    # 게임 세계를 그려주는 로직 구현
    pygame.display.flip()
        

running = True
while running:
    update()
    draw()
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

pygame.quit()

위 코드에서는 게임 세계의 업데이트 로직과 그리기 로직을 별도의 함수로 분리하였습니다. update() 함수는 게임 세계를 업데이트하는 로직을 구현하고, draw() 함수는 게임 세계를 그려주는 로직을 구현합니다. 이러한 구조를 사용하면 게임이 복잡해져도 코드를 더욱 관리하기 쉬워집니다.

결론

본 포스트에서는 Python 프로그래밍 언어와 Pygame 라이브러리를 사용하여 복셀 그래픽 게임을 제작하는 방법을 알아보았습니다. Pygame을 사용하면 쉽고 빠르게 게임을 개발할 수 있으며, 복잡한 게임도 만들 수 있습니다. 이 포스트가 게임 개발에 관심이 있는 분들에게 도움이 되었으면 좋겠습니다.

참고 자료