JSON, 데이터 관리 연습
JSON 다시만들기
-monster데이터, item데이터를 저장하는 딕셔너리 만들어 정보관리
1. 엑셀로 table 만든 후 json 변환
https://shancarter.github.io/mr-data-converter/
⊙ txt말고json으로 저장
2. ItemData, MonsterData 클래스 생성
3. DataManager 를 만들어 구조화하기
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace Starcraft
{
internal class DataManager
{//데이터 관리를 위한 DataManager 클래스
public static readonly DataManager Instance = new DataManager();
//아이템 데이터와 몬스터 데이터 저장을 위한 딕셔너리
private Dictionary<int, ItemData> dicItemDatas = new Dictionary<int, ItemData>();
private Dictionary<int, MonsterData> dicMonsterDatas = new Dictionary<int, MonsterData>();
//생성자
public DataManager() { }
//메서드
public void LoadItemDatas()//아이템 데이터를 로드하는 메서드
{//파일 읽기
string json = File.ReadAllText("./item_data.json");
Console.WriteLine(json);
Console.WriteLine("json 길이: {0}",json.Length);
if (json.Length == 0)//json에 아무것도 쓰여있지 않으면
{
Console.WriteLine("데이터에 문제가 있습니다.");
return;
}
}
}
}
먼저 json파일을 잘 읽어오는지 확인하였다.
+) File.ReadAllText를 쓰려면 System.IO 추가해야한다.
+)using Newtonsoft.Json 추가후 LoadItemDatas 수정 및 LoadMonsterDatas 작성
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;
namespace Starcraft
{
internal class DataManager
{//데이터 관리를 위한 DataManager 클래스
public static readonly DataManager Instance = new DataManager();
//아이템 데이터와 몬스터 데이터 저장을 위한 딕셔너리
private Dictionary<int, ItemData> dicItemDatas = new Dictionary<int, ItemData>();
private Dictionary<int, MonsterData> dicMonsterDatas = new Dictionary<int, MonsterData>();
//생성자
public DataManager() { }
//메서드
public void LoadItemDatas()//아이템 데이터를 로드하는 메서드
{//파일 읽기
string json = File.ReadAllText("./item_data.json");
// Console.WriteLine(json);
// Console.WriteLine("json 길이: {0}",json.Length);
if (json.Length == 0)//json에 아무것도 쓰여있지 않으면
{
Console.WriteLine("데이터에 문제가 있습니다.");
return;
}
//역직렬화하면 ItemData 객체들을 요소로 하는 배열 객체가 나온다.
var arr = JsonConvert.DeserializeObject<ItemData[]>(json);
//dictionary에 옮겨담기
foreach(ItemData data in arr)
{
this.dicItemDatas.Add(data.item_id, data);
}
//dicItemDatas = arr.ToDictionary(x => x.item_id);
Console.WriteLine("아이템 데이터 로드 완료:{0}", this.dicItemDatas.Count);//item 잘 옮겨담았는지 확인하기위한 출력
}
public void LoadMonsterDatas()//몬스터 데이터를 로드하는 메서드
{//파일 읽기
string json = File.ReadAllText("./monster_data.json");
// Console.WriteLine(json);
// Console.WriteLine("json 길이: {0}",json.Length);
if (json.Length == 0)//json에 아무것도 쓰여있지 않으면
{
Console.WriteLine("데이터에 문제가 있습니다.");
return;
}
//역직렬화하면 MonsterData 객체들을 요소로 하는 배열 객체가 나온다.
var arr2 = JsonConvert.DeserializeObject<MonsterData[]>(json);
//dictionary에 옮겨담기
foreach (MonsterData data2 in arr2)
{
this.dicMonsterDatas.Add(data2.monster_id, data2);
}
//dicItemDatas = arr.ToDictionary(x => x.item_id);
Console.WriteLine("몬스터 데이터 로드 완료:{0}", this.dicMonsterDatas.Count);//item 잘 옮겨담았는지 확인하기위한 출력
}
public MonsterData GetMonsterData(int monster_id)
{
return this.dicMonsterDatas[monster_id];
}
}
}
4. Game 클래스 만들고 영웅,몬스터 생성하기
-Hero, Monster 클래스 추가
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Starcraft
{
internal class Hero
{
public Hero() {
Console.WriteLine("영웅이 생성되었습니다.");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Starcraft
{
internal class Monster
{
private MonsterData data;
//생성자
public Monster(MonsterData data) {
this.data = data;
Console.WriteLine("몬스터가 생성되었습니다.");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Starcraft
{
internal class Game
{
private Hero hero;
private Monster monster;
//생성자
public Game() { }
//메서드
public void Start()
{
Console.WriteLine("게임이 시작 되었습니다.");
this.hero = this.CreatHero();
this.monster = this.CreateMonster(1000);
}
public Hero CreatHero()
{
return new Hero();
}
public Monster CreateMonster(int monster_id)
{//몬스터 생성 메서드: 몬스터 정보도 가져와야한다.
MonsterData data = DataManager.Instance.GetMonsterData(monster_id);//데이터 매니저에서 가져옴
return new Monster(data);
}
}
}
+) 클래스 만들 떄 codeDom, 엑셀 클래스 만들기
5.몬스터에 maxHp 데이터 추가해서 코드 수정
'C# 기초' 카테고리의 다른 글
JSON,데이터 관리 연습 3- 몬스터 잡으면 아이템 드롭, 가방에 넣기 (0) | 2023.07.28 |
---|---|
JSON, 데이터 관리연습2-아이템 가방에 넣고 착용하기 (0) | 2023.07.28 |
JSON (0) | 2023.07.27 |
대리자2, Action, Func, 람다활용, (0) | 2023.07.27 |
대리자 (0) | 2023.07.27 |