본문 바로가기
KDT/C# 프로그래밍

23/07/27 아이템 정보 저장하기

by 잰쟁 2023. 7. 27.
728x90
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace starcraft
{
    internal class DataManager
    {
        public static readonly DataManager instance = new DataManager();
        private Dictionary<int, ItemData> dicItemDatas = new Dictionary<int, ItemData>(); //아이템 데이터를 딕셔너리에 관리

        //생성자
        private DataManager() { }

        //아이템 데이터 로드 메서드
        public void LoadItemDatas()
        {
            //파일을 읽기
            string json = File.ReadAllText("./item_data.json");
            Console.WriteLine(json);

            //역직렬화
            ItemData[] arrItemDatas = JsonConvert.DeserializeObject<ItemData[]>(json);
            Console.WriteLine(arrItemDatas.Length);  //2

            //컬렉션 사용전 반드시 인스턴스화
            //dicItemDatas = arr.ToDictionary(x = x.id);   <== 이렇게 해도 됨!!
            foreach (ItemData data in arrItemDatas)
            {
                this.dicItemDatas.Add(data.id, data);  //딕셔너리에 아이템데이터 저장
            }           
        }

        //아이템데이터 반환 메서드 (딕셔너리 안에 아이템 id로 찾아서 아이템데이터 출력)
        public ItemData GetItemData(int id)
        {
            return this.dicItemDatas[id];
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace starcraft
{
    internal class ItemData
    {
        public int id;
        public string name;
        public int damage;
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace starcraft
{
    public class Item
    {
        public ItemInfo info;
        
        //생성자
        public Item(ItemInfo info)
        {
            this.info = info;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Permissions;
using System.Text;
using System.Threading.Tasks;

namespace starcraft
{

    //저장객체!!!
    public class ItemInfo
    {
        public int id;
        public int damage;

        //생성자
        public ItemInfo(int id,int damage)
        {
            this.id = id;
            this.damage = damage;
        }
    }
}
using System;
using System.IO;
using Newtonsoft;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;

namespace starcraft
{
    public class App
    {  

        //생성자
        public App()
        {
            
        }

    }
}


대리자(delegate)
- 대리자는 인스턴스가 아닌 형식!!
- 인스턴스화 필수
- 대리자는 메서드를 다른 메서드의 인수로 전달 가능
(대리자 인스턴스가 필요, 인스턴스에 메서드 연결되어있음)

1. 형식 생성
2. 인스턴스 생성
3. 메서드 연결
4. 사용

-사용자 지정형식
enum / class/ struct/ delegate


람다
- 익명 함수를 만들기 위해 사용
- 람다 선언 연산자: =>

'KDT > C# 프로그래밍' 카테고리의 다른 글

23/07/28 게임 세팅  (0) 2023.07.28
23/07/27 과제(복습)  (0) 2023.07.27
23/07/27 대리자 연습  (0) 2023.07.27
23/07/27 Action 대리자  (0) 2023.07.27
23/07/27 데이터매니저 데이터로드  (0) 2023.07.27