소개
이 프로젝트에서는 Python 과 Pygame 라이브러리를 사용하여 퐁 게임을 만드는 방법을 배웁니다. 퐁은 플레이어가 패들을 제어하여 공을 서로 넘기는 고전적인 2 인용 아케이드 게임입니다.
이 프로젝트를 완료하려면 아래 단계를 따라야 합니다. 먼저 프로젝트 파일을 만들고 게임 창을 설정합니다. 그런 다음 색상을 정의하고 패들과 공을 설정합니다. 마지막으로 패들과 공을 움직이고, 충돌을 처리하며, 게임 요소를 그립니다.
👀 미리보기

🎯 과제
이 프로젝트에서 다음을 배우게 됩니다.
- 프로젝트 파일을 만드는 방법
- 게임 창을 설정하는 방법
- 패들과 공을 설정하는 방법
- 게임 변수를 설정하는 방법
- 게임 루프를 설정하는 방법
- 패들을 움직이는 방법
- 공을 움직이는 방법
- 공 충돌을 처리하는 방법
- 점수를 업데이트하고 공을 재설정하는 방법
- 파워업 충돌 및 움직임을 처리하는 방법
- 게임 요소를 그리는 방법
- 점수를 그리는 방법
- 디스플레이를 업데이트하는 방법
- 초당 프레임 수 (FPS, Frames Per Second) 를 설정하는 방법
- 게임을 종료하는 방법
🏆 성과
이 프로젝트를 완료하면 다음을 수행할 수 있습니다.
- Pygame 라이브러리를 사용하여 게임 창을 만들 수 있습니다.
- 패들과 공과 같은 게임 객체를 설정하고 움직일 수 있습니다.
- 게임 객체 간의 충돌을 처리할 수 있습니다.
- 게임 점수를 업데이트하고 표시할 수 있습니다.
- 게임의 초당 프레임 수 (FPS) 를 설정할 수 있습니다.
- 게임을 올바르게 종료할 수 있습니다.
프로젝트 파일 생성
선호하는 코드 편집기 또는 IDE 에서 pong_game.py라는 파일을 만듭니다. 이 파일은 퐁 게임의 코드를 작성하는 주 파일이 됩니다.
cd ~/project
touch pong_game.py
sudo pip install pygame
게임 창 설정
pong_game.py 파일 내에서 코드 시작 부분에 필요한 라이브러리를 가져옵니다.
import pygame
import random
그런 다음 pygame.init()를 호출하여 Pygame 을 초기화합니다.
## Initialize Pygame
pygame.init()
다음으로, 너비, 높이 및 초당 프레임 수 (FPS) 를 정의하여 게임 창을 설정합니다.
## Set up the game window
WIDTH = 800
HEIGHT = 400
FPS = 60
게임에 사용되는 색상을 정의합니다.
## Define colors
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
BLUE = (0, 0, 255)
ORANGE = (255, 165, 0)
BACKGROUND_COLOR = (50, 50, 50)
게임 창을 만들고, 창 제목을 설정하고, 프레임 속도를 제어하기 위한 시계 객체를 만듭니다.
## Set up the game window
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Pong Game")
clock = pygame.time.Clock()
패들과 공 설정
패들의 너비, 높이, 속도, 색상과 같은 속성을 정의합니다:
## Set up the paddles
PADDLE_WIDTH = 10
PADDLE_HEIGHT = 60
PADDLE_SPEED = 5
PADDLE_COLOR = WHITE
pygame.Rect() 생성자를 사용하여 두 개의 패들 객체를 생성하고 게임 창의 각 측면 중앙에 배치합니다:
paddle1 = pygame.Rect(0, HEIGHT / 2 - PADDLE_HEIGHT / 2, PADDLE_WIDTH, PADDLE_HEIGHT)
paddle2 = pygame.Rect(
WIDTH - PADDLE_WIDTH, HEIGHT / 2 - PADDLE_HEIGHT / 2, PADDLE_WIDTH, PADDLE_HEIGHT
)
공의 너비, 높이, 속도, 색상과 같은 속성을 설정합니다:
## Set up the ball
BALL_WIDTH = 10
BALL_HEIGHT = 10
BALL_SPEED_X = 3
BALL_SPEED_Y = 3
BALL_COLOR = WHITE
pygame.Rect() 생성자를 사용하여 공 객체를 생성하고 게임 창 중앙에 배치합니다:
ball = pygame.Rect(
WIDTH / 2 - BALL_WIDTH / 2, HEIGHT / 2 - BALL_HEIGHT / 2, BALL_WIDTH, BALL_HEIGHT
)
공의 초기 x 및 y 방향 속도를 무작위로 설정합니다:
ball_speed_x = BALL_SPEED_X * random.choice((1, -1))
ball_speed_y = BALL_SPEED_Y * random.choice((1, -1))
파워업의 너비, 높이, 속도, 색상과 같은 속성을 설정합니다:
## Set up the power-ups
POWERUP_WIDTH = 10
POWERUP_HEIGHT = 10
POWERUP_SPEED = 2
POWERUP_COLOR = ORANGE
powerup = pygame.Rect(
WIDTH / 2 - POWERUP_WIDTH / 2,
HEIGHT / 2 - POWERUP_HEIGHT / 2,
POWERUP_WIDTH,
POWERUP_HEIGHT,
)
powerup_speed_x = POWERUP_SPEED * random.choice((1, -1))
powerup_speed_y = POWERUP_SPEED * random.choice((1, -1))
powerup_active = False
게임 변수 설정
플레이어 점수를 추적하기 위한 변수를 설정하고, 게임 폰트 객체를 만들고, 점수 표시 색상을 정의합니다.
## Set up the game variables
score1 = 0
score2 = 0
game_font = pygame.font.SysFont(None, 48)
SCORE_COLOR = WHITE
게임 루프 설정
running이라는 부울 변수를 생성하고 게임 루프를 시작하기 위해 True로 설정합니다.
## Set up the game loop
running = True
while running:
게임 루프 내에서 발생한 이벤트를 반복하여 이벤트를 처리합니다.
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
패들 움직이기
게임 루프 내에서 키보드 입력을 확인하여 패들을 이동합니다.
## Move the paddles
keys = pygame.key.get_pressed()
if keys[pygame.K_w] and paddle1.y > 0:
paddle1.y -= PADDLE_SPEED
if keys[pygame.K_s] and paddle1.y < HEIGHT - PADDLE_HEIGHT:
paddle1.y += PADDLE_SPEED
if keys[pygame.K_UP] and paddle2.y > 0:
paddle2.y -= PADDLE_SPEED
if keys[pygame.K_DOWN] and paddle2.y < HEIGHT - PADDLE_HEIGHT:
paddle2.y += PADDLE_SPEED
공 움직이기
게임 루프 내에서 공의 위치를 업데이트합니다.
## Move the ball
ball.x += ball_speed_x
ball.y += ball_speed_y
공 충돌 처리
게임 루프 내에서 공이 패들과 벽에 충돌하는 것을 처리합니다.
## Ball collision with paddles
if ball.colliderect(paddle1) or ball.colliderect(paddle2):
ball_speed_x *= -1
## Ball collision with walls
if ball.y > HEIGHT - BALL_HEIGHT or ball.y < 0:
ball_speed_y *= -1
점수 업데이트 및 공 초기화
게임 루프 내에서 공이 패스를 지나갈 때 점수를 업데이트하고 공을 리셋합니다.
## Increase the score and reset the ball
if ball.x < 0:
score2 += 1
ball.center = (WIDTH / 2, HEIGHT / 2)
ball_speed_x *= random.choice((1, -1))
ball_speed_y *= random.choice((1, -1))
if ball.x > WIDTH:
score1 += 1
ball.center = (WIDTH / 2, HEIGHT / 2)
ball_speed_x *= random.choice((1, -1))
ball_speed_y *= random.choice((1, -1))
파워업 충돌 및 이동 처리
게임 루프 내에서 파워업이 패들과 충돌하는 것을 처리하고 파워업을 이동시킵니다.
## Power-up collision with paddles
if powerup.colliderect(paddle1) or powerup.colliderect(paddle2):
powerup_active = True
powerup.x = WIDTH / 2 - POWERUP_WIDTH / 2
powerup.y = HEIGHT / 2 - POWERUP_HEIGHT / 2
## Power-up movement
if powerup_active:
powerup.x += powerup_speed_x
powerup.y += powerup_speed_y
if powerup.x > WIDTH - POWERUP_WIDTH or powerup.x < 0:
powerup_speed_x *= -1
if powerup.y > HEIGHT - POWERUP_HEIGHT or powerup.y < 0:
powerup_speed_y *= -1
게임 요소 그리기
게임 루프 내에서 패들, 공, 파워업 및 점수를 게임 창에 그립니다.
## Draw the game elements
screen.fill(BACKGROUND_COLOR)
pygame.draw.rect(screen, PADDLE_COLOR, paddle1)
pygame.draw.rect(screen, PADDLE_COLOR, paddle2)
pygame.draw.ellipse(screen, BALL_COLOR, ball)
pygame.draw.rect(screen, POWERUP_COLOR, powerup)
점수 표시
게임 루프 내에서 게임 창 상단 중앙에 점수를 그립니다.
## Draw the score
score_text = game_font.render(f"{score1} : {score2}", True, SCORE_COLOR)
screen.blit(score_text, (WIDTH / 2 - score_text.get_width() / 2, 10))
화면 업데이트
게임 루프 내에서 변경 사항을 표시하기 위해 디스플레이를 업데이트합니다.
## Update the display
pygame.display.flip()
FPS 설정
게임 루프 내에서 게임 속도를 제어하기 위해 프레임 속도 (frame rate) 를 설정합니다.
## Set the FPS
clock.tick(FPS)
게임 종료
게임 루프가 끝난 후, 게임이 종료될 때 Pygame 을 종료하기 위해 다음 줄을 추가합니다.
## Quit the game
pygame.quit()
데스크톱으로 전환하여 다음 명령을 사용하여 프로젝트를 실행합니다.
python pong_game.py
이제 키보드의 화살표 키와 W 및 S 키를 사용하여 퐁 게임을 플레이할 수 있습니다.

요약
축하합니다! Python 과 Pygame 을 사용하여 퐁 게임을 만드는 단계별 프로젝트를 완료했습니다. 게임 창 설정, 패들 및 공의 속성 정의, 게임 이벤트 처리, 패들 및 공 이동, 충돌 처리, 게임 요소 그리기에 대해 배웠습니다. 게임에 자신만의 개선 사항을 추가하기 위해 다양한 수정 사항을 실험하고 즐겁게 플레이하세요!



