수업 014 (04.23 2020) 복습 - json, dictionary..etc

2020. 4. 23. 11:10
728x90

1. Sample

 

2. App.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Study._015
{
    class App
    {
        Dictionary<int, AchievementData> dicAchievementDatas;
        Dictionary<int, AchievementInfo> dicAchievementInfos;
 
        // 생성자
        public App()
        {
            // 파일불러오기
            string path = "./achievement_data.json";
            string json = File.ReadAllText(path);
 
            AchievementData[] arrAchievementDatas = JsonConvert.DeserializeObject<AchievementData[]>(json);
 
            this.dicAchievementDatas = new Dictionary<int, AchievementData>();
            foreach (AchievementData data in arrAchievementDatas)
            {
                dicAchievementDatas.Add(data.id, data);
            }
 
            // 업적들 저장할 곳
            this.dicAchievementInfos = new Dictionary<int, AchievementInfo>();
 
            if (File.Exists("./achievement_info.json"))
            {
                Console.WriteLine("\n===========  기존유저입니다 환영합니다!  ===========\n");
 
                string pathInfo = "./achievement_info.json";
                string jsonInfo = File.ReadAllText(pathInfo);
 
                AchievementInfo[] achievementInfos = JsonConvert.DeserializeObject<AchievementInfo[]>(jsonInfo);
 
                foreach (AchievementInfo info in achievementInfos)
                {
                    dicAchievementInfos.Add(info.id, info);
                }
            }
            else
            {
                Console.WriteLine("\n===========  신규유저입니다 환영합니다!  ===========\n");
 
                foreach (KeyValuePair<int, AchievementData> pair in dicAchievementDatas)
                {
                    AchievementInfo info = new AchievementInfo(pair.Key, 0);
                    this.dicAchievementInfos.Add(info.id, info);
                }
                this.SaveAchievement();
            }
 
            this.PrintAchievement(1000);
            this.DoAchievement(1000);
            this.SaveAchievement();
        }
 
        // 기능
        // 업적 보기
        public void PrintAchievement(int id)
        {
            Console.WriteLine("====================  업적보기 ==================== \n");
            AchievementData data = this.dicAchievementDatas[id];
            AchievementInfo info = this.dicAchievementInfos[id];
            Console.WriteLine("id: {0}\t name: {1}\t goal: {2}/{3}\t"data.id, data.name, info.count, data.goal);
            Console.WriteLine("{0} \n", data.description);
            Console.WriteLine("===================================================");
        }
 
        // 업적하기
        public void DoAchievement(int id)
        {
            AchievementData data= this.dicAchievementDatas[id];
            Console.WriteLine("업적 1개를 했습니다. ({0})", data.description);
 
            AchievementInfo info = this.dicAchievementInfos[id];
            info.count++;
        }
 
        // 업적들 저장하기
        public void SaveAchievement()
        {
            // 객체 (배열) > json 형식
            // 사전에 있는 AchievementInfo 객체를 배열에 담기
 
            int length = this.dicAchievementInfos.Count;
            AchievementInfo[] arrAchievementInfos = new AchievementInfo[length];
            int idx = 0;
            foreach (KeyValuePair<int, AchievementInfo> pair in this.dicAchievementInfos)
            {
                arrAchievementInfos[idx++= pair.Value;
            }
            foreach (AchievementInfo info in arrAchievementInfos)
            {
                string format = string.Format("id: {0}, count: {1}"info.id, info.count);
            }
 
            // 객체 > json 형식의 문자열
            string json = JsonConvert.SerializeObject(arrAchievementInfos);
 
            // 파일저장
            string path = "./achievement_info.json";
            File.WriteAllText(path, json);
        }
    }
}
 
 
 

 

2. AchievementData.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Study._015
{
    class AchievementInfo
    {
        public int id;
        public int count;
 
        public AchievementInfo(int id, int count)
        {
            this.id = id;
            this.count = count;
        }
    }
}
 
 
 

 

3. AchievementInfo.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Study._015
{
    class AchievementData
    {
        public int id;
        public string name;
        public int goal;
        public int reward_type;
        public int reward_amount;
        public string description;
 
        public AchievementData()
        {
        }
    }
}
 
 

 

4. Result

New user
Used user

728x90

BELATED ARTICLES

more