C#/수업 내용

상점 목록 및 미션 목록 & 보상 출력 (역직렬화 이용)

Bueong_E 2023. 1. 13. 13:19
반응형
SMALL

상점 아이템 목록

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;

namespace Study013
{
    class App
    {
        public App()
        {
            //Json 데이터 불러오기
            string json = File.ReadAllText("./item_data.json");

            //foreach를 사용하여 Dictionary 컬렉션에 할당 하는 방법

            //ItemData[] itemDatas = JsonConvert.DeserializeObject<ItemData[]>(json);
            //Dictionary<int, ItemData> itemLists = new Dictionary<int, ItemData>();
            //foreach (var itemdata in itemDatas)
            //{
            //    itemLists.Add(itemdata.id, itemdata);
            //    Console.WriteLine(itemdata);
            //}


            // LINQ 사용하여 Dictionary 컬렉션에 할당 하는 방법

            var itemLists = JsonConvert.DeserializeObject<ItemData[]>(json).ToDictionary(x => x.id);







            //내용물 출력
            foreach (var itemList in itemLists)
            {
                int id = itemList.Key;
                ItemData data = itemList.Value;
                Console.WriteLine("{0},{1},{2}", id, data.name, data.damage);
            }


            
        }
    }
}

미션 목록 및 보상

App Class

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;

namespace Study013
{
    class App
    {
        public App()
        {
            string missionJson = File.ReadAllText("./mission_data.json");
            string itemJson = File.ReadAllText("./item_data.json");

            var missionLists = JsonConvert.DeserializeObject<MissionData[]>(missionJson).ToDictionary(x => x.id);
            var itemLists = JsonConvert.DeserializeObject<ItemData[]>(itemJson).ToDictionary(x => x.id);
           
            foreach (var missionList in missionLists)
            {
                foreach (var itemList in itemLists)
                {
                    if(itemList.Value.id == missionList.Value.resultItem)
                    {                      
                        Console.WriteLine("미션 : {0}", missionList.Value.mossion);
                        Console.WriteLine("미션 내용 : {0}", missionList.Value.missionStory);
                        Console.WriteLine("미션 목표 : {0}", missionList.Value.objective);
                        Console.WriteLine("미션 보상 : {0}X{1}\n", itemList.Value.name, missionList.Value.itemNum);                       
                    }                   
                }
            }            
        }
    }
}

결과창

선생님이 만드신 코드

 

using System;
using System.IO;
using System.Collections.Generic;
using Newtonsoft.Json;
using System.Linq;

namespace Study12
{
    class App
    {
        Dictionary<int, MissionData> dicMissionData;
        Dictionary<int, ItemData> dicItemData;
        Button btnMission;

        //생성자 
        public App()
        {
            //-------------- 게임 준비 과정 ------------------------------------------
            //데이터 관련 준비 
            this.dicMissionData = new Dictionary<int, MissionData>();
            //this.dicItemData = new Dictionary<int, ItemData>();
            this.LoadMissionData();
            this.LoadItemData();

            //UI준비 과정 
            this.btnMission = new Button();
            //----------------------------------------------------------------------------


            //사용자가 미션버튼을 눌렀다면 
            //미션 팝업을 보여준다 
            this.btnMission.onClick = () => {
                this.OpenMissionPopup();
            };

            //사용자거 버튼을 눌렀다 
            this.btnMission.Click();
        }

        private void OpenMissionPopup()
        {
            //미션 목록을 보여준다 
            Console.WriteLine("미션 목록을 보여준다 ");
            //늑대잡기
            //늑대 10마리를 잡아오세요
            //보상: 골드 x 2,000
            foreach (KeyValuePair<int, MissionData> pair in this.dicMissionData)
            {
                MissionData data = pair.Value;
                Console.WriteLine(data.name);
                //Console.WriteLine("늑대 {0}마리를 잡아오세요", data.goal);
                Console.WriteLine(data.desc, data.goal);
                ItemData itemData = this.dicItemData[data.reward_item_id];
                string rewardName = itemData.name;
                Console.WriteLine("보상: {0} x {1}", rewardName, data.amount);
                Console.WriteLine();
            }
        }

        private void LoadMissionData()
        {
            var path = "./mission_data.json";
            var json = File.ReadAllText(path);
            MissionData[] arr = JsonConvert.DeserializeObject<MissionData[]>(json);
            foreach (var data in arr) 
                this.dicMissionData.Add(data.id, data);

            Console.WriteLine("LoadMissionData: {0}", dicMissionData.Count);
        }

        private void LoadItemData()
        {
            var path = "./item_data.json";
            var json = File.ReadAllText(path);
            ItemData[] arr = JsonConvert.DeserializeObject<ItemData[]>(json);
            this.dicItemData = arr.ToDictionary(x => x.id);

            Console.WriteLine("LoadItemData: {0}", dicItemData.Count);
        }
    }
}
​

 

  • foreach 를 사용하여 집어 넣는 방법과 LINQ를 이용하는 방법 두가지 모두 많이 써봐야겠다.
  • ToDictionary 에 집어넣는 X는 실무자들 사이에서 암묵적으로 넣는것
  • btn은 실무자들이 사용하는 Button의 약어
  • 컬렉션들은 따로 뽑아 낼 필요 없환 가능하다.
  • 선생님 코드 한줄 한줄 주석을 달아서 코드를 분석해보는것도 의미가 있을듯 하다.
반응형
LIST