[python] Pygame에서 퍼즐 키퍼 게임 구현하기

이번에는 Pygame을 이용하여 퍼즐 키퍼(Puzzle Keeper) 게임을 구현해보겠습니다. 퍼즐 키퍼는 퍼즐 조각들을 올바른 위치에 맞추는 게임으로, 높은 집중력과 전략적 사고를 필요로 합니다.

게임 요소 설명

1. 퍼즐 조각

퍼즐 조각은 사각형 형태로 이루어져 있으며, 다양한 색상과 패턴을 가지고 있습니다. 각 조각은 움직일 수 있으며, 게임 화면에서 빈 칸에 맞춰 이동시킬 수 있습니다.

2. 게임 화면

게임 화면은 사각형 형태의 그리드로 이루어져 있습니다. 퍼즐 조각들을 올바른 위치로 이동시키기 위해서는 조각들을 명확하게 보여주는 게임 화면이 필요합니다.

3. 이동 제한

각 퍼즐 조각은 주어진 이동 제한 내에서만 움직일 수 있습니다. 이동 제한은 게임마다 다르게 설정될 수 있으며, 이를 고려하여 퍼즐 조각을 움직이는 전략을 세워야 합니다.

게임 구현 방법

1. Pygame 설치하기

퍼즐 키퍼 게임을 구현하기 위해 Pygame 모듈을 설치해야 합니다. 다음 명령어를 사용하여 Pygame을 설치할 수 있습니다.

pip install pygame

2. 게임 화면 생성하기

Pygame을 이용하여 게임 화면을 생성합니다. 게임 화면은 Pygame의 기본 라이브러리를 사용하여 그리드 형태로 구성됩니다.

import pygame

# 게임 화면 설정
WIDTH = 800
HEIGHT = 600
GRID_SIZE = 50

# Pygame 초기화
pygame.init()

# 게임 화면 생성
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Puzzle Keeper")

# 게임 루프 시작
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 화면 업데이트
    screen.fill((255, 255, 255))
    pygame.display.flip()

# Pygame 종료
pygame.quit()

3. 퍼즐 조각 구현하기

게임 화면 상에 퍼즐 조각들을 생성하고, 이를 움직일 수 있도록 설정해야 합니다. 각 퍼즐 조각은 Pygame의 사각형(Rect) 객체로 표현됩니다.

# 퍼즐 조각 클래스 정의
class PuzzlePiece:
    def __init__(self, x, y, color):
        self.rect = pygame.Rect(x, y, GRID_SIZE, GRID_SIZE)
        self.color = color

    def move(self, dx, dy):
        self.rect.x += dx
        self.rect.y += dy

    def draw(self):
        pygame.draw.rect(screen, self.color, self.rect)

# 퍼즐 조각 생성
piece1 = PuzzlePiece(100, 100, (255, 0, 0))
piece2 = PuzzlePiece(200, 200, (0, 255, 0))

# 게임 루프 수정
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        # 키 입력 처리
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                piece1.move(-GRID_SIZE, 0)
            elif event.key == pygame.K_RIGHT:
                piece1.move(GRID_SIZE, 0)
            elif event.key == pygame.K_UP:
                piece1.move(0, -GRID_SIZE)
            elif event.key == pygame.K_DOWN:
                piece1.move(0, GRID_SIZE)

    # 화면 업데이트
    screen.fill((255, 255, 255))
    piece1.draw()
    piece2.draw()
    pygame.display.flip()

4. 이동 제한 설정하기

퍼즐 조각의 이동 제한을 설정하기 위해서는 각 조각의 움직임을 제한하는 조건을 추가해야 합니다. 이를 위해서는 퍼즐 조각의 현재 위치와 이동 방향을 고려하여 이동 가능한지 여부를 판단해야 합니다.

class PuzzlePiece:
    # ...

    def can_move(self, dx, dy):
        new_x = self.rect.x + dx
        new_y = self.rect.y + dy

        # 이동 제한 조건 추가
        if new_x < 0 or new_x >= WIDTH or new_y < 0 or new_y >= HEIGHT:
            return False

        return True

    def move(self, dx, dy):
        if self.can_move(dx, dy):
            self.rect.x += dx
            self.rect.y += dy

# 게임 루프 수정
while running:
    # ...

    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_LEFT:
            piece1.move(-GRID_SIZE, 0)
        elif event.key == pygame.K_RIGHT:
            piece1.move(GRID_SIZE, 0)
        elif event.key == pygame.K_UP:
            piece1.move(0, -GRID_SIZE)
        elif event.key == pygame.K_DOWN:
            piece1.move(0, GRID_SIZE)

    # ...

마치며

이제 Pygame을 활용하여 퍼즐 키퍼 게임을 구현하는 방법에 대해 알아보았습니다. 퍼즐 조각의 이동과 이동 제한을 설정하여 완성도 있는 게임을 만들어보세요. Pygame의 다양한 기능을 활용하여 더욱 풍부한 게임 요소를 구현해볼 수도 있습니다. 즐거운 게임 개발을 시작해보세요!

참고 자료