Text RPG 개인과제 완료

2025. 10. 1. 22:03개발

 

 

10월의 첫째날 공부시간..

 

 

 

화면 기록 2025-10-01 오후 8.20.33.mov
6.24MB

                전체 게임 콘솔창 녹화화면

 

텍스트RPG 스틸샷

 

 

 

아진짜 너무 어렵다..

 

 

 

 

펼치면 전체코드

더보기
namespace ConsoleApp;


    public class Character
    {
        public int level = 255;
        public string name = "daisy";
        public string job = "wizard";
        public int attack = 300; 
        public int defense = 500;
        public int health = 200;
        public int Gold = 1000;
        
    }

    public class TextRpg 
    { 
        Character character = new Character();

       string[] itemNames = 
        {
            "무쇠갑옷", //0
            "낡은 검", //1
            "연습용 창", //2
        };
       
        int[] itemTypes = //아이템 타입 배열
        {
            1, //방어구
            0, //무기
            0  
        };

        int[] itemStats = //아이템 공격력 배열
        {
            5, //무쇠갑옷, 방어력
            2, //낡은 검, 공격력
            3 //연습용 창, 공격력
        };

        string[] itemAbout = //아이템 설명 배열
        {
            "무쇠로 만들어져 튼튼한 갑옷입니다.", 
            "쉽게 볼 수 있는 낡은 검입니다.",   
            "검보다는 그대로 창이 다루기 쉽죠."  
        };
        
        //장착여부 배열 만들기 
        bool [] equipment =
        {
            false,
            false,
            false
        };
        
        
        static void Main()
        {
            TextRpg textRpg  = new TextRpg();
            textRpg.Intro();
        }
        
        public void Intro()
        {
            while(true)
            {
                
                Console.WriteLine("스파르타 마을에 오신 여러분 환영합니다.\n이곳에서 던전으로 들어가기 전 활동을 할 수 있습니다.");
                Console.WriteLine("1.상태 보기\n2.인벤토리");
                Console.WriteLine("원하시는 행동을 입력해주세요.");
                
                    string input = Console.ReadLine();
                    if (input == "1") 
                    {
                        Console.WriteLine("상태보기를 선택했습니다.");
                        Information(); 
                    }
                    else if (input == "2")
                    {
                        Console.WriteLine("인벤토리를 선택했습니다."); 
                        Inventory();
                    }
                    else
                    {
                        Console.WriteLine("잘못된 입력입니다.");
                    }
                
            }
            
        }
        public void Information() //캐릭터 정보 기능 매서드
        {
            while (true)
            {
                Console.Clear();
                Console.WriteLine("상태 보기 \n 캐릭터의 정보가 표시됩니다.");
                Console.WriteLine($"Level: {character.level}\n{character.name}( {character.job} )\n공격력: {character.attack}()\n방어력: {character.defense}()\n체력: {character.health}\nGold: {character.Gold} G");
                
                Console.WriteLine("0.나가기");
                Console.WriteLine("원하시는 행동을 입력해주세요.");
                
                string input = Console.ReadLine();
                
                    if  (input == "1")
                    {
                        Console.WriteLine(character.name);
                        Console.WriteLine(character.job);
                        Console.WriteLine(character.level);
                        Console.WriteLine(character.health);
                        Console.WriteLine(character.Gold);
                        Console.WriteLine(character.attack);
                        Console.WriteLine(character.defense);
                    }
                    else if (input == "0")
                    {
                        Console.Clear();
                        TextRpg textRpg  = new TextRpg();
                        textRpg.Intro();
                    }
            }
        }
        
        public void InventoryList() 
        { 
            for (int i = 0; i< 3; i++)
            {
                Console.Write($"-{itemNames[i]}");
                
                if (equipment[i]==true)
                {
                    Console.Write("[E]");
                }
                if (itemTypes[i] == 0)
                {
                    Console.Write($"\t공격력+{itemStats[i]}");
                }
                else if (itemTypes[i] == 1)
                {
                    Console.Write($"\t방어력+{itemStats[i]}");
                }
             
                Console.WriteLine($"|\t{itemAbout[i]}");
            }
        } 

        public void Inventory() 
        {
            while (true)
            {
                Console.Clear();
                Console.WriteLine("인벤토리");
                Console.WriteLine("보유 중인 아이템을 관리할 수 있습니다.");
                Console.WriteLine("[아이템 목록]");
                
                //아이템 목록 호출
                InventoryList();
               

                Console.WriteLine("1.장착 관리");
                Console.WriteLine("0.나가기");
                string input = Console.ReadLine();
                
                
                if (input == "1")
                {
                    Console.WriteLine("장착 관리를 실행합니다");
                    Equipment(character);
                }
                else if (input == "0")
                {
                    Console.Clear();
                    break;
                }
                else
                {
                    Console.WriteLine("잘못된 입력입니다.");
                }
                
            }
        }
        
        
        //장착관리 매서드 
        public void Equipment(Character character){
            Console.Clear();
           
            for (int i = 0; i<itemNames.Length; i++)
            {
                Console.Write($"{i+1}{itemNames[i]}"); 
                if (equipment[i]==true)
                {
                    Console.Write("[E]");
                }
                if (itemTypes[i] == 0)
                {
                    Console.Write($"\t공격력+{itemStats[i]}");
                }
                else if (itemTypes[i] == 1)
                {
                    Console.Write($"\t방어력+{itemStats[i]}");
                }
                
             
                Console.WriteLine($"|\t{itemAbout[i]}");
            }
            
            
            string input = Console.ReadLine(); 
            int idx = int.Parse(input)-1;   
            
           
           if (equipment[idx]==false)
           {
               equipment[idx] = true;
               if (itemTypes[idx] == 0) //무기
               {
                   character.attack += itemStats[idx]; //무기+(공격력)
               }
               else if (itemTypes[idx] == 1)//방어구
               {
                   character.defense += itemStats[idx]; //방어구 +방어력
               }
           }
           else //해제
           {
               equipment[idx] = false;
               if (itemTypes[idx] == 0) //무기
               {
                   character.attack -= itemStats[idx]; //무기-(공격력)
               }
               else if (itemTypes[idx] == 1)//방어구
               {
                   character.defense -= itemStats[idx]; //방어구 -방어력
               }
           }
           
           InventoryList();
           
            string input2 = Console.ReadLine();
            if (input2 == "0")
            {
                Console.Clear();
                TextRpg textRpg  = new TextRpg();
            }
            
            if (equipment[idx]==true)
            {
              InventoryList();
              Information();
            }
            

        }
    }



 

