K-digital traning/C#프로그래밍

주말과제...

내꺼블로그 2023. 7. 31. 00:43

※ 끝까지 하지 못하였습니다... 죄송합니다...

    (못한 부분 - 데이터 세이브(직렬화), 미션 출력, 미션 완료 시 드롭된 아이템 획득, 인벤토리 등)

냥코대전쟁이라는 게임을 토대로 제작되었습니다...

 

(1)DataManager.cs

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

namespace HomeWork
{
    public class DataManager
    {
        public static readonly DataManager Instance = new DataManager();
        Dictionary<int, MissionData> dicMissionData = new Dictionary<int, MissionData>();
        Dictionary<int, ItemData> dicItemData = new Dictionary<int, ItemData>();

        //생성자
        private DataManager()
        {

        }

        public void LoadMissionData()
        {
            string json = File.ReadAllText("./mission_data.json");
            MissionData[] missionDatas = JsonConvert.DeserializeObject<MissionData[]>(json);
            dicMissionData = missionDatas.ToDictionary(x => x.id);
        }

        public void LoadItemData()
        {
            string json = File.ReadAllText("./reward_item_data.json");
            ItemData[] itemDatas = JsonConvert.DeserializeObject<ItemData[]>(json);
            dicItemData = itemDatas.ToDictionary(x => x.id);
        }

        public ItemData GEtItemData(int id)
        {
            return dicItemData[id];
        }

        public MissionData GetMissionData(int id)
        {
            return dicMissionData[id];
        }
    }
}

 

 

 

(2)InfoManager.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HomeWork
{
    public class InfoManager
    {
        public static readonly InfoManager Instance = new InfoManager();
        public GameInfo gameInfo;
        private InfoManager()
        {

        }

        public void Init(GameInfo gameInfo)
        {
            this.gameInfo = gameInfo;
        }
    }
}

 

 

 

(3) GameInfo.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HomeWork
{
    public class GameInfo
    {
        public List<MissionInfo> missionInfo;

        public GameInfo()
        {

        }

        public void Init()
        {
            this.missionInfo = new List<MissionInfo>();
        }
    }
}

 

 

 

(4)MissionData.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HomeWork
{
    public class MissionData
    {
        //멤버변수
        public int id;
        public string name;
        public int goal;
        public int reward_item_id;
        public int reward_item_amount;
    }
}

 

 

 

(5)MissionInfo.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HomeWork
{
    public class MissionData
    {
        //멤버변수
        public int id;
        public string name;
        public int goal;
        public int reward_item_id;
        public int reward_item_amount;
    }
}

 

 

 

(6)Mission.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HomeWork
{
    public class Mission
    {
        public MissionInfo missionInfo;

        public Mission(int id, int progress, int state)
        {
            this.missionInfo.id = id;
            this.missionInfo.progress = progress;
            this.missionInfo.state = state;
        }
    }
}

 

 

 

 

(7)ItemData.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HomeWork
{
    public class ItemData
    {
        public int id;
        public string name;
    }
}

 

 

 

 

(8)Item.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HomeWork
{
    public class Item
    {
        public ItemData itemData;

        public Item(ItemData itemData)
        {
            this.itemData = itemData;
        }
    }
}

 

 

 

 

(9)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HomeWork
{
    public class Player
    {
        public List<Mission> missions;
        public Action<int> onCompleteMission;

        public Player()
        {
            
        }
        public void AcceptMission(int id)
        {
            missions.Add(new Mission(id, 0, 0));
        }

        public void DoMission(int id)
        {
            for(int i=0;i<this.missions.Count; i++)
            {
                if (this.missions[i].missionInfo.id == id)
                {
                    this.missions[i].missionInfo.progress++;
                    if (this.missions[i].missionInfo.progress == DataManager.Instance.GetMissionData(id).goal)
                    {
                        this.missions[i].missionInfo.state = 1;
                        this.onCompleteMission(DataManager.Instance.GetMissionData(id).reward_item_id);
                    }
                    break;
                }
            }
        }

    }
}

 

 

 

(10)App.cs

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

namespace HomeWork
{
    public class App
    {
        Player player;
        public App()
        {
            DataManager.Instance.LoadMissionData();
            DataManager.Instance.LoadItemData();

            GameInfo gameInfo = null;
            bool newbie = true;

            if (File.Exists("./mission_info.json"))
            {
                newbie = false;
                string json = File.ReadAllText("./mission_info.json");
                gameInfo = JsonConvert.DeserializeObject<GameInfo>(json);
                Console.WriteLine("기존유저다냥");
                Console.WriteLine(gameInfo.missionInfo);
            }
            else
            {
                gameInfo = new GameInfo();
                gameInfo.Init();
                Console.WriteLine("신규유저다냥, 환영한다냥");
            }

            InfoManager.Instance.Init(gameInfo);
            player.onCompleteMission = (id) =>
            {
                ItemData temp = DataManager.Instance.GEtItemData(id);
                Console.WriteLine("미션을 완료했다냥, 아이템{0}을 획득하라냥", temp.name);
                Item dropItem = new Item(temp);
            };
        }
    }
}

'K-digital traning > C#프로그래밍' 카테고리의 다른 글

대리자 연습 - Hero HitDamage  (0) 2023.07.27
대리자 연습 - 데이터매니저 로드  (0) 2023.07.27
대리자 연습 - Hero 이동  (0) 2023.07.27
가짜 인벤토리 만들기  (0) 2023.07.26
2차원 배열 연습  (0) 2023.07.25