본문 바로가기
c#/수업내용

2020.04.29 출석 보상 아이템

by Luna_O 2020. 4. 30.

출석 보상 아이템 다시 만들어봤습니다.

집에 프로그램이 이상해서 코드 치면서 길어지면 어느 순간부터 수정해도 실행 창이 바뀌지 않아서 시간이 오래 걸렸습니다ㅠㅠ

새로운 건 찾아서 차근차근 만들어서 또 올리도록 하겠습니다!

App

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
class App
    {
        public UserInfo user;
        DataManger dataManger;
 
        public App()
        {
            dataManger = DataManger.GetInstance();
            dataManger.LoadDatas();
            this.NewBieCheck();
            this.PrintAttendanceReward();
            this.DoAttendance();
            this.DoAttendance();
            this.SaveFile();
 
        }
        public void NewBieCheck()
        {
            if (dataManger.userInfo == null)
            {
                user = new UserInfo();
                user.connectDate = DateTime.Today;
                user.attendanceCount++;
            }
            else
            {
                user = dataManger.userInfo;
                user.lastConnectDte = user.connectDate;
                user.connectDate = DateTime.Today;
                user.attendanceCount++;
                if (user.lastConnectDte.Day == user.connectDate.Day)
                    user.attendanceCount--;
            }
        }
 
        public void PrintAttendanceReward()
        {
            for (int i = 0; i < dataManger.dicAttendanceRewardDatas.Count; i++)
            {
                AttendanceRewardData rewardData = dataManger.GetAttendanceRewardData(i + 1);
                AttendanceRewardItemData rewardItemData = dataManger.GetAttendanceRewardItemData(rewardData.item_id);
                Console.WriteLine("{0} : {1} {2}"rewardData.id, rewardItemData.name, rewardData.amount);
            }
            Console.WriteLine("---------------------------------------------");
        }
 
        public void DoAttendance()
        {
            if (user.lastConnectDte.Day != user.connectDate.Day)
            {
                AttendanceRewardData rewardData = dataManger.GetAttendanceRewardData(user.attendanceCount);
                AttendanceRewardItemData rewardItemData = dataManger.GetAttendanceRewardItemData(rewardData.item_id);
                Item item = new Item(rewardData.id, rewardItemData.name, rewardData.amount, rewardItemData.icon_name);
                Item foundItem = user.item.Find(x => x.id == rewardData.id);
                if (foundItem == null)
                {
                    Console.WriteLine("{0}일 출석하였습니다.", user.attendanceCount);
                    Console.WriteLine("출석 보상아이템으로 {0} {1}를 받았습니다."rewardItemData.name, rewardData.amount);
                    Console.WriteLine("---------------------------------------------");
                    user.HaveItem(item);
                    int continuationDay = user.lastConnectDte.AddDays(1).Day;
                    if (user.connectDate.Day == continuationDay)
                    {
                        user.continuationCount++;
                        if (user.continuationCount == 5 || user.continuationCount == 10 || user.continuationCount == 20)
                        {
                            AttendanceRewardItemData bonusItemData = dataManger.GetAttendanceRewardItemData(rewardData.bonus_item_id);
                            Item bonusItem = new Item(rewardData.bonus_item_id, bonusItemData.name, rewardData.bonus_item_amount, bonusItemData.icon_name);
                            Console.WriteLine("{0}일 연속 출석으로 보너스 아이템이 지급됩니다.", user.continuationCount);
                            Console.WriteLine("---------------------------------------------");
                            user.HaveItem(bonusItem);
                        }
                    }
                    else
                    {
                        user.continuationCount = 1;
                    }
                }
                else
                {
                    Console.WriteLine("이미 출석 보상을 받으셨습니다.");
                    Console.WriteLine("---------------------------------------------");
                }
            }
            else if (user.lastConnectDte.Day == user.connectDate.Day)
            {
                Console.WriteLine("이미 출석 보상을 받으셨습니다.");
                Console.WriteLine("---------------------------------------------");
            }
 
        }
        public void SaveFile()
        {
            var inventory = JsonConvert.SerializeObject(this.user);
            //Console.WriteLine(inventory);
            string fileNAme = "./user_info.json";
            File.WriteAllText(fileNAme, inventory);
        }
    }
 
