데이터 분석가

파이썬 breakout game 프로젝트(Udemy Final Project 5) 본문

유데미 부트캠프 프로젝트(Final)

파이썬 breakout game 프로젝트(Udemy Final Project 5)

PlintAn 2023. 6. 26. 13:00

안녕하세요 !

 

 

 

이번 시간에는 스티븐 잡스가 만들었던 breakout 이라는 게임을 파이썬 버전으로 만들어 보겠습니다

 

breakout 게임이란 이미 제 블로그에 있던 게임이기도 한데요, 이번에는 1:1 게임이 아닌

 

모든 벽돌을 제거해나가는 방식의 게임을 만들어 보겠습니다 !

 

 

 

import pygame
import sys

# 게임 상수
SCREEN_WIDTH, SCREEN_HEIGHT = 800, 600  # 화면 너비, 화면 높이
BALL_RADIUS = 10  # 공의 반지름
PADDLE_WIDTH, PADDLE_HEIGHT = 75, 15  # 패들의 너비, 패들의 높이
BRICK_WIDTH, BRICK_HEIGHT = 60, 15  # 벽돌의 너비, 벽돌의 높이
NUM_BRICKS_PER_ROW = 14  # 한 행당 벽돌 수
NUM_BRICK_ROWS = 6  # 벽돌 행 수
BALL_SPEED = 1  # 공의 속도
PADDLE_SPEED = 2  # 패들의 속도

# 색상
WHITE = (255, 255, 255)  # 흰색
BLUE = (0, 0, 255)  # 파란색

# Pygame 초기화
pygame.init()

# 디스플레이 설정
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

# 애셋 설정
ball = pygame.Rect(SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2, BALL_RADIUS, BALL_RADIUS)  # 공
paddle = pygame.Rect((SCREEN_WIDTH - PADDLE_WIDTH) // 2, SCREEN_HEIGHT - PADDLE_HEIGHT - 10, PADDLE_WIDTH, PADDLE_HEIGHT)  # 패들

bricks = []  # 벽돌
for i in range(NUM_BRICK_ROWS):
    for j in range(NUM_BRICKS_PER_ROW):
        brick = pygame.Rect(j * (BRICK_WIDTH + 5), i * (BRICK_HEIGHT + 5), BRICK_WIDTH, BRICK_HEIGHT)
        bricks.append(brick)

# 공의 방향
ball_dx = BALL_SPEED
ball_dy = -BALL_SPEED

# 게임 루프
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  # 게임 종료
            pygame.quit()
            sys.exit()

    # 공의 움직임
    ball.left += ball_dx
    ball.top += ball_dy

    # 공이 벽에 부딪힘
    if ball.left <= 0 or ball.right >= SCREEN_WIDTH:
        ball_dx *= -1
    if ball.top <= 0:
        ball_dy *= -1
    if ball.bottom >= SCREEN_HEIGHT:  # 게임 오버
        print("게임 오버!")
        pygame.quit()
        sys.exit()

    # 공이 패들에 부딪힘
    if ball.colliderect(paddle):
        ball_dy *= -1

    # 공이 벽돌에 부딪힘
    for brick in bricks:
        if ball.colliderect(brick):
            ball_dy *= -1
            bricks.remove(brick)
            break

    # 패들의 움직임
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and paddle.left > 0:  # 패들이 왼쪽으로 움직임
        paddle.left -= PADDLE_SPEED
    if keys[pygame.K_RIGHT] and paddle.right < SCREEN_WIDTH:
        paddle.left += PADDLE_SPEED

    # 스크린
    screen.fill((0, 0, 0))

    # 볼 그리기
    pygame.draw.ellipse(screen, WHITE, ball)

    # 패들 그리기
    pygame.draw.rect(screen, WHITE, paddle)

    # Draw bricks
    for brick in bricks:
        pygame.draw.rect(screen, BLUE, brick)

    pygame.display.flip()

다음과 같이 코드를 짤 수 있습니다 !

 

이전 days 22에서 만들었던 1:1 대전으로 만들었던 ball, paddle 방식과는 다르게

 

쌓여있는 블록들을 제거해나가는 게임입니다 !

 

와 잘 됩니다 !

 

잡스가 만들었던 breackout 게임을 저도 만들어볼 수 있는 시간이었습니다 !

 

 

Comments