파이썬으로 만드는 나만의 게임 개발 강좌 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을 활용하여 하나의 게임을 완성해가는 입문 프로젝트 강좌입니다. 끝까지 완성해보는 경험, 꼭 해보세요!