78  플래피 버드 (Flappy Bird)

가장 단순하지만 구현하기에는 어려운 게임 중 하나인 플래피 버드(Flappy Bird)를 직접 만들어 봅시다. 파이프 사이를 통과하며 고득점을 목표로 하는 이 게임은 물리 시뮬레이션과 충돌 감지를 익히기에 아주 좋은 프로젝트입니다.

새의 이미지를 직접 그리거나 이미지를 활용하여 나만의 새를 디자인해 보세요. 파이프의 간격이나 속도를 조절하여 난이도를 설정하고, 전 세계적으로 유행했던 게임의 메커니즘을 완벽하게 이해하는 것을 목표로 합니다.

78.1 주요 개발 포인트

  • 물리 시뮬레이션: 중력과 점프를 구현하여 새가 자유낙하하거나 날아오르는 동작을 만듭니다.
  • 파이프 생성 및 이동: 화면 끝에서 무작위 높이로 생성된 파이프가 왼쪽으로 계속 이동하도록 합니다.
  • 충돌 감지 (Collision Detection): 새가 파이프나 바닥에 닿았을 때 게임 오버 처리를 수행합니다.
  • 점수 시스템: 파이프를 무사히 통과할 때마다 점수를 올리고 최고 기록을 저장합니다.
  • 그래픽과 애니메이션: 새의 날개짓 애니메이션과 배경 스크롤 효과를 추가합니다.

78.2 Python 구현 예시 (Pygame을 활용한 간단한 물리 루프)

import pygame
import sys

# Pygame 초기화
pygame.init()
SCREEN_WIDTH = 400
SCREEN_HEIGHT = 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
clock = pygame.time.Clock()

# 게임 설정
GRAVITY = 0.25
BIRD_JUMP = -7
bird_y = SCREEN_HEIGHT // 2
bird_velocity = 0

def run_flappy_bird_sim():
    """
    플래피 버드의 물리 작용을 시뮬레이션하는 루프입니다.
    """
    global bird_y, bird_velocity
    print("게임을 시작합니다. 화면을 클릭하거나 키를 눌러 점프하세요.")

    running = True
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type == pygame.KEYDOWN or event.type == pygame.MOUSEBUTTONDOWN:
                bird_velocity = BIRD_JUMP # 점프 시 속도 초기화

        # 중력 적용
        bird_velocity += GRAVITY
        bird_y += bird_velocity
        
        # 화면 그리기
        screen.fill((135, 206, 235)) # 하늘색 배경
        pygame.draw.circle(screen, (255, 255, 0), (50, int(bird_y)), 15) # 새 (노란색 원)
        
        # 바닥이나 천장에 닿으면 종료
        if bird_y > SCREEN_HEIGHT or bird_y < 0:
            print("게임 오버!")
            running = False
            
        pygame.display.flip()
        clock.tick(60) # 60 FPS

if __name__ == "__main__":
    # Pygame이 설치된 환경에서만 실행 가능합니다.
    # run_flappy_bird_sim()
    print("실제 구현 시 Pygame 설치가 필요합니다.")