박민혁의 개발

우당탕쿵탕 text rpg 마무리 본문

TIL

우당탕쿵탕 text rpg 마무리

박민혁_kog 2023. 8. 23. 11:38

겪은 문제 

 

  • enum 사용해보기
    public enum ItemPlace
    {
        inventory = 1,
        shop,
    }
    // 소유를구별하기 위해 아이템위치를 만들어줌 그러나 enum선언위치를 프로그램 네에 하여 
    //메인 제외에선 1 2 로 사용 오히려 도움이안된 케이스

 

 

아이템 구현과 배열

        public void SellBuy(Item Item, int number, List<Item> inventorylist) //판매/구매
        {
            if (Item.checkE) //아이템의장착 여부 확인 
            {
                Console.WriteLine("장착중입니다");
                Console.WriteLine("");
                Console.Write(">>확인");
                Console.Read();
            }
            else//보유시 판매를 미보유시 구매를 
            {
                if (ItemPlace == 1)//보유
                {   //무한으로 판매되는 버그가 있었으나 고쳐짐 아마 리스트로 옮겨보려는 시도중 발생한것으로 추정되며 포기했다
                    inventory.Remove(Item.Code);// 딕셔너리로 만들어져있기에 키값으로 제거해줌 키값을 코드로 넣어서 코드 값으로 지운다
                                                // 허나 리스트 였다면 밸류에서 코드값으로 바꿀수 있었겠지.
                    //inventorylist.Remove(Item);
                    player.Gold += Item.Gold / 2;
                    Console.WriteLine($"{Item.Name}을 판매하여 {Item.Gold / 2}원을 획득하였습니다. ");
                    Console.WriteLine($"{player.Gold}을 보유중 입니다.");
                    //Console.WriteLine("{0}",Item.ItemPlace);
                    Console.WriteLine("");
                    Console.Write(">>확인");
                    Console.Read();
                    Item.ItemPlace = 2;
                    //Console.WriteLine("{0}", Item.ItemPlace);

                }

아이템 배열 본문편

//내가 아이템 배열 관리를 어떻게 했는가?

   Item item1 = new Item("낡은 검 ", 2, 0, 0, (int)ItemType.weapon, "Atk +2", "칼이라기 보단 몽둥이에 가까운 검", (int)ItemPlace.inventory, 10,1);
   Item item2 = new Item("무쇠 갑옷 ", 0, 5, 0, (int)ItemType.body, "Def +5", "무쇠로 만들어져 튼튼한 갑옷", (int)ItemPlace.inventory, 10,2);
   Item item3 = new Item("투구", 0, 0, 0, (int)ItemType.head, "Def +5", "그냥 흔한 투구", (int)ItemPlace.shop, 50,3);
   Item item4 = new Item("버거운 중갑 ", 0, 30, -30, (int)ItemType.body, "Def +50  Hp-30", "그 갑옷은 갑옷이라기엔 너무 커다랬다", (int)ItemPlace.shop, 50,4);
   
        //기본 아이템은 인벤토리에만 넣어주고 상점에선팔기를 위해 소유중인 아이템도 넣어준다
        inventory.Add(1, item1);
        inventory.Add(2, item2);
        shop.Add(1, item1);
        shop.Add(2, item2);
        shop.Add(3, item3);
        shop.Add(4, item4);

 

 

숫자 입력받기 -재귀 함수

상당히 맘에듬 허나 버그가 발생해서 그만 


    static int CheckNumber(int big)
    {
        string input = Console.ReadLine();
        int number;
        while (!int.TryParse(input, out number))
        {
            Console.WriteLine("범위에 맞는 '숫자'를 입력해주세요.");
            input = Console.ReadLine();
        }
        // 위에 까지는 흔히 문자 제외 받는 구성 이였으나 
        //그렇다면 1까지 선택지가 있으면 어떻게 하지? 란생각에 아래가 추가됨

        //while (number >= big)
        //{
        //    Console.WriteLine("범위 외의 숫자");
        //    number = CheckNumber(big); // 범위 외에 숫자일시 재귀를 통해 다시한번 입력 받을수 있음
        //}

        return number;
    }

 

 

딕셔너리와 for foreach문

    private static void ShopShow(Dictionary<int, Item> shop, List<Item> inventorylist)
    {
        //for (int i = 1; i < inventory.Count+1; i++) 
        //{
        //    Console.WriteLine( "이름{0} 효과 {1} 설명{2}", item[i].Name, item[i].Effect , item[i].Speedweagun);
        //}
        Console.Clear();
        Console.WriteLine("아이템목록입니다. ");
        Console.WriteLine("판매시 구매 가격의 50%로 구매해드립니다. ");
        Console.WriteLine();
        Console.WriteLine("0. 나가기");
        //for (int i = 1; i < shop.Count + 1; i++) // 깨달음의 흔적 딕셔너리는 키값으로 받기에 for문 사용시 키값 1 키값 3은 존재하나 키값2는 존재하지 않을시 버그 발생
        //{
        //    Console.WriteLine("{0}. {1} 구매 / 판매", i, shop[i].Name);
        // }
        foreach (KeyValuePair<int, Item> item2 in shop)
        {
            if (item2.Value.ItemPlace == 1)//보유체크
            {
                Console.Write("[보유]");
            }
            else 
            {
                Console.Write("[미보유]");
            }
            Console.WriteLine("{0}. {1} {2} {3} {4}G 구매 / 판매",item2.Value.Code, item2.Value.Name.PadRight(20 - item2.Value.Name.Length), item2.Value.Effect.PadRight(30 - item2.Value.Effect.Length), item2.Value.Speedweagun.PadRight(60 - item2.Value.Speedweagun.Length),item2.Value.Gold);
        }

정렬 실패

        foreach (KeyValuePair<int, Item> item2 in item)
        {
            Console.WriteLine("{0}. {1}  {2}  {3}  장착/해제", item2.Value.Code, item2.Value.Name.PadRight(20- item2.Value.Name.Length), item2.Value.Effect.PadRight(30- item2.Value.Effect.Length), item2.Value.Speedweagun.PadRight(40-item2.Value.Speedweagun.Length));
                                                                    // 결국 스페이스바 와 일반 글자의 크기 조절을 못해 반쪽짜리 정렬이 구현됨
        }

 

 

 

 

후기

 

 

구현 목표 
1. 게임 시작 화면
2. 상태보기                                                        
3. 인벤토리
4. 아이템 정보를 클래스 / 구조체로 활용해 보기
5. 아이템 정보를 배열로 관리하기
6. 아이템 추가하기
7. 콘솔 꾸미기
8. 인벤토리 크기 맞춤
9. 인벤토리 정렬하기
10. 상점 - 아이템 구매
10. - 1. 상점 - 아이템 판매 
11. 장착 개선 - 중복장착 불가 
12. 던전입장     -필수 요소 
12 - 1. 휴식 기능
12 - 2. 레벨업 기능   
13. end - 개인적으로 싱글 게임은 엔딩이 있어야 한다고 생각함



완성도  만족: ●   불만족 : ▲ 
1. 게임 시작 화면                                                   ●        
2. 상태보기                                                            ● 
3. 인벤토리                                                            ●   클래스로 만든 아이템을 딕셔너리를 이용해 관리함
4. 아이템 정보를 클래스 / 구조체로 활용해 보기   ●  아이템을 클래스로 만들음
5. 아이템 정보를 배열로 관리하기                         ●  3번과 같음
6. 아이템 추가하기                                                 ●
7. 콘솔 꾸미기                                                        ● 상점, 인벤토리,상태창 입장시 색을 조금 넣어줌
8. 인벤토리 크기 맞춤                                            ▲ 크기 맞춤을 글자length로 판별했는데 스페이스바와 글자 크기가 달라 길이가 반정도만 맞춰짐
9. 인벤토리 정렬하기                                             ▲ 딕셔너리로 관리를 시도한건 큰 실수 였음 키값,밸류 기준으로는 정렬할수 있었으나 밸류값안의 name값 기준 정렬을 실패함 
10. 상점 - 아이템 구매                                             ●
10. - 1. 상점 - 아이템 판매                                       ● bool변수를 하나 만들어 소유중인지 아닌지를 판별하여 관리 
11. 장착 개선 - 중복장착 불가                                  ● 플레이어에 무기 헬멧 갑옷 별로 bool 값을 체크 및 아이템에 타입값을 만들어 체크
12. 던전입장     -필수 요소                                      ● 
12 - 1. 휴식 기능                                                     ● 
12 - 2. 레벨업 기능                                                  ● 
13. end                                                                    ● 

 

ui나 텍스트 문자를 좀 더 게임 스럽게 꾸며 보려 했으나 생각보다 기능 구현에 시간이 많이들어 꾸미지 못한점이 아쉽게 느껴진다.

E의 약자는 Equip 뜻 장비하다 라는뜻이였다 E 약자 뜻 그런걸로 검색해도 못찾았었는데 찾음 ㅋㅋ

 

'TIL' 카테고리의 다른 글

후 ..  (0) 2023.08.28
알고리즘 시간 복잡도 정렬 조금  (0) 2023.08.25
textrpg 만들기 2일차 (3일차)  (0) 2023.08.22
textrpg 만들기 1일차 겪은 문제  (0) 2023.08.21
한 주 마무리 과제 정리  (0) 2023.08.18