Inventory구현 (창고이동, 제작, 목록 등등)
C#/수업내용 2019. 4. 2. 17:451 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 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace GenericInventory { class App { public App() { Console.WriteLine("App 생성자"); } public void StartApp() { Inventory<HerbItem> herbInventory = new Inventory<HerbItem>(); Inventory<MagicItem> magicInventory = new Inventory<MagicItem>(); Inventory<Item> guildWarehouse = new Inventory<Item>(); ConsoleKey menuKey = ConsoleKey.D1; string inputName; while(menuKey != ConsoleKey.D7) { Console.WriteLine("1.아이템제작 2.아이템목록 3.아이템검색 4.아이템버리기 5.창고이동 6.아이템변경"); menuKey = Console.ReadKey().Key; switch(menuKey) { case ConsoleKey.D1: Console.WriteLine("제작하실 아이템 종류와 품목을 선택하세요"); Console.WriteLine("약초 : 평온초 / 은엽수 / 뱀뿌리 / 마법초 / 무덤이끼"); Console.WriteLine("마부 : 가속의 서약 / 원소의 격류 / 치명적인 항해"); inputName = Console.ReadLine(); switch(inputName) { case "평온초": herbInventory.AddItem(new HerbItem(inputName)); break; case "은엽수": herbInventory.AddItem(new HerbItem(inputName)); break; case "뱀뿌리": herbInventory.AddItem(new HerbItem(inputName)); break; case "마법초": herbInventory.AddItem(new HerbItem(inputName)); break; case "무덤이끼": herbInventory.AddItem(new HerbItem(inputName)); break; case "가속의 서약": magicInventory.AddItem(new MagicItem(inputName)); break; case "원소의 격류": magicInventory.AddItem(new MagicItem(inputName)); break; case "치명적인 항해": magicInventory.AddItem(new MagicItem(inputName)); break; default: Console.WriteLine("제작할 수 없는 아이템입니다."); break; } break; case ConsoleKey.D2: Console.WriteLine("허브가방"); herbInventory.PrintItemList(); Console.WriteLine("\n마부가방"); magicInventory.PrintItemList(); break; case ConsoleKey.D3: Console.WriteLine("찾을 아이템 이름을 입력하세요"); inputName = Console.ReadLine(); var herbTemp = herbInventory.SearchItem(inputName); var magicTemp = magicInventory.SearchItem(inputName); if(herbTemp!=null) { Console.WriteLine("{0}이 가방에 {1}개 있습니다", herbTemp.itemName, herbTemp.itemCount); } else if(magicTemp!=null) { Console.WriteLine("{0}이 가방에 {1}개 있습니다.", magicTemp.itemName, magicTemp.itemCount); } else { Console.WriteLine("가방에 존재하지 않는 아이템입니다."); } break; case ConsoleKey.D4: Console.WriteLine("버릴 아이템 이름을 입력하세요"); inputName = Console.ReadLine(); var herbSuccess = herbInventory.RemoveItem(inputName); var magicSuccess = magicInventory.RemoveItem(inputName); if(herbSuccess == true || magicSuccess) { Console.WriteLine("{0}를 버렸습니다.", inputName); } else if(herbSuccess == false && magicSuccess == false) { Console.WriteLine("{0}이 가방에 없습니다.", inputName); } break; case ConsoleKey.D5: Console.Write("1.창고에서 가져오기 2.창고에 넣기"); var key = Console.ReadKey().Key; bool moveSuccess; switch(key) { case ConsoleKey.D1: moveSuccess = guildWarehouse.MoveWareToInven(ref guildWarehouse.items, ref herbInventory.items, ref magicInventory.items); break; case ConsoleKey.D2: moveSuccess = guildWarehouse.MoveInvenToWare(ref guildWarehouse.items, ref herbInventory.items, ref magicInventory.items); break; default: Console.WriteLine("잘못입력하셨습니다"); break; } break; case ConsoleKey.D6: Console.WriteLine("변경할 아이템의 이름을 입력하세요"); string toChangeItem = Console.ReadLine(); Console.WriteLine("무슨 아이템으로 변경할까요?"); string changeItem = Console.ReadLine(); if(herbInventory.UpdateItem(ref herbInventory.items, new HerbItem(changeItem), toChangeItem) == false && magicInventory.UpdateItem(ref magicInventory.items, new MagicItem(changeItem), toChangeItem) == false) { Console.WriteLine("변경하실 수 있는 아이템이 없습니다."); } else { Console.WriteLine("변경이 완료되었습니다!"); } break; } } } } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace GenericInventory { public class HerbItem : Item { public HerbItem(string name) { this.itemType = 2; this.itemCount = 1; this.itemName = name; } } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace GenericInventory { public class Item { public int itemType; public string itemName; public int itemCount; public Item() { } } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace GenericInventory { public class MagicItem : Item { public MagicItem(string name) { this.itemType = 1; this.itemCount = 1; this.itemName = name; } } } | cs |
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 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace GenericInventory { public class Inventory<T> where T : Item { public List<T> items = new List<T>(); public Inventory() { Console.WriteLine("인벤토리가 생성되었습니다."); } public void AddItem(T item) { int addCount = 0; foreach (var search in items) { if (item.itemName == search.itemName) { search.itemCount++; addCount = 1; Console.WriteLine("{0}가 가방에 추가되었습니다.", item.itemName); break; } } if (addCount != 1) { items.Add(item); Console.WriteLine("{0}가 가방에 추가되었습니다.", item.itemName); } } public bool RemoveItem(string name) { int removeCount = 0; foreach (var search in items) { if (name == search.itemName) { if (search.itemCount != 1) { search.itemCount--; return true; } else if (search.itemCount == 1) { items.RemoveAt(removeCount); return true; } } removeCount++; } return false; } public void PrintItemList() { foreach (var count in items) { Console.WriteLine("{0}, {1}개", count.itemName, count.itemCount); } } public T SearchItem(string name) { foreach (var search in items) { if (search.itemName == name) { return search; } } return default(T); } public bool UpdateItem(ref List<T> item, T items, string toChangeItem) { int countUpdate = 0; for (int index = 0; index < item.Count; index++) { if (toChangeItem == item[index].itemName) { for (int indexTemp = 0; indexTemp < item.Count; indexTemp++) { if (item[indexTemp].itemName == items.itemName) { item[indexTemp].itemCount++; item.RemoveAt(index); countUpdate = 1; return true; } } if (countUpdate != 1) { item[index] = items; countUpdate = 1; return true; } } } return false; } public bool MoveWareToInven(ref List<Item> warehouse, ref List<HerbItem> herbInventory, ref List<MagicItem> magicInventory) { int takeItemCount = 0; int index = 0; Console.WriteLine("무엇을 가져오시겠습니까?"); Console.WriteLine("창고의 아이템 목록"); foreach(var item in warehouse) { Console.Write("{0} {1}개\t", item.itemName, item.itemCount); } string takeItemName = Console.ReadLine(); foreach(var item in warehouse) { if(item.itemName == takeItemName) { takeItemCount = 1; break; } index++; } if(takeItemCount != 1 && takeItemName != "평온초" && takeItemName != "은엽수" && takeItemName != "뱀뿌리" && takeItemName != "마법초" && takeItemName != "무덤이끼" && takeItemName != "가속의 서약" && takeItemName != "원소의 격류" && takeItemName != "치명적인 항해") { Console.WriteLine("창고에 존재하지 않는 아이템입니다."); return false; } else { if(takeItemName == "평온초" || takeItemName == "은엽수" || takeItemName == "뱀뿌리" || takeItemName == "마법초" || takeItemName == "무덤이끼") { foreach(var search in herbInventory) { if(search.itemName == takeItemName) { search.itemCount++; warehouse.RemoveAt(index); return true; } } herbInventory.Add(new HerbItem(takeItemName)); warehouse.RemoveAt(index); return true; } else if(takeItemName == "가속의 서약" || takeItemName == "원소의 격류" || takeItemName == "치명적인 항해") { foreach(var search in magicInventory) { if(search.itemName == takeItemName) { search.itemCount++; warehouse.RemoveAt(index); return true; } } magicInventory.Add(new MagicItem(takeItemName)); warehouse.RemoveAt(index); return true; } } return false; } public bool MoveInvenToWare(ref List<Item> warehouse, ref List<HerbItem> herbInventory, ref List<MagicItem> magicInventory) { int takeItemCount = 0; int index = 0; Console.WriteLine("무엇을 넣으시겠습니까?"); Console.WriteLine("자신의 아이템 목록"); foreach (var item in herbInventory) { Console.Write("{0} {1}개\t", item.itemName, item.itemCount); } foreach (var item in magicInventory) { Console.Write("{0} {1}개\t", item.itemName, item.itemCount); } string takeItemName = Console.ReadLine(); foreach (var item in herbInventory) { if (item.itemName == takeItemName) { takeItemCount = 1; break; } index++; } if(takeItemCount != 1) { index = 0; foreach(var item in magicInventory) { if(item.itemName == takeItemName) { takeItemCount = 1; break; } index++; } } if (takeItemCount != 1 && takeItemName != "평온초" && takeItemName != "은엽수" && takeItemName != "뱀뿌리" && takeItemName != "마법초" && takeItemName != "무덤이끼" && takeItemName != "가속의 서약" && takeItemName != "원소의 격류" && takeItemName != "치명적인 항해") { Console.WriteLine("인벤토리에 존재하지 않는 아이템입니다."); return false; } else { if (takeItemName == "평온초" || takeItemName == "은엽수" || takeItemName == "뱀뿌리" || takeItemName == "마법초" || takeItemName == "무덤이끼") { foreach (var search in warehouse) { if (search.itemName == takeItemName) { search.itemCount++; herbInventory.RemoveAt(index); return true; } } warehouse.Add(new HerbItem(takeItemName)); herbInventory.RemoveAt(index); return true; } else if (takeItemName == "가속의 서약" || takeItemName == "원소의 격류" || takeItemName == "치명적인 항해") { foreach (var search in warehouse) { if (search.itemName == takeItemName) { search.itemCount++; magicInventory.RemoveAt(index); return true; } } warehouse.Add(new MagicItem(takeItemName)); magicInventory.RemoveAt(index); return true; } } return false; } } } | cs |
'C# > 수업내용' 카테고리의 다른 글
ItemData구현 (0) | 2019.04.04 |
---|---|
Dictionary를 이용한 Inventory구현 및 Json사용 (0) | 2019.04.03 |
Inventory를 다시 Array로 되돌리기 (0) | 2019.04.01 |
제너릭 클래스, 상속을 이용하여 Inventory 만들기 (0) | 2019.04.01 |
List를 이용하여 Inventory 만들기 (0) | 2019.04.01 |