프로그래밍/콘솔프로젝트

TextRpgGame <최종>

SUGI_ 2023. 7. 11. 10:59
namespace TextRpgTest
{
    internal class INFO
    {
        public string m_name;
        public int m_attack;
        public int m_hp;
    }
}
namespace TextRpgTest
{
    internal class Player
    {
        INFO pInfo;

        public void SetDamage(int damage) { pInfo.m_hp -= damage; }
        public void SetHp(int hp) { pInfo.m_hp = hp; }
        public INFO GetInfo() { return pInfo; }

        public int num;

        public void SelectJob()
        {
            pInfo = new INFO();

            Console.WriteLine("==== 직업 선택 ====\n\n1.마법사 2.전사 3.궁수");
            num = int.Parse(Console.ReadLine());

            switch (num)
            {
                case 1:
                    pInfo.m_name = "마법사";
                    pInfo.m_attack = 10;
                    pInfo.m_hp = 100;
                    break;
                case 2:
                    pInfo.m_name = "전사";
                    pInfo.m_attack = 15;
                    pInfo.m_hp = 100;
                    break;
                case 3:
                    pInfo.m_name = "궁수";
                    pInfo.m_attack = 20;
                    pInfo.m_hp = 100;
                    break;
            }
        }

        public void PlayerRander()
        {
            Console.WriteLine("==== 캐릭터 정보 ====\n\n직업 : " + pInfo.m_name + "\n체력 : " + pInfo.m_hp + "\n공격력 : " + pInfo.m_attack);
        }
    }
}
namespace TextRpgTest
{
    internal class Monster
    {
        INFO mInfo;
        public void SetDamage(int damage) { mInfo.m_hp -= damage; }
        public void SetMonster(INFO setInfo) { mInfo = setInfo; }
        public INFO GetInfo() { return mInfo; }

        public void MonsterRander()
        {
            Console.WriteLine("==== 몬스터 정보 ====\n\n맵 : " + mInfo.m_name + "\n체력 : " + mInfo.m_hp + "\n공격력 : " + mInfo.m_attack);
        }
    }
namespace TextRpgTest
{
    internal class Field
    {
        Player player;
        Monster monster;

        public void SetPlayer(Player setPlayer) { player = setPlayer; }

        public void MapSetting()
        {
            while (true)
            {
                Console.Clear();
                //player.PlayerRander();
                MapDraw();

                int num = int.Parse(Console.ReadLine());

                if (num <= 3)
                {
                    // 적을 생성 후 싸우기
                    CreateMonster(num);

                    Fight();
                }

                else
                {
                    break;
                }
            }
        }

        public void MapDraw()
        {
            Console.WriteLine("==== 맵 선택 ====");
            Console.WriteLine("\n1.초보 2.중급 3.고급 4.이전단계");
        }

        public void Create(string name, int attack, int hp, out Monster cMonster)
        {
            cMonster = new Monster();
            INFO cInfo = new INFO();

            cInfo.m_name = name;
            cInfo.m_attack = attack;
            cInfo.m_hp = hp;

            cMonster.SetMonster(cInfo);
        }

        public void CreateMonster(int num)
        {
            switch (num)
            {
                case 1:
                    Create("초보", 10, 50, out monster);
                    break;
                case 2:
                    Create("중급", 15, 60, out monster);
                    break;
                case 3:
                    Create("고급", 20, 80, out monster);
                    break;
            }
        }

        public void Fight()
        {
            //싸우기 위한
            while(true)
            {
                Console.Clear();
                player.PlayerRander();
                Console.WriteLine("");
                monster.MonsterRander();
                Console.WriteLine("\n1.공격 2.나가기");

                int num = int.Parse(Console.ReadLine());

                if(num == 1)
                {
                    //공격
                    player.SetDamage(monster.GetInfo().m_attack);
                    monster.SetDamage(player.GetInfo().m_attack);

                    //플레이어 죽으면
                    if(player.GetInfo().m_hp <= 0)
                    {
                        player.SetHp(100);
                        break;
                    }
                }

                //적 죽으면
                if (num == 2 || monster.GetInfo().m_hp <= 0)
                {
                    monster = null;
                    break;
                }
            }
        }
    }
}
namespace TextRpgTest
{
    internal class MainGame
    {
        Player player;
        Field field;

        public void JopSetting()
        {
            Console.WriteLine("==== 게임 시작 ====\n\n 아무키나 누르시오");
            Console.ReadLine();

            while (true)
            {
                Console.Clear();
                player = new Player();
                player.SelectJop();

                if (player.num <= 3)
                {
                    GameSetting();
                }

                else
                {
                    player = null; 
                    break;
                }
            }
        }

        public void GameSetting()
        {
            while (true)
            {
                Console.Clear();
                player.PlayerRander();
                Console.WriteLine("\n1.전쟁터 \t 2.나가기");

                int num = int.Parse(Console.ReadLine());

                if(num == 1)
                {
                    // 전쟁터 캐릭터 선택도 가능하게 하기위해

                    /*if(field == null)
                    {
                        field = new Field();
                        field.SetPlayer(player);
                    }*/

                    field = new Field();
                    field.SetPlayer(player);
                    field.MapSetting();
                }
                else
                {
                    break;
                }
            }
        }
    }
}
namespace TextRpgTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            MainGame mainGame = new MainGame();
            mainGame.JobSetting();
            //mainGame.GameSetting();
        }
    }
}
728x90