파이썬 python

라즈베리파이4를 이용해서 pygame 라이브러리 활용하기

smy383 2025. 3. 12. 08:57
728x90
반응형

 

라즈베리파이 4로 pygame 활용하기

Pygame으로 만드는 초간단 벽돌 깨기 게임 🕹️

안녕하세요, 라즈베리파이를 사랑하는 개발자 여러분! 오늘은 라즈베리파이 4의 강력한 성능을 활용하여, 추억 속 오락실 게임을 재현해 보는 시간을 가져보려고 합니다. 바로 Pygame 라이브러리를 이용하여 간단한 벽돌 깨기 게임을 만들어 볼 건데요!

"Pygame은 처음인데 너무 어렵지 않을까요?" 걱정 마세요! 쉽고 재미있는 예제를 통해 Pygame의 기본 개념을 익히고, 라즈베리파이 4에서 나만의 게임을 만들 수 있도록 친절하게 안내해 드릴게요.

1. Pygame이란 무엇일까요? 🎮

Pygame은 파이썬으로 2D 게임을 개발할 수 있도록 도와주는 강력한 라이브러리입니다. 그래픽 처리, 사운드 재생, 사용자 입력 처리 등 게임 개발에 필요한 다양한 기능을 제공하며, 배우기 쉽고 사용하기 간편하여 초보자도 쉽게 게임을 만들 수 있습니다.

Pygame의 장점:

  • 간편한 사용법: 파이썬 기반으로 작성되어 문법이 쉽고 코드를 이해하기 쉽습니다.
  • 다양한 기능: 그래픽, 사운드, 입력 처리 등 게임 개발에 필요한 다양한 기능을 제공합니다.
  • 크로스 플랫폼: Windows, macOS, Linux 등 다양한 운영체제에서 실행 가능합니다.
  • 활발한 커뮤니티: Pygame 관련 자료와 정보를 쉽게 찾을 수 있으며, 커뮤니티의 도움을 받을 수 있습니다.

2. 개발 환경 설정 

먼저 라즈베리파이 4에 Pygame 라이브러리를 설치해야 합니다. 터미널을 열고 다음 명령어를 입력하세요.

sudo apt update
sudo apt install python3-pygame

3. 벽돌 깨기 게임 만들기 🧱

이제 본격적으로 벽돌 깨기 게임 코드를 작성해 보겠습니다. 아래 코드를 복사하여 breakout.py라는 이름으로 저장해주세요.


import pygame
import random

# 게임 상수
WIDTH = 800
HEIGHT = 600
FPS = 60
PADDLE_WIDTH = 80
PADDLE_HEIGHT = 15
BALL_SIZE = 15
BRICK_WIDTH = 70
BRICK_HEIGHT = 20
BRICK_ROWS = 5
BRICK_COLS = 10

# 색상 정의
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
BLUE = (0, 0, 255)

# 게임 초기화
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Pygame Breakout")
clock = pygame.time.Clock()

# 패들 클래스
class Paddle(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.Surface([PADDLE_WIDTH, PADDLE_HEIGHT])
        self.image.fill(BLUE)
        self.rect = self.image.get_rect()
        self.rect.x = WIDTH // 2 - PADDLE_WIDTH // 2
        self.rect.bottom = HEIGHT - 20
        self.speed = 8

    def update(self):
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT] and self.rect.left > 0:
            self.rect.x -= self.speed
        if keys[pygame.K_RIGHT] and self.rect.right < WIDTH:
            self.rect.x += self.speed

