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" 메시지를 출력하는 기능을 추가해 보겠습니다.
🚀 궁금한 점이나 피드백이 있다면 댓글로 남겨주세요. 여러분의 학습을 응원합니다! 😊
'파이썬(Python)' 카테고리의 다른 글
Python Day 25: 2048 추가 기능 및 최적화 - "다시 시작" 버튼 및 UI 개선 (0) | 2025.03.11 |
---|---|
Python Day 24: 2048 게임 종료 조건 처리 - 게임 오버 구현하기 (0) | 2025.03.08 |
Python Day 22: 2048 게임판 UI 디자인 - 타일 색상 및 폰트 설정 (0) | 2025.03.04 |
Python Day 21: 2048 게임 로직 구현 - 숫자 이동 및 합치기 (0) | 2025.03.01 |
Python Day 20: 2048 게임판 설계 - 4x4 그리드 구현하기 (0) | 2025.02.27 |