카테고리 없음

TEXT RPG 만들기3 (전투 시스템)

danpat77 2025. 2. 7. 19:56

 

오늘은 RPG의 핵심 전투 시스템을 만들어 보자

 

 

public class Battle(Player player)
{
    public  bool MonsterIsDie = false; //임시 몬스터 생존 여부

    List<Monster> MonstersList; // 몬스터 종류 담을 리스트
    List<Monster> BattleList; // 배틀이 시작하면 랜덤으로 몬스터를 

    public int killCount = 0; //몬스터 처치 수

    public void MakeMonster()
    {
        Monster monster1 = new Monster("전사 미니언", 1, 10, 5, 50, 20, "미니언");
        Monster monster2 = new Monster("마법사 미니언", 3, 10, 7, 30, 14, "미니언");
        Monster monster3 = new Monster("탱크 미니언", 10, 10, 15, 100, 100, "미니언");
        Monster monster4 = new Monster("공허 유충", 7, 10, 10, 100, 100, "공허 유충");

        MonstersList.Add(monster1);
        MonstersList.Add(monster2);
        MonstersList.Add(monster3);
        MonstersList.Add(monster4);
    }

    public void MakeList()
    {
        MonstersList = new List<Monster>();
        BattleList = new List<Monster>();

        MakeMonster();

        Random random = new Random();

        int CountMonster = random.Next(1, 4);

        for (int i = 0; i < CountMonster; i++)
        {
            int maxVal = MonstersList.Count - 1;
            int SelectMonster = random.Next(0, maxVal);
            BattleList.Add(MonstersList[SelectMonster]);
        }
    }
    
    public void BattleStart(){......}
    
    public void playerTurn(){......}
}

우선 몬스터가 저장될 리스트를 만들어주고 몬스터를 저장해준다

이제 몬스터를 소환할 리스트를 만들어 랜덤값으로 몬스터를 랜덤으로 저장을 해준다

 

public void BattleStart()
{
    MakeList();

    bool battel = true;
    while (battel)
    {
        Console.Clear();
        Console.WriteLine("Battle!!\n");

        for (int i = 0; i < BattleList.Count; i++)
        {
            Console.WriteLine(BattleList[i].Name);
        }


        Console.WriteLine("");
        Console.WriteLine("");

        Console.WriteLine("[내정보]");
        Console.WriteLine($"Lv.{player.Lv} {player.Name} ({player.IClass})");
        Console.WriteLine($"HP 100/{player.Health}");


        Console.WriteLine("\n[행동]\n");
        Console.WriteLine("1. 공격");
        Console.WriteLine("2. 방어");
        Console.WriteLine("\n원하시는 행동을 입력해주세요.");
        Console.Write(">>");

        string select = Console.ReadLine();

        if (select == "1" || select == "2") playerTurn(select);
        else
        {
            //잘못입력 했을때
        }

        if (BattleList.Count == killCount)//몬스터 생존 여부 확인
        {
            //몬스터 처치시
            battel = false;
            //배틀 종료
        }

        Console.WriteLine("몬스터 턴");
        Console.WriteLine("계속 하시려면 아무키를 입력하세요.");
        Console.ReadKey(true);
    }

}

배틀 시작 메서드에서 MakeList 메서드를 호출하고 배틀을 준비한다

 

public void playerTurn(string select)
{
    bool playerturn = true;
	switch(select)
	{
        case "1":
            //공격
            while (playerturn)
            {
                Console.Clear();
                Console.WriteLine("Battle!!\n");

                for (int i = 0; i < BattleList.Count; i++)
                {
                    Console.Write($"-{i+1} ");
                    Console.WriteLine(BattleList[i].Name);
                }


                Console.WriteLine("");
                Console.WriteLine("");

                Console.WriteLine("[내정보]");
                Console.WriteLine($"Lv.{player.Lv} {player.Name} ({player.IClass})");
                Console.WriteLine($"HP 100/{player.Health}");


                Console.WriteLine("\n[행동]\n");
                Console.WriteLine("\n공격할 몬스터를 선택해주세요.");
                Console.Write(">>");

                int input = int.Parse(Console.ReadLine());
                if (input > 0 && input <= BattleList.Count)
                {
                    Console.WriteLine($"{BattleList[input - 1].Name} 공격");
                    Console.ReadKey(true);
                    playerturn = false;
                }
                else
                {
                    Console.WriteLine("잘못된 입력입니다. 계속 하시려면 아무키를 입력하세요.");
                    Console.ReadKey(true);
                }
            }                
            break;
        case "2":
            //방어
            Console.WriteLine("방어");
            break;
    }
}

플레이어 턴에서 입력한 숫자 값에 따라 행동을 정하고 그 행동에따라 몬스터를 공격한다.