C#/수업 내용
상점 목록 및 미션 목록 & 보상 출력 (역직렬화 이용)
Bueong_E
2023. 1. 13. 13:19
반응형
SMALL
상점 아이템 목록
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;
namespace Study013
{
class App
{
public App()
{
//Json 데이터 불러오기
string json = File.ReadAllText("./item_data.json");
//foreach를 사용하여 Dictionary 컬렉션에 할당 하는 방법
//ItemData[] itemDatas = JsonConvert.DeserializeObject<ItemData[]>(json);
//Dictionary<int, ItemData> itemLists = new Dictionary<int, ItemData>();
//foreach (var itemdata in itemDatas)
//{
// itemLists.Add(itemdata.id, itemdata);
// Console.WriteLine(itemdata);
//}
// LINQ 사용하여 Dictionary 컬렉션에 할당 하는 방법
var itemLists = JsonConvert.DeserializeObject<ItemData[]>(json).ToDictionary(x => x.id);
//내용물 출력
foreach (var itemList in itemLists)
{
int id = itemList.Key;
ItemData data = itemList.Value;
Console.WriteLine("{0},{1},{2}", id, data.name, data.damage);
}
}
}
}
미션 목록 및 보상
App Class
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;
namespace Study013
{
class App
{
public App()
{
string missionJson = File.ReadAllText("./mission_data.json");
string itemJson = File.ReadAllText("./item_data.json");
var missionLists = JsonConvert.DeserializeObject<MissionData[]>(missionJson).ToDictionary(x => x.id);
var itemLists = JsonConvert.DeserializeObject<ItemData[]>(itemJson).ToDictionary(x => x.id);
foreach (var missionList in missionLists)
{
foreach (var itemList in itemLists)
{
if(itemList.Value.id == missionList.Value.resultItem)
{
Console.WriteLine("미션 : {0}", missionList.Value.mossion);
Console.WriteLine("미션 내용 : {0}", missionList.Value.missionStory);
Console.WriteLine("미션 목표 : {0}", missionList.Value.objective);
Console.WriteLine("미션 보상 : {0}X{1}\n", itemList.Value.name, missionList.Value.itemNum);
}
}
}
}
}
}
결과창
선생님이 만드신 코드
using System;
using System.IO;
using System.Collections.Generic;
using Newtonsoft.Json;
using System.Linq;
namespace Study12
{
class App
{
Dictionary<int, MissionData> dicMissionData;
Dictionary<int, ItemData> dicItemData;
Button btnMission;
//생성자
public App()
{
//-------------- 게임 준비 과정 ------------------------------------------
//데이터 관련 준비
this.dicMissionData = new Dictionary<int, MissionData>();
//this.dicItemData = new Dictionary<int, ItemData>();
this.LoadMissionData();
this.LoadItemData();
//UI준비 과정
this.btnMission = new Button();
//----------------------------------------------------------------------------
//사용자가 미션버튼을 눌렀다면
//미션 팝업을 보여준다
this.btnMission.onClick = () => {
this.OpenMissionPopup();
};
//사용자거 버튼을 눌렀다
this.btnMission.Click();
}
private void OpenMissionPopup()
{
//미션 목록을 보여준다
Console.WriteLine("미션 목록을 보여준다 ");
//늑대잡기
//늑대 10마리를 잡아오세요
//보상: 골드 x 2,000
foreach (KeyValuePair<int, MissionData> pair in this.dicMissionData)
{
MissionData data = pair.Value;
Console.WriteLine(data.name);
//Console.WriteLine("늑대 {0}마리를 잡아오세요", data.goal);
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);
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);
}
}
}
- foreach 를 사용하여 집어 넣는 방법과 LINQ를 이용하는 방법 두가지 모두 많이 써봐야겠다.
- ToDictionary 에 집어넣는 X는 실무자들 사이에서 암묵적으로 넣는것
- btn은 실무자들이 사용하는 Button의 약어
- 컬렉션들은 따로 뽑아 낼 필요 없환 가능하다.
- 선생님 코드 한줄 한줄 주석을 달아서 코드를 분석해보는것도 의미가 있을듯 하다.
반응형
LIST