[파이썬] 도로 탈출 레이싱 게임

2026. 2. 3. 14:37IT

반응형

이 게임은 파이썬의 Pygame 라이브러리를 사용하여 제작되었습니다. 플레이어는 도로 위에서 몰려오는 장애물(다른 차량)을 피해 최대한 오래 버티며 점수를 쌓아야 합니다. 속도가 점점 빨라지기 때문에 갈수록 긴장감이 고조되는 흥미진진한 구성을 가지고 있습니다.

1. 게임 실행을 위한 사전 준비
이 코드를 실행하려면 파이썬이 설치되어 있어야 하며, pygame 라이브러리가 필요합니다. 터미널(또는 CMD)에서 아래 명령어를 입력하여 설치하세요.

pip install pygame

2. 레이싱 게임 전체 소스 코드
아래 코드를 복사하여 .py 파일로 저장한 뒤 실행하세요. 별도의 이미지 파일 없이도 바로 작동하도록 기본 도형으로 구현되었습니다.

Python
import pygame
import random
import sys

# 초기화
pygame.init()

# 화면 설정
SCREEN_WIDTH = 400
SCREEN_HEIGHT = 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("분노의 질주: 도로 탈출")

# 색상 정의
WHITE = (255, 255, 255)
GRAY = (50, 50, 50)
RED = (200, 0, 0)
BLUE = (0, 0, 200)
YELLOW = (255, 255, 0)

# 게임 변수
FPS = 60
clock = pygame.time.Clock()

player_width = 40
player_height = 70
player_x = (SCREEN_WIDTH // 2) - (player_width // 2)
player_y = SCREEN_HEIGHT - 100
player_speed = 7

obstacle_width = 40
obstacle_height = 70
obstacle_x = random.randint(50, SCREEN_WIDTH - 90)
obstacle_y = -100
obstacle_speed = 5

score = 0
font = pygame.font.SysFont("malgungothic", 25)

def draw_player(x, y):
    # 플레이어 차량 (파란색)
    pygame.draw.rect(screen, BLUE, [x, y, player_width, player_height])
    pygame.draw.rect(screen, WHITE, [x + 5, y + 10, 30, 15]) # 앞유리

def draw_obstacle(x, y):
    # 장애물 차량 (빨간색)
    pygame.draw.rect(screen, RED, [x, y, obstacle_width, obstacle_height])
    pygame.draw.rect(screen, WHITE, [x + 5, y + 45, 30, 15]) # 뒷유리

def show_score(s):
    value = font.render("Score: " + str(s), True, YELLOW)
    screen.blit(value, [10, 10])

def game_loop():
    global player_x, obstacle_y, obstacle_x, obstacle_speed, score
    
    running = True
    while running:
        screen.fill(GRAY)
        
        # 도로 중앙선 그리기 (움직이는 효과)
        for i in range(0, SCREEN_HEIGHT, 40):
            pygame.draw.rect(screen, WHITE, [(SCREEN_WIDTH // 2) - 5, (i + (score * 5)) % SCREEN_HEIGHT, 10, 20])

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

        # 키 입력 제어
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT] and player_x > 0:
            player_x -= player_speed
        if keys[pygame.K_RIGHT] and player_x < SCREEN_WIDTH - player_width:
            player_x += player_speed

        # 장애물 이동
        obstacle_y += obstacle_speed
        if obstacle_y > SCREEN_HEIGHT:
            obstacle_y = -obstacle_height
            obstacle_x = random.randint(50, SCREEN_WIDTH - 90)
            score += 1
            # 난이도 상승: 5점마다 속도 증가
            if score % 5 == 0:
                obstacle_speed += 1

        # 충돌 감지
        if player_y < obstacle_y + obstacle_height:
            if (player_x > obstacle_x and player_x < obstacle_x + obstacle_width) or \
               (player_x + player_width > obstacle_x and player_x + player_width < obstacle_x + obstacle_width):
                running = False

        draw_player(player_x, player_y)
        draw_obstacle(obstacle_x, obstacle_y)
        show_score(score)

        pygame.display.update()
        clock.tick(FPS)

    # 게임 오버 화면
    screen.fill((0, 0, 0))
    over_text = font.render("GAME OVER! Score: " + str(score), True, WHITE)
    retry_text = font.render("Press R to Restart", True, WHITE)
    screen.blit(over_text, [SCREEN_WIDTH // 6, SCREEN_HEIGHT // 2])
    screen.blit(retry_text, [SCREEN_WIDTH // 5, SCREEN_HEIGHT // 2 + 40])
    pygame.display.update()

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_r:
                    # 초기화 후 재시작
                    player_x = (SCREEN_WIDTH // 2) - (player_width // 2)
                    obstacle_y = -100
                    obstacle_speed = 5
                    score = 0
                    game_loop()

game_loop()
3. 게임의 특징 및 재미 요소
점진적 난이도: 장애물을 피할 때마다 점수가 올라가며, 5점 단위로 장애물의 하강 속도가 빨라집니다. 초반에는 여유롭지만 시간이 지날수록 순발력을 요구합니다.

무한 루프: 충돌 시 게임 오버 화면이 나타나며, 'R' 키를 눌러 즉시 재도전할 수 있어 몰입감을 높였습니다.

동적인 배경: 중앙선이 스코어에 맞춰 움직이도록 설계되어 있어, 실제로 빠른 속도로 도로를 질주하는 듯한 시각적 효과를 줍니다.

4. 게임 조작 방법
왼쪽 방향키: 왼쪽으로 이동

오른쪽 방향키: 오른쪽으로 이동

R 키: 게임 오버 후 재시작

#자동차게임 #파이썬게임 #게임만들기 #Pygame #코딩기초 #레이싱게임 #코딩독학 #프로그래밍 #재미있는게임

반응형