그래도 젭코 500 땄다 가영아..

토닥토닥..ㅜㅜ

 

 

 

 

오늘 배운거 self설명 들어갈게요..

 

 

 


 

step 1. 게임 시작 문구 출력

 

 

이 부분은 이제 와서 생각해보니 어려울게 별로 없었는데, 왤케 튜터님 잡고 늘어졌지..큼큼;

 

콘솔창에서 이렇게 뜨면 됩니다.

 

 

진짜 별거 없어요..

console.writeline 으로 문구들 쓰고

이스케이프 \n 달아서 엔터 달아주면 됩니다.

 

유저에게 값 입력 받기 위해서 

string input = console.readline() 

달아주고

 

입력 값마다 어떤 문구 띄워줘야하는지 조건문 쓰면 됩니다.

 

ㄹㅇ 별거 없음.

 

나중에 참고하라고 이스케이프 어케 쓰는지 띄워드릴게요

 

 

 

스탭 2에서 캐릭터 정보 만들어달라고 해서

이렇게 클래스 따로 만들어서

캐릭터의 정보들을 넣어줍니다.

 

튜터님들이 누누이 말씀해주셨지만

클래스 = 붕어빵 틀! / 설계도!

안에 들어가는건 앙고~

 

 

 

 

자 스탭3 넘어오면 캐릭터의 상태를 보여줘야해요.

이전 것들은 지워주어야겠죠

 

 

Console.Clear();

이걸 통해서 지워줄 수 있습니다.

이렇게 캐릭터 정보들 받아와서 writeline으로 작성합니다.
그럼 이렇게 떠요

if input 1은 그냥 백그라운드에 있는 정보들일 뿐,

유저창에는 보이지 않습니다.

 

유저창에 보이라면 저 위에 기다란 코드에서 설정하면 됨.

 

0누르면 다시 시작화면으로 돌아갑니다.

 

 

이제 스텝 4로 넘어가요..

before
after

 

오.. 여기 배열을 묶음으로 만들어버리는게 너무 어려웠어요 ....

 

근데 했죠?

 

아이템 이름, 타입, 공격력, 설명 다 배열로 만들었습니다. 

그리고 bool로 장비 장착여부 배열까지 만들었어요

 

장비 장착여부 배열

 

장비를 장착했는지 아닌지를 알아야하잖아요?

 

~인지

~아닌지

 

선택지가 true와 false로 나뉘는 자료형. bool을 써야겠지요?

 

근데 여기서 전부 false를 쓴 이유는

장비를 착용하지 않은 상태가 기본상태이기 때문입니다.

그리고 false를 3번이나 쓴 이유는

다른 배열들도 다 값이 3개씩 있기 때문이죠.

 

이렇게요.

 

 

반복문은 무조건 for문 써야합니다. 

아이템 목록 호출에다가 반복문을 써서

아이템 배열들의 인덱스 값들을 writeline으로 호출해왔어요.

 

백그라운드의 인덱스는 조건에서처럼 0~2일때 반복호출되는거겠죠.

 

 

이제 일치하는 아이템 쓸거에요.

 

그러면 유저한테 어떤 아이템 선택할건지 입력 받아야해요.

근데 백그라운드의 input값이랑

유저가 선택한 input값이랑 달라요

 

백그라운드 input =>(0,1,2)

유저선택 input => (1,2,3)

 

그래서 값을 동일하게 해주려면

input에다가 -1해준겁니다.

 

자세한 설명...자세한 설명...

 

빼기를 쓰는 다른 방법들.

이렇게도 쓸 수 있어요

우린 정석대로 갑시다.

 

 

튜터님의 자세한 설명..22

 

 

 

자 다음 스탭 넘어가요..

이제 장착했을 때 [E]달아줄거에요.

이 역시 조건문으로

보간 달아서

배열 불러와주고

 

1은 방어구

0은 무기죠

 

그쵸..

 

 

마찬가지로 이큅먼트 매서드 안에서 

장비 장착하고 있지 않을 때 무기+공격력

방어구+방어력 

코드 작성해주고

 

장착 안하면 그냥 빼주면 됩니다

-=

 

이러면 끝..

 

'개발' 카테고리의 다른 글

C#으로 블랙잭 게임 만들기  (0) 2025.10.13
C# 스네이크게임 만들기  (0) 2025.10.09
Text RPG 개발-2  (0) 2025.09.30
C#문법 종합 개인과제 [도전! 던전 탈출]  (1) 2025.09.29
C#기초 공부 / void랑 class 차이점  (0) 2025.09.28