cs
 

DataManger

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
class DataManger
    {
        public static DataManger instance;
        public Dictionary<int, AttendanceRewardData> dicAttendanceRewardDatas;
        public Dictionary<int, AttendanceRewardItemData> dicAttendanceRewardItemDatas;
        public UserInfo userInfo;
 
        public DataManger()
        {
            dicAttendanceRewardDatas = new Dictionary<int, AttendanceRewardData>();
            dicAttendanceRewardItemDatas = new Dictionary<int, AttendanceRewardItemData>();
 
        }
 
        public static DataManger GetInstance()
        {
            if (DataManger.instance == null)
            {
                DataManger.instance = new DataManger();
            }
            return DataManger.instance;
        }
 
        public void LoadDatas()
        {
            string rewardPath = "./attendance_reward_data.json";
            string rewardJson = File.ReadAllText(rewardPath);
            AttendanceRewardData[] arrRewardDatas = JsonConvert.DeserializeObject<AttendanceRewardData[]>(rewardJson);
            this.dicAttendanceRewardDatas = arrRewardDatas.ToDictionary(x => x.id, x => x);
 
            string rewardItemPath = "./attendance_reward_item_data.json";
            string rewardItemJson = File.ReadAllText(rewardItemPath);
            AttendanceRewardItemData[] arrRewardItemDatas = JsonConvert.DeserializeObject<AttendanceRewardItemData[]>(rewardItemJson);
            this.dicAttendanceRewardItemDatas = arrRewardItemDatas.ToDictionary(x => x.id, x => x);
            string infoPath = "./user_info.json";
            if (File.Exists(infoPath))
            {
                string infoJson = File.ReadAllText(infoPath);
                userInfo = JsonConvert.DeserializeObject<UserInfo>(infoJson);
            }
        }
        public AttendanceRewardData GetAttendanceRewardData(int id)
        {
            return this.dicAttendanceRewardDatas[id];
        }
 
        public AttendanceRewardItemData GetAttendanceRewardItemData(int id)
        {
            return this.dicAttendanceRewardItemDatas[id];
        }
        public UserInfo GetInventoryData()
        {
            return this.userInfo;
        }
    }
 
cs

AttendanceRewardData

1
2
3
4
5
6
7
8
9
10
11
12
13
class AttendanceRewardData
    {
        public int id;
        public int item_id;
        public int amount;
        public int bonus_item_id;
        public int bonus_item_amount;
 
        public AttendanceRewardData()
        {
 
        }
    }
 
cs

AttendanceRewardItemData

1
2
3
4
5
6
7
8
9
10
11
class AttendanceRewardItemData
    {
        public int id;
        public string name;
        public string icon_name;
 
        public AttendanceRewardItemData()
        {
 
        }
    }
 
cs

UserInfo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class UserInfo
    {
        public List<Item> item;
        public DateTime connectDate;
        public DateTime lastConnectDte;
        public int attendanceCount = 0;
        public int continuationCount = 1;
        public UserInfo()
        {
            item = new List<Item>();
        }
 
        public void HaveItem(Item item)
        {
            this.item.Add(item);
            Console.WriteLine("{0} {1}을 획득하였습니다."item.name, item.amount);
            Console.WriteLine("---------------------------------------------");
        }
 
        public void PrintItemListCount()
        {
            Console.WriteLine(this.item.Count);
        }
    }
 
cs

Item

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Item
    {
        public int id;
        public string name;
        public int amount;
        public string icon;
 
        public Item(int id, string name, int amount, string icon)
        {
            this.id = id;
            this.name = name;
            this.amount = amount;
            this.icon = icon;
        }
 
cs

1일차 실행 결과

2일차 실행 결과

3일차 실행 결과

4일차 실행 결과

5일차 실행 결과