※ 끝까지 하지 못하였습니다... 죄송합니다...
(못한 부분 - 데이터 세이브(직렬화), 미션 출력, 미션 완료 시 드롭된 아이템 획득, 인벤토리 등)
※ 냥코대전쟁이라는 게임을 토대로 제작되었습니다...
(1)DataManager.cs
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace HomeWork
{
public class DataManager
{
public static readonly DataManager Instance = new DataManager();
Dictionary<int, MissionData> dicMissionData = new Dictionary<int, MissionData>();
Dictionary<int, ItemData> dicItemData = new Dictionary<int, ItemData>();
//생성자
private DataManager()
{
}
public void LoadMissionData()
{
string json = File.ReadAllText("./mission_data.json");
MissionData[] missionDatas = JsonConvert.DeserializeObject<MissionData[]>(json);
dicMissionData = missionDatas.ToDictionary(x => x.id);
}
public void LoadItemData()
{
string json = File.ReadAllText("./reward_item_data.json");
ItemData[] itemDatas = JsonConvert.DeserializeObject<ItemData[]>(json);
dicItemData = itemDatas.ToDictionary(x => x.id);
}
public ItemData GEtItemData(int id)
{
return dicItemData[id];
}
public MissionData GetMissionData(int id)
{
return dicMissionData[id];
}
}
}
(2)InfoManager.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HomeWork
{
public class InfoManager
{
public static readonly InfoManager Instance = new InfoManager();
public GameInfo gameInfo;
private InfoManager()
{
}
public void Init(GameInfo gameInfo)
{
this.gameInfo = gameInfo;
}
}
}
(3) GameInfo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HomeWork
{
public class GameInfo
{
public List<MissionInfo> missionInfo;
public GameInfo()
{
}
public void Init()
{
this.missionInfo = new List<MissionInfo>();
}
}
}
(4)MissionData.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HomeWork
{
public class MissionData
{
//멤버변수
public int id;
public string name;
public int goal;
public int reward_item_id;
public int reward_item_amount;
}
}
(5)MissionInfo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HomeWork
{
public class MissionData
{
//멤버변수
public int id;
public string name;
public int goal;
public int reward_item_id;
public int reward_item_amount;
}
}
(6)Mission.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HomeWork
{
public class Mission
{
public MissionInfo missionInfo;
public Mission(int id, int progress, int state)
{
this.missionInfo.id = id;
this.missionInfo.progress = progress;
this.missionInfo.state = state;
}
}
}
(7)ItemData.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HomeWork
{
public class ItemData
{
public int id;
public string name;
}
}
(8)Item.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HomeWork
{
public class Item
{
public ItemData itemData;
public Item(ItemData itemData)
{
this.itemData = itemData;
}
}
}
(9)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HomeWork
{
public class Player
{
public List<Mission> missions;
public Action<int> onCompleteMission;
public Player()
{
}
public void AcceptMission(int id)
{
missions.Add(new Mission(id, 0, 0));
}
public void DoMission(int id)
{
for(int i=0;i<this.missions.Count; i++)
{
if (this.missions[i].missionInfo.id == id)
{
this.missions[i].missionInfo.progress++;
if (this.missions[i].missionInfo.progress == DataManager.Instance.GetMissionData(id).goal)
{
this.missions[i].missionInfo.state = 1;
this.onCompleteMission(DataManager.Instance.GetMissionData(id).reward_item_id);
}
break;
}
}
}
}
}
(10)App.cs
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace HomeWork
{
public class App
{
Player player;
public App()
{
DataManager.Instance.LoadMissionData();
DataManager.Instance.LoadItemData();
GameInfo gameInfo = null;
bool newbie = true;
if (File.Exists("./mission_info.json"))
{
newbie = false;
string json = File.ReadAllText("./mission_info.json");
gameInfo = JsonConvert.DeserializeObject<GameInfo>(json);
Console.WriteLine("기존유저다냥");
Console.WriteLine(gameInfo.missionInfo);
}
else
{
gameInfo = new GameInfo();
gameInfo.Init();
Console.WriteLine("신규유저다냥, 환영한다냥");
}
InfoManager.Instance.Init(gameInfo);
player.onCompleteMission = (id) =>
{
ItemData temp = DataManager.Instance.GEtItemData(id);
Console.WriteLine("미션을 완료했다냥, 아이템{0}을 획득하라냥", temp.name);
Item dropItem = new Item(temp);
};
}
}
}
'K-digital traning > C#프로그래밍' 카테고리의 다른 글
대리자 연습 - Hero HitDamage (0) | 2023.07.27 |
---|---|
대리자 연습 - 데이터매니저 로드 (0) | 2023.07.27 |
대리자 연습 - Hero 이동 (0) | 2023.07.27 |
가짜 인벤토리 만들기 (0) | 2023.07.26 |
2차원 배열 연습 (0) | 2023.07.25 |