파이썬 프로그램

게임 개발을 통한 파이썬(Python) 학습: 간단한 벽돌 깨기 게임 만들기

슈가가족 2023. 7. 8. 10:01

파이썬(Python)으로 벽돌깨기 게임 만들기(기초편)

비디오 게임을 만드는 것은 프로그래밍 언어를 배우는 재미있고 효과적인 방법입니다. 이 블로그 포스트에서는 Python을 사용하여 고전 아케이드 게임인 브레이크아웃의 간단한 버전을 만들 것입니다. 게임 개발을 위해 설계된 Python 모듈의 집합인 Pygame을 사용하게 됩니다. 함께 시작해 봅시다!

 

Pygame 설정

Pygame은 비디오 게임을 쉽게 만들 수 있게 해주는 Python 모듈의 집합입니다. 우리는 먼저 Pygame과 몇 가지 필수 컴포넌트를 가져옵니다. 모듈을 가져온 후에는 pygame.init() 함수를 사용하여 Pygame을 초기화합니다.

게임 화면 구축

pygame.display.set_mode()를 사용하여 800x600 픽셀 크기의 게임 화면을 만듭니다. 이것이 우리의 게임 캔버스로, 패들, 공, 벽돌과 같은 게임 요소를 그릴 공간입니다.

패들과 공 생성

우리의 브레이크아웃 게임은 움직이는 패들과 공으로 구성됩니다. 이러한 엔티티들은 PygameRect 객체로 표현됩니다. 패들은 화면 하단에, 공은 중앙에 위치시킵니다.

벽돌 생성

화면 상단에 위치한 여러 벽돌 객체를 만듭니다. 각 벽돌은 Rect 객체이며, 쉽게 관리하기 위해 리스트에 저장합니다.

텍스트 표시

화면에 텍스트를 표시하기 위해 draw_text 함수를 정의합니다. 이 함수는 게임이 끝났을 때 "GAME OVER""VICTORY" 메시지를 표시하는 데 사용됩니다.

게임 오버와 승리 처리

game_over와 victory 함수는 게임 종료를 처리합니다. 공이 패들 아래로 떨어지면 플레이어는 게임에서 패배하고 "GAME OVER"가 표시됩니다. 모든 벽돌이 맞아서 제거되면 플레이어가 이기고 "VICTORY!"가 표시됩니다.

게임 루프

이것이 우리 게임의 핵심입니다. 이것은 이벤트 처리, 게임 상태 업데이트, 승/패 조건 확인, 게임 요소를 화면에 그리는 등 모든 마법이 일어나는 무한 루프입니다.

이벤트 처리

우리의 게임 루프에서는 먼저 게임 종료와 같은 이벤트를 처리합니다. 그런 다음 사용자의 왼쪽 또는 오른쪽 키 누름에 따라 패들의 움직임을 처리합니다.

게임 상태 업데이트

우리는 공의 위치를 업데이트하고 게임 화면의 테두리, 패들, 벽돌과의 충돌을 처리합니다. 충돌 시 공의 방향을 변경하고, 벽돌이 맞을 경우 벽돌 리스트에서 제거합니다.

게임 요소 그리기

마지막으로, 패들, 공, 남은 벽돌을 포함한 게임의 모든 요소를 화면에 그립니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import pygame
import sys
from pygame.locals import *
 
# Initialize Pygame
pygame.init()
 
# Game screen settings
screen = pygame.display.set_mode((800,600))
 
# Paddle settings
paddle = pygame.Rect(400500,6010)
 
# set the ball
ball = pygame.Rect(4003001010)
ball_dx = 1
ball_dy = 1
 
# brick settings
bricks = [pygame.Rect(50 + 100*i, 50 + 20*j, 8010for i in range(7for j in range(3)]
 
def draw_text(text, size, x, y):
    font = pygame.font.Font(None, size)
    text_surface = font.render(text, True, (255255255))
    text_rect = text_surface.get_rect()
    text_rect.midtop = (x, y)
    screen.blit(text_surface, text_rect)
 
def game_over():
    draw_text("GAME OVER"48, screen.get_width() / 2, screen.get_height() / 2)
    pygame.display.flip()
    pygame.time.wait(3000)
    pygame.quit()
    sys.exit()
 
def victory():
    draw_text("VICTORY!"48, screen.get_width() / 2, screen.get_height() / 2)
    pygame.display.flip()
    pygame.time.wait(3000)
    pygame.quit()
    sys.exit()
 
# game loop
while True:
    # event handling
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys. exit()
 
    # paddle movement
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and paddle.left > 0:
        paddle.left -= 2
    if keys[pygame.K_RIGHT] and paddle.right < 800:
        paddle. right += 2
 
    # move the ball
    ball.left += ball_dx
    ball.top += ball_dy
 
    # Border and ball collide
    if ball.left <= 0 or ball.right >= 800:
        ball_dx *= -1
    if ball.top <= 0:
        ball_dy *= -1
 
    # If the ball is below the paddle, game over
    if ball.top >= paddle.bottom:
        game_over()
 
    # Collision with paddle and ball
    if ball.colliderect(paddle):
        ball_dy *= -1
 
    # Collision with bricks and balls
    hit_index = ball.collidelist(bricks)
    if hit_index != -1:
        hit_brick = bricks.pop(hit_index)
        ball_dy *= -1
 
    # Check for victory
    if len(bricks) == 0:
        victory()
 
    # Draw the screen
    screen. fill((000))
    pygame.draw.rect(screen, (255255255), paddle)
    pygame.draw.rect(screen, (255255255), ball)
    for brick in bricks:
        pygame.draw.rect(screen, (25500), brick)
 
    # screen update
    pygame.display.flip()
 
    # Set frame rate
    pygame.time.delay(10)
 
cs

 

결론

이렇게 해서 Python으로 처음부터 만든 기본적인 브레이크아웃 게임이 완성되었습니다! 이것은 재미있는 프로젝트일 뿐만 아니라, 핵심 프로그래밍 개념을 이해하는 데 훌륭한 방법입니다. 우리는 게임 루프, 이벤트, 충돌 감지 등을 다루었습니다. 계속 실험하고 행복한 코딩을 계속하십시오!

이 코드에 대한 팁:

패들과 공의 속도는 게임 루프에서 증가/감소 값들을 변경함으로써 조정할 수 있습니다.

공의 속도를 다양하게 하거나 여러 번 맞아야 사라지는 벽돌을 만들어 게임에 더 복잡성을 추가할 수 있습니다.

또한 Pygame의 기능을 사용하여 색상, 배경 이미지, 소리를 추가하여 시각적 효과를 개선할 수 있습니다.