본문 바로가기
  • NerdCodX Blog
파이썬(Python)

Python Day 24: 2048 게임 종료 조건 처리 - 게임 오버 구현하기

by NerdCodeX 2025. 3. 8.

 

1. 2048 게임 종료 조건 개요

 

안녕하세요! 이번 강의에서는 2048 게임의 종료 조건을 처리하는 방법을 배워보겠습니다. 현재까지 숫자 이동, 점수 시스템 및 UI를 구현했지만, 게임 종료 기능이 없으면 끝없이 진행될 수 있습니다. 이번 강의에서는 이동 가능한 타일이 없을 때 게임을 종료하고, "Game Over" 메시지를 출력하는 기능을 추가하겠습니다.


2. 이동 가능한 타일이 없을 경우 종료

게임이 종료되는 조건

빈 공간(0)이 없고,
모든 타일이 인접한 동일 숫자와 합쳐질 수 없는 경우

 

이동 가능 여부 확인 함수 예제 1: 빈 공간 여부 확인

def is_grid_full(grid):
    for row in grid:
        if 0 in row:
            return False  # 빈 공간이 있으면 아직 게임 종료가 아님
    return True

 

예제 2: 합칠 수 있는 숫자가 있는지 확인

def can_merge(grid):
    for r in range(4):
        for c in range(3):  # 가로 체크
            if grid[r][c] == grid[r][c + 1]:
                return True
    
    for c in range(4):
        for r in range(3):  # 세로 체크
            if grid[r][c] == grid[r + 1][c]:
                return True
    
    return False  # 합칠 수 있는 숫자가 없다면 False 반환

 

예제 3: 게임 종료 확인 함수

def check_game_over(grid):
    if is_grid_full(grid) and not can_merge(grid):
        return True  # 이동 가능한 타일이 없다면 게임 종료
    return False

3. "Game Over" 메시지 출력

게임 종료 시 메시지 표시하기 예제 4: PyGame을 활용한 "Game Over" 메시지 표시

import pygame

def draw_game_over(screen):
    font = pygame.font.Font(None, 50)
    text_surface = font.render("Game Over", True, (255, 0, 0))
    text_rect = text_surface.get_rect(center=(200, 200))
    screen.blit(text_surface, text_rect)
    pygame.display.update()

 


4. 실습: 게임 종료 로직 구현

문제 설명

  • 게임 루프에서 이동 가능 여부를 확인하여 게임 종료 시 메시지를 출력하세요.

코드

running = True
while running:
    screen.fill((255, 255, 255))
    draw_score(screen, score)
    draw_grid(screen, grid)
    
    if check_game_over(grid):
        draw_game_over(screen)
        pygame.time.delay(2000)  # 2초 대기 후 종료
        running = False
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    pygame.display.update()

pygame.quit()

 

출력 예시

  • 이동할 수 있는 타일이 없으면 "Game Over" 메시지가 화면에 표시됨.

5. 실습 과제

1. 게임 종료 후 다시 시작 기능 추가

  • R 키를 누르면 새로운 게임이 시작되도록 기능을 추가하세요.
if event.type == pygame.KEYDOWN and event.key == pygame.K_r:
    grid = initialize_game()
    score = 0

2. 최고 점수 표시 기능 추가

  • 최고 점수를 저장하고, 게임이 종료된 후 이를 화면에 표시하세요.

3. "You Win" 메시지 추가

  • 숫자 2048을 만들면 "You Win!" 메시지를 표시하고, 계속 진행할지 묻는 기능을 추가하세요.

 

오늘 강의에서는 2048 게임의 종료 조건을 구현하며, 이동할 수 있는 타일이 없을 경우 게임이 종료되고 "Game Over" 메시지가 출력되는 기능을 추가했습니다. 이를 통해 게임의 시작과 끝이 명확해졌으며, 실제 게임과 같은 완성도를 갖추게 되었습니다.

이제 2048 게임은 기본적인 플레이 기능과 UI를 갖춘 상태이며, 앞으로는 게임 최적화 및 추가 기능을 구현하여 더욱 완성도 높은 프로젝트로 발전시킬 예정입니다. 이번 실습을 통해 게임 상태를 체크하고, 조건에 따라 특정 이벤트를 발생시키는 방법을 익혔다면, 다른 게임 개발에도 활용할 수 있을 것입니다.

다음 강의에서는 "다시 시작" 버튼을 추가하고, PyGame 화면을 최적화하여 더욱 부드러운 게임 플레이 환경을 만들어 보겠습니다.

 

🚀 궁금한 점이나 피드백이 있다면 댓글로 남겨주세요. 여러분의 학습을 응원합니다! 😊