namespace Study12
{
class ItemData
{
public int id;
public string name;
}
}
namespace Study12
{
class MissionData
{
public int id;
public string name;
public string desc;
public int goal;
public int reward_item_id;
public int amount;
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Study12
{
class GameInfo
{
public List<MissionInfo> missionInfos;
//변하는 데이터
//생성자 필요
public GameInfo()
{
}
public void Init()
{
this.missionInfos = new List<MissionInfo>();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Study12
{
class Button
{
public Action onClick;
//생성자
public Button()
{
}
public void Click()
{
this.onClick();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using System.IO;
namespace Study12
{
class App
{
Dictionary<int, MissionData> dicMissionData;
Dictionary<int, ItemData> dicItemData;
Button btnMission;
GameInfo gameInfo;
//생성자
public App()
{
//-----------게임 준비 과정--------------
this.dicMissionData = new Dictionary<int, MissionData>();
this.LoadMissionData();
this.LoadItemData();
this.btnMission = new Button();
//---------------------------------------
bool newbie = this.IsNewbie();
if (newbie)
{
Console.WriteLine("신규유저");
this.gameInfo = new GameInfo();
//**********************************
this.gameInfo.Init();
//**********************************
this.SaveGameInfo();
}
else
{
Console.WriteLine("기존유저");
var json = File.ReadAllText(GameConstants.GAME_INFO_PATH);
this.gameInfo = JsonConvert.DeserializeObject<GameInfo>(json);
Console.WriteLine(this.gameInfo);
Console.WriteLine(this.gameInfo.missionInfos);
}
this.btnMission.onClick = () =>
{
this.OpenMissionPopup();
};
this.btnMission.Click();
this.KillWolf();
}
private void KillWolf()
{
int targetMissionId = 1000;
Console.WriteLine("늑대를 잡았습니다.");
MissionInfo info = this.gameInfo.missionInfos.Find(x => x.id == targetMissionId);
if(info != null)
{
info.count++;
}
else
{
var myInfo = new MissionInfo();
myInfo.id = targetMissionId;
myInfo.count = 1;
this.gameInfo.missionInfos.Add(myInfo);
}
//저장
this.SaveGameInfo();
}
private void SaveGameInfo()
{
var json = JsonConvert.SerializeObject(this.gameInfo);
Console.WriteLine(json);
File.WriteAllText(GameConstants.GAME_INFO_PATH, json);
Console.WriteLine("game_info가 저장되었습니다.");
}
private bool IsNewbie()
{
if (File.Exists(GameConstants.GAME_INFO_PATH))
return false;
else
return true;
}
private void OpenMissionPopup()
{
Console.WriteLine("미션 목록을 보여준다.");
foreach(KeyValuePair<int, MissionData> pair in this.dicMissionData)
{
MissionData data = pair.Value;
Console.WriteLine(data.name);
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);
var info = this.gameInfo.missionInfos.Find(x => x.id == data.id);
if(info != null)
{
MissionData myMissionData = dicMissionData[info.id];
Console.WriteLine("진행률 : {0}/{1}", info.count, myMissionData.goal);
}
else
{
Console.WriteLine("진행률 : {0}/{1}", 0, data.goal);
}
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);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Study12
{
class MissionInfo
{
public int id;
public int count;
//생성자
public MissionInfo()
{
}
}
}
GameConstants.GAME_INFO_PATH 이게 어디서 나온 건지 모르겠다