파이썬으로 만드는 나만의 게임 개발 강좌 9강 – 난이도 조절 기능 구현하기

파이썬으로 만드는 나만의 게임 개발 강좌 9강입니다!

게임이 기본적인 동작을 갖추고 사운드와 UI까지 완성되었으니, 이번에는 게임의 재미를 한층 끌어올릴 수 있는 난이도 조절 기능을 구현해보겠습니다.

게임이 너무 쉽다면 금방 질릴 수 있고, 너무 어렵다면 도전 욕구가 떨어지겠죠. 난이도 설정은 게임의 몰입감을 유지하는 데 큰 역할을 합니다.

이번 강의 목표

  • 게임 속도 조절 (프레임 수치 변경)
  • 아이템 등장 빈도 조절
  • 적(enemy)의 수와 속도 조절
  • 난이도 선택 메뉴 추가

1. 난이도에 따라 게임 속도 바꾸기

게임 루프에서 clock.tick(FPS) 값이 높아질수록 게임이 빨라집니다.

# 난이도 설정에 따라 프레임 속도 설정
FPS = 30  # Easy
# FPS = 60  # Medium
# FPS = 90  # Hard

또는 변수로 정의해두고, 게임 시작 시 난이도를 선택하면 FPS를 설정하는 구조도 가능합니다.


2. 아이템 등장 확률 조정

게임이 진행되며 일정 시간마다 아이템이 등장하게 만들고, 난이도에 따라 아이템 생성 주기를 다르게 할 수 있습니다.

import time

# 마지막 아이템 생성 시간 저장
last_item_time = time.time()
item_spawn_interval = 5  # Easy: 5초마다 등장
# item_spawn_interval = 3  # Medium
# item_spawn_interval = 1.5  # Hard

# 메인 루프 내부
current_time = time.time()
if current_time - last_item_time >= item_spawn_interval:
    # 아이템 위치 랜덤 생성
    item_x = random.randint(0, screen_width - item_w)
    item_y = random.randint(0, screen_height - item_h)
    last_item_time = current_time

난이도가 높아질수록 아이템이 더 적게 등장하도록 조정할 수 있습니다.


3. 장애물 수와 속도 조절

# 난이도에 따라 enemy 수와 속도 설정
if difficulty == "easy":
    enemy_count = 1
    enemy_speed = 2
elif difficulty == "medium":
    enemy_count = 3
    enemy_speed = 4
elif difficulty == "hard":
    enemy_count = 5
    enemy_speed = 6

장애물을 리스트로 관리하면서 각각의 위치와 속도를 갱신해주면 됩니다.


4. 난이도 선택 메뉴 만들기

게임 시작 전 난이도를 고를 수 있도록 입력을 받아봅니다.

def choose_difficulty():
    screen.fill((0, 0, 0))
    font = pygame.font.Font(None, 50)
    easy = font.render("1. Easy", True, (0, 255, 0))
    medium = font.render("2. Medium", True, (255, 255, 0))
    hard = font.render("3. Hard", True, (255, 0, 0))

    screen.blit(easy, (100, 200))
    screen.blit(medium, (100, 300))
    screen.blit(hard, (100, 400))
    pygame.display.update()

    selected = None
    while selected is None:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                exit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_1:
                    selected = "easy"
                elif event.key == pygame.K_2:
                    selected = "medium"
                elif event.key == pygame.K_3:
                    selected = "hard"
    return selected

게임 시작 전에 difficulty = choose_difficulty() 를 호출하여 선택값을 가져오면 됩니다.


5. 난이도에 따라 게임 플레이 달라지는 느낌

  • Easy: 아이템 많고 적은 수의 적이 천천히 이동
  • Medium: 기본 난이도
  • Hard: 적이 많고 빠르며 아이템은 드물게 등장

유저가 도전 욕구를 느낄 수 있도록 점진적인 난이도 차이를 주는 것이 핵심입니다.


6. 다음 강의 예고

10강: 게임 배포하기 – .exe 파일로 만들기 및 배포 팁
드디어 마지막 강의입니다! 완성한 게임을 실행 파일(.exe)로 만들어 다른 사람들과 공유할 수 있는 방법을 배워보겠습니다. PyInstaller를 사용하여 게임을 포장하고, 배포 전 체크리스트까지 알려드릴게요!

이 강의는 파이썬과 Pygame을 활용하여 하나의 게임을 완성해가는 입문 프로젝트 강좌입니다. 끝까지 완성해보는 경험, 꼭 해보세요!