내일배움캠프/TIL

TEXT RPG 만들기(기본 틀 다지기, 상태창 만들기)

danpat77 2025. 2. 3. 20:55

C# 기본 문법을 배운지 4일차 

아직까지는 기본 문법만 공부해서 그런지 아직까지는 큰 무리는 없는것 같다(강의 숙제가 힘든건 함정.....) 

 

그래서 이번까지 배운 문법을 활용해서 TEXT RPG를 만드는 것이 목표이다.

 

우선 interface를 활용하여 플레이어의 인터페이스를 구현하자

public interface ICharacter
{
    string Name { get; set; }
    string ClassName { get; }
    int Health { get; set; }
    int Attack { get; }
    int Defence { get; set; }
    bool IsDead { get; }
    void TakeDamage(int damage);
}

public class Player : ICharacter
{
    public string Name { get; set; }
    public string ClassName { get; set; }
    public int Health { get; set; }
    public int AttackPower { get; set; }
    public int Defence { get; set; }
    public bool IsDead => Health <= 0;
    public int Attack => new Random().Next(10, AttackPower); // 공격력은 랜덤

    public int Level = 1;
    public int Gold = 1500;

    public Player(string name, string Select)
    {
        Name = name;

        if (Select == "1" || Select == "전사")
        {
            ClassName = "전사";
            Health = 120;
            AttackPower = 20;
            Defence = 10;
        }
        else if (Select == "2" || Select == "도적")
        {
            ClassName = "도적";
            Health = 100;
            AttackPower = 30;
            Defence = 5;
        }
    }
}

여기서 ICharacter 인터페이스를 만든 이유는 지금 당장은 플레이어 뿐이지만 나중에 몬스터를 추가 했을때 동일한 구조를 따르도록 설계하기 위해서 인터페이스로 만들었다.

 

다음으로 플레이어 이름과 직업 클래스를 사용자로 부터 입력 받기위해

class Program
{
    static void Main(string[] args)
    {
        
        Console.WriteLine("무한의 던전에 오신 여러분 환영합니다.");
        Console.WriteLine("원하시는 이름을 설정 해주세요.");
        Console.Write("이름 : ");
        string name = Console.ReadLine();

        //저장 시스템 만들기

        //직업 선택창 만들기
        Console.Clear();
        Console.WriteLine("스파르타 던전에 오신 여러분 환영합니다.");
        Console.WriteLine("원하시는 직업을 골라주세요.");
        Console.WriteLine("1. 전사 ");
        Console.WriteLine("2. 도적 ");
        Console.Write(">> ");
        string select = Console.ReadLine();
        
        Player player = new Player(name, select);
        
        MainStage mainStage = new MainStage(player);
        mainStage.Start();
    }
}

플레이어 객체를 생성하고 생성된 플레이어 객체를 통해 플레이어의 이름과 직업 클래스를 저장한다.

데이터가 저장된 플레이어 객체를 MainStage 클래스에 전달을 해줌으로서 앞으로 게임 진행을 할때 플레이어 데이터를 더 효과적으로 관리가 가능하다.

 

이제  MainStage 클래스에는 게임에 대한 메인 메뉴를 만들 것이다.

기본적으로 상태창, 인벤토리, 상점을 구연을 해보자

public class MainStage(Player player)
{
    bool game = true;
    public void Start()
    {
        MainMenu();
    }
    public void MainMenu()
    {
        while (game)
        {
            Console.Clear();
            Console.WriteLine("에데온 마을에 오신 여러분 환영합니다.");
            Console.WriteLine("이곳에서 던전으로 들어가기전 활동을 할 수 있습니다.\n");
            Console.WriteLine("1. 상태 보기");
            Console.WriteLine("2. 인벤토리");
            Console.WriteLine("3. 상점\n");
            Console.WriteLine("0. 게임 종료\n");
            Console.WriteLine("원하시는 행동을 입력해주세요.");
            Console.Write(">> ");
            string choice = Console.ReadLine();

            switch (choice)
            {
                case "1":
                    StateUI();
                    break;
                case "2":
                    InventoryUI();
                    break;
                case "3":
                    //ShopUI();
                    break;
                case "0":
                    game = false;
                    return;
                default:
                    Console.WriteLine("잘못된 입력입니다. 계속하려면 아무 키나 누르세요...");
                    Console.ReadKey();
                    break;
            }
        }
    }
}

 

 

스위치 문을 통해 입력 받은 숫자에 따라 상태창, 인벤토리, 상점으로 넘어간다.

이제 메인에서 전달 받은 플레이어 정보를 상테창에 표시를 하면 간단하게 상태창을 만들 수 있다.

public void StateUI()
{
    while (game)
    {
        Console.Clear();
        Console.WriteLine("상태 보기");
        Console.WriteLine("캐릭터의 정보가 표시됩니다.\n");
        Console.WriteLine($"Lv. {player.Level}");
        Console.WriteLine($"{player.Name} ( {player.ClassName} )");
        Console.WriteLine($"공격력 : {player.AttackPower}");
        Console.WriteLine($"방어력 : {player.Defence}");
        Console.WriteLine($"체 력 : {player.Health}");
        Console.WriteLine($"Gold : {player.Gold} G");
        Console.WriteLine("\n0. 나가기\n");
        Console.WriteLine("원하시는 행동을 입력해주세요.");
        Console.Write(">> ");


        string input = Console.ReadLine();
        if (input == "0") MainMenu();
        else
        {
            Console.WriteLine("잘못된 입력입니다. 계속하려면 아무 키나 누르세요...");
            Console.ReadKey();
        }
    }

}

오늘은 TEXT RPG 게임의 기본틀과 상태창까지 만들어 보았다. 아직까지는 큰 어려움이 없었지만 이제 만들 인벤토리와 상점을 만들 생각을 하니 살짝 두려움이 몰려온다........