c#/수업 내용

변하는 데이터 만들기 연습

yeeendy 2023. 1. 15. 19:14
namespace Study12
{
    class ItemData
    {
        public int id;
        public string name;
    }
}​
namespace Study12
{
    class MissionData
    {
        public int id;
        public string name;
        public string desc;
        public int goal;
        public int reward_item_id;
        public int amount;
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study12
{
    class GameInfo
    {
        public List<MissionInfo> missionInfos;

        //변하는 데이터
        //생성자 필요
        public GameInfo()
        {

        }

        public void Init()
        {
            this.missionInfos = new List<MissionInfo>();
        }
    }
}​
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study12
{
    class Button
    {
        public Action onClick;
        //생성자
        public Button()
        {

        }
        
        public void Click()
        {
            this.onClick();
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using System.IO;

namespace Study12
{
    class App
    {

        Dictionary<int, MissionData> dicMissionData;
        Dictionary<int, ItemData> dicItemData;
        Button btnMission;

        GameInfo gameInfo;

        //생성자
        public App()
        {
            //-----------게임 준비 과정--------------
            this.dicMissionData = new Dictionary<int, MissionData>();

            this.LoadMissionData();
            this.LoadItemData();

            this.btnMission = new Button();
            //---------------------------------------

            bool newbie = this.IsNewbie();
            if (newbie)
            {
                Console.WriteLine("신규유저");
                this.gameInfo = new GameInfo();
                //**********************************
                this.gameInfo.Init();
                //**********************************
                this.SaveGameInfo();
            }
            else
            {
                Console.WriteLine("기존유저");
                var json = File.ReadAllText(GameConstants.GAME_INFO_PATH);
                this.gameInfo = JsonConvert.DeserializeObject<GameInfo>(json);
                Console.WriteLine(this.gameInfo);
                Console.WriteLine(this.gameInfo.missionInfos);
            }
                



            this.btnMission.onClick = () =>
            {
                this.OpenMissionPopup();
            };

            this.btnMission.Click();

            this.KillWolf();
        }
        private void KillWolf()
        {
            int targetMissionId = 1000;
            Console.WriteLine("늑대를 잡았습니다.");
            MissionInfo info = this.gameInfo.missionInfos.Find(x => x.id == targetMissionId);
            if(info != null)
            {
                info.count++;
            }
            else
            {
                var myInfo = new MissionInfo();
                myInfo.id = targetMissionId;
                myInfo.count = 1;
                this.gameInfo.missionInfos.Add(myInfo);
            }

            //저장
            this.SaveGameInfo();
        }

        private void SaveGameInfo()
        {
            var json = JsonConvert.SerializeObject(this.gameInfo);
            Console.WriteLine(json);
            File.WriteAllText(GameConstants.GAME_INFO_PATH, json);
            Console.WriteLine("game_info가 저장되었습니다.");
        }
        private bool IsNewbie()
        {
            if (File.Exists(GameConstants.GAME_INFO_PATH))
                return false;
            else
                return true;
        }

        private void OpenMissionPopup()
        {
            Console.WriteLine("미션 목록을 보여준다.");

            foreach(KeyValuePair<int, MissionData> pair in this.dicMissionData)
            {
                MissionData data = pair.Value;
                Console.WriteLine(data.name);
                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);

                var info = this.gameInfo.missionInfos.Find(x => x.id == data.id);
                if(info != null)
                {
                    MissionData myMissionData = dicMissionData[info.id];
                    Console.WriteLine("진행률 : {0}/{1}", info.count, myMissionData.goal);
                }
                else
                {
                    Console.WriteLine("진행률 : {0}/{1}", 0, data.goal);
                }
                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);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study12
{
    class MissionInfo
    {
        public int id;
        public int count;
        //생성자
        public MissionInfo()
        {

        }
    }
}

GameConstants.GAME_INFO_PATH 이게 어디서 나온 건지 모르겠다

'c# > 수업 내용' 카테고리의 다른 글

LCRSTree  (0) 2023.01.17
인벤토리 만들기  (0) 2023.01.16
변하지 않는 데이터 만들기 연습 2 (Mission, Item)  (0) 2023.01.13
230113  (0) 2023.01.13
1/9 개수세기  (0) 2023.01.09