State 0 , 1 , 2 ... 미완입니다.
App
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
namespace Game
{
public class App
{
//생성자
public App()
{
//미션 시작 전 아이템 불러오기
DataManager.instance.LoadMissionDatas();
DataManager.instance.LoadMissionItemDatas();
//미션시작
Game game = new Game();
game.Start();
}
}
}
User
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Game
{
public class User
{
private string name;
private int goal;
//생성자
public User(string name, int goal)
{
this.name = name;
this.goal = goal;
}
//목표 확인
public void targetGoal(Mission goal)
{
if(this.goal == goal.GetGoal())
{
goal.Complete();
}
else
{
Console.WriteLine("미션완료하지못했습니다.");
}
}
}
}
Game
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Game
{
public class Game
{
private Mission mission;
private MissionItem missionItem;
private User user;
//생성자
public Game()
{
}
public void Start()
{
//유저생성
this.user = this.CreateUser("이찬영", 7);
//1000번 아이디의 미션 생성
this.mission = this.CreateMission(1000);
//100번 아이디의 미션아이템 생성
this.missionItem = this.CreateMissionItem(100);
this.mission.onComplete = () =>
{
//미션 보상 생성
int reward_Item_Id = this.mission.GetReward_Item_Id();
MissionItem reward_Item = this.CreateMissionItem(reward_Item_Id);
//미션 보상 아이템 개수
int reward_Item_Amount = this.mission.GetReward_Item_Amount();
Console.WriteLine("아이템{0}/{1}을 받았습니다.", reward_Item.GetId(), reward_Item.Name);
};
this.user.targetGoal(this.mission);
}
//미션 생성
Mission CreateMission(int id)
{
//미션 정보
MissionData missionData = DataManager.instance.GetMissionData(id);
return new Mission(missionData);
}
//미션아이템 생성
MissionItem CreateMissionItem(int id)
{
MissionItemData missionItemData = DataManager.instance.GetMissionItemData(id);
return new MissionItem(missionItemData);
}
public User CreateUser(string name, int goal)
{
return new User(name, goal);
}
}
}
DataManager
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;
namespace Game
{
public class DataManager
{
public static readonly DataManager instance = new DataManager();
Dictionary<int, MissionData> dicMissionData = new Dictionary<int, MissionData>();
Dictionary<int, MissionItemData> dicMissionItemData = new Dictionary<int, MissionItemData>();
//생성자
private DataManager()
{
}
//미션데이터 읽기
public void LoadMissionDatas()
{
//아이템 데이터 불러오기
string missionJson = File.ReadAllText("./mission_data.json");
//역직렬화
MissionData[] missionData = JsonConvert.DeserializeObject<MissionData[]>(missionJson);
//MissionData[]에 Dictionary로 넣어주기
dicMissionData = missionData.ToDictionary(x => x.id);
}
//미션아이템데이터 읽기
public void LoadMissionItemDatas()
{
string missionJson = File.ReadAllText("./reward_item_data.json");
MissionItemData[] missionItemData = JsonConvert.DeserializeObject<MissionItemData[]>(missionJson);
//MissionItemData[]에 Dictionary로 넣어주기
dicMissionItemData = missionItemData.ToDictionary(x => x.id);
}
//미션데이터 가져오기
public MissionData GetMissionData(int id)
{
return this.dicMissionData[id];
}
//미션아이템데이터 가져오기
public MissionItemData GetMissionItemData(int id)
{
return this.dicMissionItemData[id];
}
}
}
Mission
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Game
{
public class Mission
{
private MissionData data;
public Action onComplete;
public string Name
{
get
{
MissionData data = DataManager.instance.GetMissionData(this.data.id);
return data.name;
}
}
//생성자
public Mission(MissionData data)
{
this.data = data;
}
//ID가져오기
public int GetId()
{
return data.id;
}
//목표 가져오기
public int GetGoal()
{
return data.goal;
}
//리워드아이템ID 가져오기
public int GetReward_Item_Id()
{
return data.reward_item_id;
}
//리워드 아이템 수량 가져오기
public int GetReward_Item_Amount()
{
return data.reward_item_amount;
}
//성공
public void Complete()
{
Console.WriteLine("미션{0}/{1}를 완료했습니다.", this.data.id, this.data.name);
//대리자 호출
this.onComplete();
}
}
}
MissionItem
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Game
{
public class MissionItem
{
private MissionItemData data;
public string Name
{
get
{
MissionItemData data = DataManager.instance.GetMissionItemData(this.data.id);
return data.name;
}
}
//생성자
public MissionItem(MissionItemData data)
{
this.data = data;
}
//아이템 ID 가져오기
public int GetId()
{
return data.id;
}
}
}
MissionData
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
namespace Game
{
public class MissionData
{
public int id;
public string name;
public int goal;
public int reward_item_id;
public int reward_item_amount;
}
}
MissionItemData
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Game
{
public class MissionItemData
{
public int id;
public string name;
}
}
mission_data.xlsx
미션테이블(MissionData)
-------------------------
ID
미션이름
목표수량
보상 아이템
보상 아이템 수량
reward_item_data.xlsx
(RewardItemData)
보상 아이템 테이블
-------------------------
ID
아이템 이름
아이템 이미지
...위에는 변하지 않는 아이템
---------------------------
mission_info.json
미션 정보 (MissionInfo)
---------------------------------
ID
달성횟수 progress
state : 0 ,,,
...>엑셀
id, name, goal, reward_item_id, reward_item_amount
//
id, name
...
집에서 카페 1단계 하기, 저장하기
'C#프로그래밍' 카테고리의 다른 글
주말과제 미션만들기 [학교] (0) | 2023.07.31 |
---|---|
FindItemName, Find, List (0) | 2023.07.31 |
장비 착용, 몬스터 공격, 인벤토리, 아이템 지급 (0) | 2023.07.28 |
JSON (0) | 2023.07.27 |
엑셀데이터를 JSON, JSON online viewer (0) | 2023.07.27 |