IT/Python

[Python] 파이썬으로 텍스트 기반 RPG 게임 개발하기

멋진 선배 2025. 1. 19. 10:50
반응형

오늘은 파이썬을 이요하여텍스트 기반 RPG 게임을 만드는 방법에 대해서 알아보겠습니다. 텍스트 RPG는 그래픽 없이 텍스트만으로 진행되는 게임이에요. 간단하면서도 재미 있는 프로젝트라 파이썬 초보자에도 딱 좋습니다.

1.게임의 기본 구조 만들기

먼저 게임의 뼈대를 만들어 볼까요? 다음과 같은 기본 구조로 시작해 봅시다.

import random

def game_start():
    print("텍스트 RPG 게임에 오신 것을 환영합니다!")
    player_name = input("당신의 이름은 무엇인가요? ")
    print(f"{player_name}님, 모험을 시작합니다!")

def main_menu():
    while True:
        print("\n무엇을 하시겠습니까?")
        print("1. 게임 시작")
        print("2. 게임 설명")
        print("3. 종료")
        choice = input("선택: ")
        if choice == "1":
            game_start()
        elif choice == "2":
            print("이 게임은 텍스트 기반 RPG 게임입니다.")
        elif choice == "3":
            print("게임을 종료합니다. 안녕히 가세요!")
            break
        else:
            print("잘못된 선택입니다. 다시 선택해주세요.")

main_menu()

 이 코드는 게임의 메인 메뉴를 만들어 줍니다. 플레이어는 게임 시작, 설명보기, 종료 중 하나를 선택할 수 있습니다.

2. 캐릭터 만들기

RPG의 핵심은 캐릭터죠! 간단한 캐릭터 클래스를 만들어 봅시다.

class Character:
    def __init__(self, name):
        self.name = name
        self.health = 100
        self.attack = 10
        self.defense = 5
        self.gold = 0

    def status(self):
        print(f"\n{self.name}의 상태")
        print(f"체력: {self.health}")
        print(f"공격력: {self.attack}")
        print(f"방어력: {self.defense}")
        print(f"골드: {self.gold}")

player = Character(player_name)

이렇게 하면 플레이어의 이름, 체력, 공격력, 방어력, 골드를 관리할 수 있어요.

3.몬스터 만들기

게임에 몬스터도 추가해볼까요? 몬스터 클래스를 만들어 봅시다.

class Monster:
    def __init__(self, name, health, attack, defense, gold_reward):
        self.name = name
        self.health = health
        self.attack = attack
        self.defense = defense
        self.gold_reward = gold_reward

monsters = [
    Monster("슬라임", 20, 5, 2, 10),
    Monster("고블린", 30, 7, 3, 15),
    Monster("오크", 50, 12, 5, 25)
]

이제 다양한 몬스터를 만들 수 있어요.

4. 전투 시스템 구현하기

전투 시스템을 만들어 볼까요? 다음과 같은 함수를 추가해봅시다.

def battle(player, monster):
    print(f"\n{monster.name}이(가) 나타났다!")
    while player.health > 0 and monster.health > 0:
        print("\n1. 공격")
        print("2. 도망가기")
        choice = input("무엇을 하시겠습니까? ")
        
        if choice == "1":
            damage = max(player.attack - monster.defense, 0)
            monster.health -= damage
            print(f"{player.name}의 공격! {monster.name}에게 {damage}의 데미지를 입혔습니다.")
            
            if monster.health <= 0:
                print(f"{monster.name}을(를) 물리쳤습니다!")
                player.gold += monster.gold_reward
                print(f"{monster.gold_reward} 골드를 얻었습니다!")
                break
            
            monster_damage = max(monster.attack - player.defense, 0)
            player.health -= monster_damage
            print(f"{monster.name}의 공격! {player.name}님이 {monster_damage}의 데미지를 입었습니다.")
            
            if player.health <= 0:
                print("게임 오버! 당신은 쓰러졌습니다...")
                break
        
        elif choice == "2":
            if random.random() < 0.5:
                print("도망치는데 성공했습니다!")
                break
            else:
                print("도망치지 못했습니다.")
                monster_damage = max(monster.attack - player.defense, 0)
                player.health -= monster_damage
                print(f"{monster.name}의 공격! {player.name}님이 {monster_damage}의 데미지를 입었습니다.")
        
        else:
            print("잘못된 선택입니다. 다시 선택해주세요.")

이 함수는 플레이어와 몬스터 간의 전투를 시물레이션 하니다. 플레이어는 공격하거나 도망갈 수 있어요.

5.게임 루프 만들기

이제 모든 요소를 하나로 묶어 게임 루프를 만들어 봅시다.

def game_loop():
    while player.health > 0:
        print("\n1. 모험을 떠나기")
        print("2. 상태 확인")
        print("3. 게임 종료")
        choice = input("무엇을 하시겠습니까? ")
        
        if choice == "1":
            monster = random.choice(monsters)
            battle(player, monster)
        elif choice == "2":
            player.status()
        elif choice == "3":
            print("게임을 종료합니다. 안녕히 가세요!")
            break
        else:
            print("잘못된 선택입니다. 다시 선택해주세요.")
    
    if player.health <= 0:
        print("게임 오버! 다시 도전해보세요.")

