Item 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FakeInventory
{
public class Item
{
ItemInfo info;
public string Name
{
get
{
ItemData data = DataManager.instance.GetItemData(this.info.id);
return data.name;
}
}
//생성자
public Item(ItemInfo info)
{
this.info = info;
}
public int GetID()
{
return this.info.id;
}
public int GetDamage()
{
return this.info.damage;
}
}
}
ItemData 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FakeInventory
{
public class ItemData
{
public int id;
public string name;
public int damage;
}
}
ItemInfo 클래스
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FakeInventory
{
//저장객체
public class ItemInfo
{
public int id;
public int damage;
//생성자
public ItemInfo(int id, int damage)
{
this.id = id;
this.damage = damage;
}
}
}
DataManager
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft;
using Newtonsoft.Json;
namespace FakeInventory
{
public 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");
//역직렬화
ItemData[] arr = JsonConvert.DeserializeObject<ItemData[]>(json);
//dictionary에 옮겨담기 .. foreach 랑 --> 인스턴스 필요
foreach (ItemData data in arr)
{
this.dicItemDatas.Add(data.id, data);
}
Console.WriteLine(this.dicItemDatas.Count);
}
public ItemData GetItemData(int id)
{
return this.dicItemDatas[id];
}
}
}
App
using System;
using System.Collections.Generic;
using System.Data;
using System.Dynamic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft;
using Newtonsoft.Json;
namespace FakeInventory
{
public class App
{
Dictionary<int, ItemData> dicItemDatas;
//생성자
public App()
{
//게임 시작 전 게임에서 사용할 데이터 로드
DataManager.instance.LoadItemDatas();
//게임시작 : 기본무기 : 신규유저
ItemData data = DataManager.instance.GetItemData(100);
ItemInfo info = new ItemInfo(data.id, data.damage);
Item item = new Item(info);
int id = item.GetID();
}
}
}
App
using System;
using System.Collections.Generic;
using System.Data;
using System.Dynamic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft;
using Newtonsoft.Json;
namespace FakeInventory
{
public class App
{
Dictionary<int, ItemData> dicItemDatas;
//생성자
public App()
{
//게임 시작 전 게임에서 사용할 데이터 로드
DataManager.instance.LoadItemDatas();
//파일이 있는가?
if (File.Exists("./item_info.json"))
{
//있다 : 기존유저
Console.WriteLine("기존유저입니다.");
string json = File.ReadAllText("./item_info.json");
//역직렬화 문자열 -> 객체 DeserializeObject
ItemInfo info = JsonConvert.DeserializeObject<ItemInfo>(json);
Item item = new Item(info);
int id = item.GetID();
string name = item.Name;
int damage = item.GetDamage();
Console.WriteLine("ID: {0}", id);
Console.WriteLine("이름: {0}", name);
Console.WriteLine("공격력: {0}", damage);
}
else
{
//없다 : 신규유저
Console.WriteLine("신규유저입니다.");
//게임시작 : 기본무기 : 신규유저
ItemData data = DataManager.instance.GetItemData(100);
ItemInfo info = new ItemInfo(data.id, data.damage);
Item item = new Item(info);
int id = item.GetID();
string name = item.Name;
int damage = item.GetDamage();
Console.WriteLine("ID: {0}", id);
Console.WriteLine("이름: {0}", name);
Console.WriteLine("공격력: {0}", damage);
//직렬화 SerializeObject
//객체 -> 문자열
string json = JsonConvert.SerializeObject(item.GetInfo());
Console.WriteLine(json);
//파일로 저장
File.WriteAllText("./item_info.json", json);
}
}
}
}
ItemInfo
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FakeInventory
{
//저장객체
public class ItemInfo
{
public int id;
public int damage;
//생성자
public ItemInfo(int id, int damage)
{
this.id = id;
this.damage = damage;
}
}
}
Item
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FakeInventory
{
public class Item
{
ItemInfo info;
public string Name
{
get
{
ItemData data = DataManager.instance.GetItemData(this.info.id);
return data.name;
}
}
//생성자
public Item(ItemInfo info)
{
this.info = info;
}
public int GetID()
{
return this.info.id;
}
public int GetDamage()
{
return this.info.damage;
}
public ItemInfo GetInfo()
{
return this.info;
}
}
}
DataManager
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft;
using Newtonsoft.Json;
namespace FakeInventory
{
public 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");
//역직렬화
ItemData[] arr = JsonConvert.DeserializeObject<ItemData[]>(json);
//dictionary에 옮겨담기 .. foreach 랑 --> 인스턴스 필요
foreach (ItemData data in arr)
{
this.dicItemDatas.Add(data.id, data);
}
Console.WriteLine(this.dicItemDatas.Count);
}
public ItemData GetItemData(int id)
{
return this.dicItemDatas[id];
}
}
}
ItemData
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FakeInventory
{
public class ItemData
{
public int id;
public string name;
public int damage;
}
}
App
DataManager로 아이템 정보를 ItemData에 저장한다.
ItemInfo 에 id와 damage를 저장한다.
Item을 만든다.
id, name, damage의 정보를 Item에서 가져온다
직렬화 -- 객체 -> 문자열
파일 저장
ItemInfo
아이템데이터의 정보가 들어있다. ItemData에서 정보를 가져다 쓸 수 있음.
Item
GetID
GetDamage
GetInfo
로 정보 가져오기
DataManager
역직렬화 ,아이템 로드 및 ItemData[]로 Dictionary에 옮겨담기
ItemData
아이템데이터가 들어있다, item_data.json 파일의 내용이 들어있음. [생성자 필요 X]
name을 저장안하는건 id만 저장하면 name은 알아서 불러올 수 있다.
쪼개서 연습하기 -- 새로운 프로젝트로..연습
'C#프로그래밍' 카테고리의 다른 글
주말과제 (0) | 2023.07.28 |
---|---|
장비 착용, 몬스터 공격, 인벤토리, 아이템 지급 (0) | 2023.07.28 |
엑셀데이터를 JSON, JSON online viewer (0) | 2023.07.27 |
람다, Action<T> , Func<T> (0) | 2023.07.27 |
대리자, 무명메서드 (0) | 2023.07.27 |