[python] Pygame을 사용하여 프로핑 게임 만들기

이번 튜토리얼에서는 Python의 Pygame 라이브러리를 사용하여 간단한 프로핑(Game of Pong) 게임을 만들어 보겠습니다. 프로핑은 테니스를 기반으로 한 게임으로, 두 플레이어가 패들을 사용하여 공을 네트를 넘어 상대방의 골대에 넣는 것을 목표로 합니다.

Pygame 설치

먼저, Pygame을 설치해야 합니다. 아래 명령을 사용하여 Pygame을 설치할 수 있습니다.

pip install pygame

게임 초기화

게임을 시작하기 전에 Pygame을 초기화해야 합니다. 다음과 같이 pygame.init()을 호출하여 Pygame을 초기화합니다.

import pygame
pygame.init()

게임 화면 설정

Pygame을 초기화한 후에는 게임 화면의 크기와 타이틀을 설정해야 합니다. 아래 코드를 사용하여 게임 화면을 생성할 수 있습니다.

screen_width = 800
screen_height = 400
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Propping Game")

게임 루프

게임 루프는 게임의 주요 로직을 처리하는 부분입니다. 이 부분에서는 키 입력을 처리하고 게임 상태를 갱신하는 등의 작업을 수행합니다. 아래는 간단한 게임 루프의 예입니다.

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    # 게임 로직 처리
    # ...

    # 화면 업데이트
    pygame.display.flip()

pygame.quit()

패들과 공 추가

게임에는 두 개의 패들과 하나의 공이 필요합니다. 각각의 객체는 이미지로 표현됩니다. 다음과 같이 패들과 공 이미지를 불러와 객체를 생성할 수 있습니다.

paddle_width = 10
paddle_height = 60
paddle_color = (255, 255, 255) # 흰색

paddle1_pos = pygame.Rect(50, 0, paddle_width, paddle_height)
paddle2_pos = pygame.Rect(screen_width - 50 - paddle_width, 0, paddle_width, paddle_height)

ball_radius = 10
ball_color = (255, 0, 0) # 빨간색

ball_pos = pygame.Rect(screen_width // 2, screen_height // 2, ball_radius * 2, ball_radius * 2)

게임 로직 처리

게임 로직은 주로 키 입력 처리 및 객체 움직임 업데이트와 관련된 작업을 수행합니다. 예를 들어, 아래 코드는 키 입력 처리 및 패들 움직임을 갱신하는 방법을 보여줍니다.

# 패들 움직임 갱신
keys = pygame.key.get_pressed()
if keys[pygame.K_w] and paddle1_pos.y > 0:
    paddle1_pos.y -= 5
elif keys[pygame.K_s] and paddle1_pos.y < screen_height - paddle_height:
    paddle1_pos.y += 5

if keys[pygame.K_UP] and paddle2_pos.y > 0:
    paddle2_pos.y -= 5
elif keys[pygame.K_DOWN] and paddle2_pos.y < screen_height - paddle_height:
    paddle2_pos.y += 5

화면 업데이트

화면을 업데이트하려면 pygame.display.flip()을 호출해야 합니다. 이렇게 하면 게임 화면이 실제로 그려지고, 객체의 위치 및 상태가 반영됩니다.

screen.fill((0, 0, 0)) # 검은색 배경 색상으로 화면 채우기
pygame.draw.rect(screen, paddle_color, paddle1_pos) # 패들 1 그리기
pygame.draw.rect(screen, paddle_color, paddle2_pos) # 패들 2 그리기
pygame.draw.circle(screen, ball_color, ball_pos.center, ball_radius) # 공 그리기

전체 코드

아래는 프로핑 게임의 전체 코드입니다.

import pygame
pygame.init()

# 게임 화면 설정
screen_width = 800
screen_height = 400
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Propping Game")

# 패들과 공 추가
paddle_width = 10
paddle_height = 60
paddle_color = (255, 255, 255) # 흰색

paddle1_pos = pygame.Rect(50, 0, paddle_width, paddle_height)
paddle2_pos = pygame.Rect(screen_width - 50 - paddle_width, 0, paddle_width, paddle_height)

ball_radius = 10
ball_color = (255, 0, 0) # 빨간색

ball_pos = pygame.Rect(screen_width // 2, screen_height // 2, ball_radius * 2, ball_radius * 2)

# 게임 루프
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    # 게임 로직 처리
    keys = pygame.key.get_pressed()
    if keys[pygame.K_w] and paddle1_pos.y > 0:
        paddle1_pos.y -= 5
    elif keys[pygame.K_s] and paddle1_pos.y < screen_height - paddle_height:
        paddle1_pos.y += 5

    if keys[pygame.K_UP] and paddle2_pos.y > 0:
        paddle2_pos.y -= 5
    elif keys[pygame.K_DOWN] and paddle2_pos.y < screen_height - paddle_height:
        paddle2_pos.y += 5

    # 화면 업데이트
    screen.fill((0, 0, 0)) # 검은색 배경 색상으로 화면 채우기
    pygame.draw.rect(screen, paddle_color, paddle1_pos) # 패들 1 그리기
    pygame.draw.rect(screen, paddle_color, paddle2_pos) # 패들 2 그리기
    pygame.draw.circle(screen, ball_color, ball_pos.center, ball_radius) # 공 그리기
    pygame.display.flip()

pygame.quit()

이제 위의 코드를 실행하면 Pygame을 사용하여 간단한 프로핑 게임을 즐길 수 있습니다.

참고 자료