C#프로그래밍

주말과제

다모아 2023. 7. 28. 17:30

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