SUGI_ 2023. 7. 4. 07:54
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TextRpgGame
{
    public class Player
    {
        public INFO m_tInfo;

        //데미지를 입는 함수
        public void SetDamage(int iAttack) { m_tInfo.iHp -= iAttack; }
        //플레이어 정보를 외부에서 볼수있는 함수
        public INFO GetInfo() { return m_tInfo; }
        //hp를 다시 설정해주는 함수
        public void SetHp(int iHp) { m_tInfo.iHp = iHp; }

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

            Console.WriteLine("직업을 선택하세요(1. 기사 2. 마법사 3. 도둑) : ");
            int iInput = 0;

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

            switch (iInput)
            {
                case 1:
                    m_tInfo.strName = "기사";
                    m_tInfo.iHp = 100;
                    m_tInfo.iAttack = 10;
                    break;
                case 2:
                    m_tInfo.strName = "마법사";
                    m_tInfo.iHp = 90;
                    m_tInfo.iAttack = 15;
                    break;
                case 3:
                    m_tInfo.strName = "도둑";
                    m_tInfo.iHp = 85;
                    m_tInfo.iAttack = 13;
                    break;
            }
        }

        public void Render()
        {
            Console.WriteLine("================================");
            Console.WriteLine("직업 이름 : " + m_tInfo.strName);
            Console.WriteLine("체력 : " + m_tInfo.iHp + "\t공격력 : " + m_tInfo.iAttack);
        }

        public Player() { }
        ~Player() { } //소멸자
    }
}​
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TextRpgGame
{
    public class Field
    {
        Player m_pPlayer = null;
        Monster m_pMonster = null;


        public void SetPlayer(ref Player pPlayer) {  m_pPlayer = pPlayer;  }

        public void Progress()
        {
            //사냥터로 들어왔다.
            int iInput = 0;

            while(true)
            {
                Console.Clear();

                m_pPlayer.Render();
                DrawMap();
                iInput = int.Parse(Console.ReadLine());

                if (iInput == 4)
                    break;

                if(iInput<=3)
                {
                    //몬스터를 만들고
                    //1번일때 초보몬스터 
                    //2번일때 중급몬스터 
                    //3번일때 고급몬스터
                    CreateMonter(iInput);
                    //싸운다.
                    Fight();
                }
            }
        }

        public void DrawMap()
        {
            Console.WriteLine("1. 초보맵");
            Console.WriteLine("2. 중수맵");
            Console.WriteLine("3. 고수맵");
            Console.WriteLine("4. 전단계");
            Console.WriteLine("=================");
            Console.WriteLine("맵을 선택하세요 : ");
        }

        //생성을 도와주는 함수
        //공장처럼 찍어낸다. 
        //팩토리 메서드 패턴
        public void Create(string _strName, int _iHp,int _iAttack,out Monster pMonster)
        {
            pMonster = new Monster(); //몬스터 생성 
            INFO tMonster = new INFO(); //몬스터데이터 메모리 주기 객체 생성

            tMonster.strName = _strName; //초보몬스터, 중급,고급
            tMonster.iHp = _iHp;   //체력
            tMonster.iAttack = _iAttack;//공격력

            pMonster.SetMonster(tMonster);  //생성된 데이터 INFO 클래스타입 인자로 데이터 세팅
        }


        public void CreateMonter(int input)
        {
            switch(input)
            {
                case 1:   //공장처럼 찍어내준다. gof의 디자인패턴
                          //디자인패턴 팩토리 메서드 패턴
                    Create("초보몹", 30, 3, out m_pMonster);
                    break;
                case 2:
                    Create("중수몹",60,6,out m_pMonster);
                    break;
                case 3:
                    Create("고수몹",90,9,out m_pMonster);
                    break;
            }
        }


        public void Fight()
        {
            int iInput = 0;

            while(true)
            {
                Console.Clear();     //콘솔화면 지움
                m_pPlayer.Render();  //플레이어 정보 출력
                m_pMonster.Render(); //몬스터 정보출력

                Console.WriteLine("1.공격 2.도망 : ");  //1,2 선택 표시
                iInput = int.Parse(Console.ReadLine()); //입력 받기

                if(iInput == 1) //공격
                {
                    //플레이어 데미지 주기  몬스터공격력 넣어서 데미지
                    m_pPlayer.SetDamage(m_pMonster.GetMonster().iAttack);
                    //몬스터 데미지 주기  플레이어 공격력 넣기
                    m_pMonster.SetDamage(m_pPlayer.GetInfo().iAttack);


                    if (m_pPlayer.GetInfo().iHp <= 0) //플레이어 체력이 0이하이면
                    {
                        m_pPlayer.SetHp(100); // 체력 100으로 다시 세팅
                        break;
                    }
                }


                if(iInput == 2 || m_pMonster.GetMonster().iHp <=0)
                {
                    m_pMonster = null;
                    break; //탈출
                }
            }
        }

        public Field() { }
        ~Field() { }

    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TextRpgGame
{
    public class Monster
    {
        public INFO m_tMonster;  //몬스터 데이터 

        public void SetDamage(int iAttack) { m_tMonster.iHp -= iAttack;  }  //들어오는 인자값으로 hp 감소
        public void SetMonster(INFO tMonter) { m_tMonster = tMonter; }  //INFO클래스 타입 인자로 몬스터데이터를 넣어준다.
        public INFO GetMonster() { return m_tMonster; }

        public void Render() //몬스터의 내용을 출력한다.
        {
            Console.WriteLine("======================");
            Console.WriteLine("몬스터 이름 : " + m_tMonster.strName);
            Console.WriteLine("체력 : " + m_tMonster.iHp + "\t공격력 : " + m_tMonster.iAttack);
        }


        public Monster(){ } //기본생성자
        ~Monster() { } //소멸자
    }
}
728x90