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

Python Day 23: 2048 점수 시스템 추가 - 점수 계산 및 화면 출력

by NerdCodeX 2025. 3. 6.

 

1. 2048 점수 시스템 개요

 

안녕하세요! 오늘은 2048 게임에 점수 시스템을 추가하는 방법을 배워보겠습니다. 지금까지 우리는 게임판을 설계하고, 숫자 이동 및 UI를 구현했는데요. 이번 강의에서는 점수를 계산하는 로직을 설계하고, 이를 화면에 표시하는 기능을 추가할 것입니다. 이를 통해 더욱 완성도 높은 2048 게임을 만들 수 있습니다.


2. 점수 계산 로직 설계

2048 점수 계산 방식

같은 숫자가 합쳐질 때 해당 숫자의 합만큼 점수를 증가시킵니다.
예를 들어, 4 + 4 = 8이 되면 8점 추가.
점수는 게임이 진행됨에 따라 지속적으로 누적됩니다.

 

예제 1: 점수 계산 함수 구현

def merge(row, score):
    for i in range(3):
        if row[i] == row[i + 1] and row[i] != 0:
            row[i] *= 2
            score += row[i]  # 점수 추가
            row[i + 1] = 0  # 합쳐진 후 오른쪽 숫자 제거
    return row, score

점수를 저장하고 관리하기

점수를 저장하고 관리하기 위해 전역 변수 또는 클래스 변수를 활용할 수 있습니다.

 

예제 2: 점수 변수 추가

score = 0  # 전역 변수로 점수 관리

def move_left(grid, score):
    new_grid = []
    for row in grid:
        compressed_row = compress(row)
        merged_row, score = merge(compressed_row, score)
        final_row = compress(merged_row)
        new_grid.append(final_row)
    return new_grid, score

3. 실습: 점수 화면 출력 구현

문제 설명

  • PyGame을 활용하여 점수를 화면에 표시하는 기능을 추가하세요.

코드

import pygame

# PyGame 초기화
pygame.init()

# 화면 설정
WIDTH, HEIGHT = 400, 500  # 점수 표시를 위해 높이 증가
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("2048 Game with Score")

# 색상 및 폰트 설정
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
FONT = pygame.font.Font(None, 40)

score = 0  # 점수 초기화

def draw_score(screen, score):
    score_text = FONT.render(f"Score: {score}", True, BLACK)
    screen.blit(score_text, (10, 10))

def draw_grid(screen, grid):
    TILE_SIZE = 100
    PADDING = 10
    for r in range(4):
        for c in range(4):
            value = grid[r][c]
            color = get_tile_color(value)
            font_color = get_font_color(value)
            pygame.draw.rect(screen, color, (c * TILE_SIZE, r * TILE_SIZE + 50, TILE_SIZE - PADDING, TILE_SIZE - PADDING))
            if value != 0:
                text_surface = FONT.render(str(value), True, font_color)
                text_rect = text_surface.get_rect(center=(c * TILE_SIZE + TILE_SIZE // 2, r * TILE_SIZE + 50 + TILE_SIZE // 2))
                screen.blit(text_surface, text_rect)

 

게임 루프에서 점수 출력 추가

running = True
while running:
    screen.fill(WHITE)
    draw_score(screen, score)  # 점수 표시
    draw_grid(screen, grid)  # 게임판 표시
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    pygame.display.update()

pygame.quit()

 

출력 예시

  • 게임 실행 후 화면 상단에 현재 점수가 실시간으로 표시됨.

4. 실습 과제

1. 최고 점수 저장 기능 추가

  • 게임 실행 시 이전 최고 점수를 불러오고 갱신하는 기능을 구현하세요.
high_score = 0
if score > high_score:
    high_score = score

2. 점수 애니메이션 추가

  • 점수가 올라갈 때 부드러운 애니메이션 효과를 추가해 보세요.
pygame.time.delay(100)

3. 점수판 디자인 개선

  • 점수판을 사각형 박스로 감싸고, 좀 더 보기 좋게 디자인하세요.

 

 

오늘 강의에서는 2048 게임에 점수 시스템을 추가하며, 타일이 합쳐질 때 점수가 증가하는 방식을 구현했습니다. 이를 통해 게임 플레이의 재미 요소를 더하고, 플레이어가 자신의 진행 상황을 확인할 수 있도록 시각적으로 점수를 출력하는 기능을 추가했습니다.

이제 2048 게임이 더욱 완성도 높은 형태로 발전하고 있으며, 앞으로는 게임 종료 조건을 추가하여 더 실제적인 게임 플레이 환경을 구현할 예정입니다. 이번 실습에서 배운 점수 관리 및 UI 표시 기법은 다양한 게임 및 애플리케이션에서도 활용될 수 있습니다.

다음 강의에서는 게임 종료 조건을 설정하고, "Game Over" 메시지를 출력하는 기능을 추가해 보겠습니다.

 

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