[python] Pygame을 사용하여 클릭 제스처 게임 만들기

이번 포스트에서는 Pygame을 사용하여 클릭 제스처 게임을 만들어보겠습니다. 클릭 제스처 게임은 유저가 주어진 시간 동안에 화면에 나타나는 대상을 정확하게 클릭하는 게임입니다. 게임의 목표는 많은 대상을 정확하게 클릭하여 점수를 얻는 것입니다.

필요한 패키지 설치하기

이 프로젝트를 시작하기 위해서는 Pygame 패키지를 설치해야 합니다. 다음 명령을 사용하여 Pygame을 설치해주세요:

pip install pygame

게임 창 생성하기

다음으로는 게임 창을 생성해야 합니다. 다음 코드를 작성하여 Pygame 창을 생성해주세요:

import pygame

# 화면 크기 설정
WIDTH = 800
HEIGHT = 600

# 게임 창 생성
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.display.update()

pygame.quit()

위 코드에서 우리는 WIDTHHEIGHT라는 변수를 사용하여 게임 창의 크기를 설정합니다. pygame.display.set_mode() 함수를 사용하여 게임 창을 생성하고, pygame.display.set_caption() 함수를 사용하여 게임 창의 타이틀을 설정합니다. 게임 루프에서는 pygame.event.get() 함수를 사용하여 이벤트를 처리하고, pygame.display.update() 함수를 사용하여 게임 화면을 업데이트합니다.

대상 생성하기

이제 화면에 대상을 생성해야 합니다. 대상은 화면에 나타났다가 사라지는 동작을 할 것입니다. 다음 코드를 사용하여 대상을 생성해주세요:

import pygame
import random

# 화면 크기 설정
WIDTH = 800
HEIGHT = 600

# 색깔 정의
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)

# 게임 창 생성
window = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("클릭 제스처 게임")

# 대상 클래스
class Target(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.Surface((50, 50))
        self.image.fill(WHITE)
        self.rect = self.image.get_rect()
        self.rect.center = (random.randint(50, WIDTH-50), random.randint(50, HEIGHT-50))

    def update(self):
        self.rect.x += random.randint(-5, 5)
        self.rect.y += random.randint(-5, 5)

# 대상 그룹 생성
all_targets = pygame.sprite.Group()

# 초기 대상 생성
for _ in range(10):
    target = Target()
    all_targets.add(target)

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

    # 화면 업데이트
    window.fill(BLACK)
    all_targets.update()
    all_targets.draw(window)
    pygame.display.update()

pygame.quit()

위 코드에서는 Target 클래스를 정의하여 대상을 생성합니다. 대상은 사각형 모양의 화면에 나타나는 객체입니다. 대상은 update() 메소드를 사용하여 화면에서 이동하고, draw() 메소드를 사용하여 화면에 그려집니다.

대상은 초기화 과정에서 랜덤한 위치에 생성되며, 움직이는 속도는 update() 메소드에서 랜덤한 값을 사용하여 설정됩니다. 이 코드에서는 처음에 10개의 대상이 생성되며, all_targets라는 그룹에 추가됩니다. 그룹을 사용하여 모든 대상을 한 번에 업데이트하고 그리는 데 사용됩니다.

클릭 이벤트 처리하기

이제 클릭 이벤트를 처리하여 대상이 클릭되었을 때 점수를 얻을 수 있도록 해야 합니다. 다음 코드를 사용하여 클릭 이벤트를 처리해주세요:

import pygame
import random

# 화면 크기 설정
WIDTH = 800
HEIGHT = 600

# 색깔 정의
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)

# 게임 창 생성
window = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("클릭 제스처 게임")

# 대상 클래스
class Target(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.Surface((50, 50))
        self.image.fill(WHITE)
        self.rect = self.image.get_rect()
        self.rect.center = (random.randint(50, WIDTH-50), random.randint(50, HEIGHT-50))

    def update(self):
        self.rect.x += random.randint(-5, 5)
        self.rect.y += random.randint(-5, 5)

# 대상 그룹 생성
all_targets = pygame.sprite.Group()

# 초기 대상 생성
for _ in range(10):
    target = Target()
    all_targets.add(target)

# 점수
score = 0

# 게임 루프
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.MOUSEBUTTONDOWN:
            pos = pygame.mouse.get_pos()
            clicked_targets = [target for target in all_targets if target.rect.collidepoint(pos)]
            if clicked_targets:
                score += len(clicked_targets)
                all_targets.remove(clicked_targets)
                for target in clicked_targets:
                    new_target = Target()
                    all_targets.add(new_target)

    window.fill(BLACK)
    all_targets.update()
    all_targets.draw(window)

    # 점수 표시
    font = pygame.font.Font(None, 36)
    score_text = font.render(f"Score: {score}", True, WHITE)
    window.blit(score_text, (10, 10))

    pygame.display.update()

pygame.quit()

위 코드에서는 클릭 이벤트를 처리하기 위해 pygame.MOUSEBUTTONDOWN 이벤트를 사용합니다. pygame.mouse.get_pos() 함수를 사용하여 클릭한 위치를 얻고, target.rect.collidepoint(pos)를 사용하여 해당 위치에 대상이 있는지 확인합니다.

만약 클릭한 위치에 대상이 있다면, 해당 대상들을 제거하고 대상 그룹에서도 제거한 후, 새로운 대상을 생성하여 대상 그룹에 추가합니다. 점수도 해당 대상들의 개수만큼 증가시킵니다.

게임 루프 안에서는 매 프레임마다 점수를 표시하기 위해 font.render() 함수를 사용하여 텍스트를 렌더링하고, window.blit() 함수를 사용하여 화면에 텍스트를 그립니다.

이제 위 코드를 실행하면 클릭 제스처 게임을 할 수 있습니다. 많은 대상들을 클릭하여 점수를 얻어보세요!

결론

이번 포스트에서는 Pygame을 사용하여 클릭 제스처 게임을 만드는 방법에 대해 알아보았습니다. Pygame을 사용하면 간단한 게임을 만들 수 있으며, 이를 통해 게임 개발에 대한 기본적인 이해를 할 수 있습니다. 클릭 제스처 게임 외에도 Pygame을 사용하여 다양한 게임을 만들어볼 수 있으니 많은 도전을 해보세요!