# 공 클래스
class Ball(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.Surface([BALL_SIZE, BALL_SIZE])
        self.image.fill(WHITE)
        self.rect = self.image.get_rect()
        self.rect.center = (WIDTH // 2, HEIGHT // 2)
        self.speed_x = 5 * random.choice([-1, 1])
        self.speed_y = -5

    def update(self):
        self.rect.x += self.speed_x
        self.rect.y += self.speed_y

        # 벽 충돌 처리
        if self.rect.left < 0 or self.rect.right > WIDTH:
            self.speed_x *= -1
        if self.rect.top < 0:
            self.speed_y *= -1

# 벽돌 클래스
class Brick(pygame.sprite.Sprite):
    def __init__(self, x, y):
        super().__init__()
        self.image = pygame.Surface([BRICK_WIDTH, BRICK_HEIGHT])
        self.image.fill(RED)
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y

# 스프라이트 그룹 생성
all_sprites = pygame.sprite.Group()
bricks = pygame.sprite.Group()

# 패들 생성
paddle = Paddle()
all_sprites.add(paddle)

# 공 생성
ball = Ball()
all_sprites.add(ball)

# 벽돌 생성
for row in range(BRICK_ROWS):
    for col in range(BRICK_COLS):
        brick = Brick(col * (BRICK_WIDTH + 5) + 5, row * (BRICK_HEIGHT + 5) + 5)
        all_sprites.add(brick)
        bricks.add(brick)

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

    # 업데이트
    all_sprites.update()

    # 공-패들 충돌 처리
    if pygame.sprite.collide_rect(ball, paddle):
        ball.speed_y *= -1
        ball.rect.bottom = paddle.rect.top

    # 공-벽돌 충돌 처리
    brick_hit_list = pygame.sprite.spritecollide(ball, bricks, True)
    for brick in brick_hit_list:
        ball.speed_y *= -1

    # 모든 벽돌이 파괴되면 게임 종료
    if len(bricks) == 0:
        running = False

    # 공이 바닥에 닿으면 게임 종료
    if ball.rect.bottom > HEIGHT:
        running = False

    # 화면 그리기
    screen.fill(BLACK)
    all_sprites.draw(screen)

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

    # FPS 설정
    clock.tick(FPS)

# 게임 종료
pygame.quit()

코드 설명:

  • import pygame: Pygame 라이브러리를 가져옵니다.
  • # 게임 상수: 게임 화면 크기, FPS, 패들 크기, 공 크기, 벽돌 크기 등 게임에 필요한 상수들을 정의합니다.
  • # 색상 정의: 게임에 사용될 색상들을 RGB 값으로 정의합니다.
  • # 게임 초기화: Pygame을 초기화하고, 게임 화면을 생성하고, 제목을 설정하고, FPS를 설정합니다.
  • Paddle 클래스: 패들을 나타내는 클래스입니다. 패들의 이미지, 위치, 속도를 정의하고, 키보드 입력을 받아 패들을 움직이는 기능을 구현합니다.
  • Ball 클래스: 공을 나타내는 클래스입니다. 공의 이미지, 위치, 속도를 정의하고, 벽과 충돌했을 때 튕겨나오는 기능을 구현합니다.
  • Brick 클래스: 벽돌을 나타내는 클래스입니다. 벽돌의 이미지, 위치를 정의합니다.
  • # 스프라이트 그룹 생성: 게임에 등장하는 모든 객체들을 스프라이트 그룹으로 관리합니다.
  • # 패들 생성: 패들 객체를 생성하고, 스프라이트 그룹에 추가합니다.
  • # 공 생성: 공 객체를 생성하고, 스프라이트 그룹에 추가합니다.
  • # 벽돌 생성: 벽돌 객체들을 생성하고, 스프라이트 그룹에 추가합니다.
  • # 게임 루프: 게임이 실행되는 동안 계속 반복되는 루프입니다.
    • # 이벤트 처리: 키보드 입력, 마우스 클릭 등 사용자 입력을 처리합니다.
    • # 업데이트: 게임 객체들의 상태를 업데이트합니다.
    • # 공-패들 충돌 처리: 공과 패들이 충돌했는지 확인하고, 충돌했다면 공의 방향을 바꿉니다.
    • # 공-벽돌 충돌 처리: 공과 벽돌이 충돌했는지 확인하고, 충돌했다면 공의 방향을 바꾸고 해당 벽돌을 제거합니다.
    • # 모든 벽돌이 파괴되면 게임 종료: 모든 벽돌이 파괴되면 게임을 종료합니다.
    • # 공이 바닥에 닿으면 게임 종료: 공이 바닥에 닿으면 게임을 종료합니다.
    • # 화면 그리기: 게임 화면을 그립니다.
    • # 화면 업데이트: 화면을 업데이트합니다.
    • # FPS 설정: FPS를 설정하여 게임 속도를 일정하게 유지합니다.
  • # 게임 종료: Pygame을 종료합니다.

4. 게임 실행 

터미널에서 다음 명령어를 입력하여 파이썬 코드를 실행합니다.

python3 breakout.py

정상적으로 실행되면 벽돌 깨기 게임 창이 나타날 것입니다! 화살표 키를 사용하여 패들을 움직이고, 공을 튕겨 벽돌을 깨 보세요!

5. 추가 기능 덧붙이기 

팁: 게임에 재미를 더할 수 있는 몇 가지 추가 기능 아이디어를 소개합니다.

  • 점수 시스템: 벽돌을 깰 때마다 점수를 획득하고, 점수를 화면에 표시하는 기능을 추가해 보세요.
  • 레벨 디자인: 다양한 모양과 색상의 벽돌을 배치하여 레벨을 디자인해 보세요.
  • 파워업 아이템: 공 속도 증가, 패들 크기 증가 등 다양한 파워업 아이템을 추가하여 게임의 재미를 더해보세요.
  • 사운드 효과: 공이 벽돌이나 패들에 부딪힐 때 효과음을 재생하여 게임의 생동감을 높여보세요.

마무리 

이번 튜토리얼에서는 Pygame 라이브러리를 이용하여 간단한 벽돌 깨기 게임을 만들어 보았습니다. Pygame은 배우기 쉽고 사용하기 간편하여 초보자도 쉽게 게임을 만들 수 있습니다. 오늘 소개한 내용을 바탕으로 자신만의 독창적인 게임을 만들어보고, 게임 개발 실력을 향상시켜 보세요!

728x90
반응형