TextRPG 1

선비Sunbei·2023년 1월 13일
0

C#

목록 보기
14/18
post-thumbnail
데이터 정보
ClassType : None, Knight, Archer, Mage
Player info : hp ,attack, 
ClassTypeMonsterType : None, Slime, Orc, Skeleton
Monster info : hp, attack
.
함수
캐릭터 직업 선택
몬스터 랜덤 생성전투

로비 접속(직업 선택)
게임 접속(필드로 간다, 로비로 간다.)
필드 접속(전투 모드, 일정 확률로 마을로 도망)

https://ansohxxn.github.io/c%20sharp/ch4/

해당 글을 읽고서 위와 같이 정리한 후, 만들고 싶은데로 만들었습니다.

using System;

namespace TextRPG1
{
    class Program
    {
        static Random r = new Random();

        enum ClassType{
            None=0,
            Knight=1,
            Archer=2,
            Mage=3
        }

        enum MonsterType {
            None=0,
            Slime,
            Orc,
            Skeleton
        }
        
        struct Player
        {
            public int hp;
            public int attack;
            public ClassType job;
        }

        struct Monster
        {
            public int hp;
            public int attack;
            public MonsterType tribe;
        }

        static void PrintPlayerInfo(Player player)
        {
            Console.WriteLine("-------------------------------------");
            Console.WriteLine("플레이어 클래스 : " + player.job);
            Console.WriteLine("플레이어 공격력 : " + player.attack);
            Console.WriteLine("플레이어 체력 : " + player.hp);
            Console.WriteLine("-------------------------------------");
        }

        static void CreateMonster(out Monster monster)
        {
            switch (r.Next(1, 4))
            {
                case 1:
                    monster.tribe = MonsterType.Orc;
                    monster.attack = 10 + r.Next(0,15);
                    monster.hp = 30 + r.Next(0,30);
                    break;
                case 2:
                    monster.tribe = MonsterType.Skeleton;
                    monster.attack = 5 + r.Next(0,10);
                    monster.hp = 8 + r.Next(0,3);
                    break;
                case 3:
                    monster.tribe = MonsterType.Slime;
                    monster.attack = 2 + r.Next(0,3);
                    monster.hp = 15 + r.Next(0,15);
                    break;
                default:
                    monster.tribe = MonsterType.None;
                    monster.attack = 0;
                    monster.hp = 0;
                    break;
            }
        }

        static void Fight(ref Player player, ref Monster monster)
        {
            while (true)
            {
                switch(r.Next(0, 2))
                {
                    case 0:
                        Console.WriteLine("Player가 " + monster.tribe + "를 공격했습니다.");
                        monster.hp -= player.attack;
                        break;
                    case 1:
                        Console.WriteLine(monster.tribe + "가 Player를 공격했습니다.");
                        player.hp -= monster.attack;
                        break;
                }
                Console.WriteLine("Player 체력 : " + player.hp + ", Monster 체력 : " + monster.hp);
                Console.ReadKey();
                if(player.hp <= 0)
                {
                    Console.WriteLine("GameOver");
                    Environment.Exit(0);
                }
                if (monster.hp <= 0)
                    return;
            }
        }

        static void FieldEnter(ref Player player)
        {
            Console.Clear();
            PrintPlayerInfo(player);
            Console.WriteLine("필드에 입장했습니다.");

            Monster monster;
            CreateMonster(out monster);
            string sel;
            while (true)
            {
                Console.WriteLine("몬스터 " + monster.tribe + "을 만났습니다.");
                Console.WriteLine("어떤 행동을 하시겠습니까?");
                Console.WriteLine("[1] 몬스터와 전투");
                Console.WriteLine("[2] 일정 확률로 마을로 도망");
                Console.Write("선택 : ");
                sel = Console.ReadLine();
                switch (sel)
                {
                    case "1":
                        Fight(ref player, ref monster);
                        return;

                    case "2":
                        
                        if(r.Next(0, 10) <= 6) // 70%
                            return;
                        else
                        {
                            Console.Clear();
                            Console.WriteLine("도망에 실패했습니다.");
                            Console.WriteLine("몬스터에게 데미지를 입었습니다.");
                            player.hp -= monster.attack;
                            if(player.hp <= 0)
                            {
                                Console.WriteLine("GameOver");
                                Environment.Exit(0);
                            }
                            PrintPlayerInfo(player);
                            break;
                        }
                }
            }

        }


        static void EnterGame(ref Player player)
        {
            Console.WriteLine("게임에 접속했습니다.");

            string sel;
            while (true)
            {
                Console.Clear();
                PrintPlayerInfo(player);
                Console.WriteLine("어떤 행동을 하시겠습니까?");
                Console.WriteLine("[1] 필드로 접속");
                Console.WriteLine("[2] 로비로 이동");
                Console.Write("선택 : ");
                sel = Console.ReadLine();
                switch (sel)
                {
                    case "1":
                        FieldEnter(ref player);
                        break;
                    case "2":
                        Console.Clear();
                        Console.WriteLine("로비로 이동했습니다.");
                        return;
                }
            }
        }
        
        static void SelectCharacter(out Player player)
        {
            Console.WriteLine("직업을 선택해주세요.");
            Console.WriteLine("[1] Knight");
            Console.WriteLine("[2] Archer");
            Console.WriteLine("[3] Mage");

            string sel;
            while (true)
            {
                Console.Write("선택 : ");
                sel = Console.ReadLine();
                switch (sel)
                {
                case "1":
                        player.hp = 50;
                        player.attack = 5;
                        player.job = ClassType.Knight;
                        return;
                case "2":
                        player.hp = 30;
                        player.attack = 9;
                        player.job = ClassType.Archer;
                        return;
                case "3":
                        player.hp = 10;
                        player.attack = 20;
                        player.job = ClassType.Mage;
                        return;
                }
            }
        }

        static void Main(string[] args)
        {
            Player player;
            while (true)
            {
                SelectCharacter(out player);
                EnterGame(ref player);
            }
        }
    }
}

0개의 댓글