Pygame으로 만드는 나만의 RPG 게임 8강 – 퀘스트 시스템 구현: 조건 확인과 보상 지급

Pygame으로 만드는 나만의 RPG 게임 8강입니다!

이번 강의에서는 RPG의 핵심 재미 중 하나인 **퀘스트 시스템**을 구현해보겠습니다. 이제 플레이어는 단순히 적을 처치하는 것을 넘어서, NPC로부터 퀘스트를 받고, 조건을 달성하여 보상을 받을 수 있게 됩니다.

1. 퀘스트 시스템 개요

우리가 이번 시간에 구현할 기능은 다음과 같습니다:

  • NPC가 퀘스트를 제공
  • 조건(예: 적 3마리 처치)을 만족하면 완료
  • 보상으로 아이템을 지급
  • 퀘스트 상태 표시: 미수락 / 진행 중 / 완료

2. Quest 클래스 정의

class Quest:
    def __init__(self, name, description, goal_count, reward_item):
        self.name = name
        self.description = description
        self.goal_count = goal_count
        self.current_count = 0
        self.completed = False
        self.reward_item = reward_item
        self.accepted = False

    def check_complete(self):
        if self.current_count >= self.goal_count:
            self.completed = True

3. NPC와 퀘스트 연결

# 기존 NPC 클래스에 퀘스트 추가
class QuestNPC(NPC):
    def __init__(self, image, pos, messages, quest):
        super().__init__(image, pos, messages)
        self.quest = quest

    def offer_quest(self):
        if not self.quest.accepted:
            self.quest.accepted = True
            return f"퀘스트 수락: {self.quest.name}"
        elif self.quest.completed:
            return f"퀘스트 완료! 보상: {self.quest.reward_item.name}"
        else:
            return f"진행 중... {self.quest.current_count}/{self.quest.goal_count}"

4. 퀘스트 생성

quest = Quest("슬라임 퇴치", "슬라임 3마리 처치", 3, potion)
npc2 = QuestNPC(npc_img, (400, 400), ["도와주세요!", "마을 근처 슬라임을 처치해주세요."], quest)

5. 적 처치 시 퀘스트 진행

# 전투에서 적 처치 후
if battle_enemy.hp <= 0:
    enemies.remove(battle_enemy)
    battle_mode = False

    # 퀘스트 조건 진행
    if npc2.quest.accepted and not npc2.quest.completed:
        npc2.quest.current_count += 1
        npc2.quest.check_complete()

---

6. 보상 지급 처리

if npc2.quest.completed and npc2.quest.reward_item not in inventory:
    inventory.append(npc2.quest.reward_item)
    print("보상을 받았습니다!")

---

7. 퀘스트 상태 출력

font = pygame.font.SysFont(None, 24)
text = font.render(npc2.quest.description, True, (255, 255, 255))
screen.blit(text, (20, HEIGHT - 100))

또는 더 자세한 상태를 출력하려면 `npc2.quest.current_count`와 `goal_count`를 함께 출력하면 됩니다.

---

8. 결과

- NPC가 퀘스트를 제안하고
- 플레이어가 적을 처치해 목표 달성 후
- 보상을 획득하게 됩니다

단계적으로 구조화된 퀘스트 시스템을 통해 게임에 목표와 동기를 부여할 수 있습니다!

---

9. 다음 강의 예고

9강 – 배경음악 및 효과음 추가: 전투, 대화, 이동 시 효과음 적용
이제 게임에 분위기를 불어넣을 차례! 다음 시간에는 배경 음악과 효과음을 추가해서 몰입감을 높여보겠습니다.

---

이 시리즈는 실제 RPG 게임 제작 과정을 단계적으로 배우며, 구조적 설계 능력까지 기를 수 있도록 구성된 실습형 강의입니다. 이제 게임 콘텐츠도 꽤 알차졌죠!