이 루프는 플레이어가 모험을 떠나거나, 상태를 확인하거나, 게임을 종료할 수 있게 해줍니다.

6.합쳐진 최종 결과 코드

게임 결과

import random

class Character:
    def __init__(self, name):
        self.name = name
        self.health = 100
        self.attack = 10
        self.defense = 5
        self.gold = 0

    def status(self):
        print(f"\n{self.name}의 상태")
        print(f"체력: {self.health}")
        print(f"공격력: {self.attack}")
        print(f"방어력: {self.defense}")
        print(f"골드: {self.gold}")

class Monster:
    def __init__(self, name, health, attack, defense, gold_reward):
        self.name = name
        self.health = health
        self.attack = attack
        self.defense = defense
        self.gold_reward = gold_reward

monsters = [
    Monster("슬라임", 20, 5, 2, 10),
    Monster("고블린", 30, 7, 3, 15),
    Monster("오크", 50, 12, 5, 25)
]

def battle(player, monster):
    print(f"\n{monster.name}이(가) 나타났다!")
    while player.health > 0 and monster.health > 0:
        print("\n1. 공격")
        print("2. 도망가기")
        choice = input("무엇을 하시겠습니까? ")
        
        if choice == "1":
            damage = max(player.attack - monster.defense, 0)
            monster.health -= damage
            print(f"{player.name}의 공격! {monster.name}에게 {damage}의 데미지를 입혔습니다.")
            
            if monster.health <= 0:
                print(f"{monster.name}을(를) 물리쳤습니다!")
                player.gold += monster.gold_reward
                print(f"{monster.gold_reward} 골드를 얻었습니다!")
                break
            
            monster_damage = max(monster.attack - player.defense, 0)
            player.health -= monster_damage
            print(f"{monster.name}의 공격! {player.name}님이 {monster_damage}의 데미지를 입었습니다.")
            
            if player.health <= 0:
                print("게임 오버! 당신은 쓰러졌습니다...")
                break
        
        elif choice == "2":
            if random.random() < 0.5:
                print("도망치는데 성공했습니다!")
                break
            else:
                print("도망치지 못했습니다.")
                monster_damage = max(monster.attack - player.defense, 0)
                player.health -= monster_damage
                print(f"{monster.name}의 공격! {player.name}님이 {monster_damage}의 데미지를 입었습니다.")
        
        else:
            print("잘못된 선택입니다. 다시 선택해주세요.")

def game_loop(player):
    while player.health > 0:
        print("\n1. 모험을 떠나기")
        print("2. 상태 확인")
        print("3. 게임 종료")
        choice = input("무엇을 하시겠습니까? ")
        
        if choice == "1":
            monster = random.choice(monsters)
            battle(player, monster)
        elif choice == "2":
            player.status()
        elif choice == "3":
            print("게임을 종료합니다. 안녕히 가세요!")
            break
        else:
            print("잘못된 선택입니다. 다시 선택해주세요.")
    
    if player.health <= 0:
        print("게임 오버! 다시 도전해보세요.")

def game_start():
    print("텍스트 RPG 게임에 오신 것을 환영합니다!")
    player_name = input("당신의 이름은 무엇인가요? ")
    player = Character(player_name)
    print(f"{player_name}님, 모험을 시작합니다!")
    game_loop(player)

def main_menu():
    while True:
        print("\n무엇을 하시겠습니까?")
        print("1. 게임 시작")
        print("2. 게임 설명")
        print("3. 종료")
        choice = input("선택: ")
        if choice == "1":
            game_start()
        elif choice == "2":
            print("이 게임은 텍스트 기반 RPG 게임입니다.")
            print("몬스터와 싸우고 골드를 모으세요!")
            print("체력이 0이 되면 게임 오버입니다.")
        elif choice == "3":
            print("게임을 종료합니다. 안녕히 가세요!")
            break
        else:
            print("잘못된 선택입니다. 다시 선택해주세요.")

if __name__ == "__main__":
    main_menu()

마무리

여기까지 간단한 텍스트 RPG 게임의 기본 구조를 만들어보았습니다. 이제 여러분만의 아이디어로 게임을 더욱 발전시켜 보세요. 예를들어, 아이템 시스템을 추가하거나 다양한 퀘스트를 만들거나, 레벨 업 시스템을 구현해볼 수 있어요.

 

파이썬으로 게임을 만드는 것은 프로그래밍 실력을 향상시키는 좋은 방법이에요. 게임을 만들면서 조건문, 반복문, 함수, 클래스 등 다양한 파이썬 개념을 실제로 적용해볼 수 있거든요.

 

더 복잡한 게임을 만들고 싶다면 Pygame 같은 라이브러리를 사용해 그래픽 요소를 추가할 수 있습니다. 하지만 텍스트 기반 게임만으로도 충분히 재미있고 도전적인 프로젝트가 될 수 있습니다.

반응형