C#/수업내용
03/15 배열 선언, 인스턴스 생성, 할당, 출력 연습 7-2
박준희
2021. 3. 15. 18:20
인벤토리에 아이템 갯수 추가
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Study03
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Main");
new App();
}
}
}
App.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Study03
{
public class App
{
public App()
{
Inventory inventory = new Inventory(10);
int selectNum = 0;
while(true)
{
Console.WriteLine("조작을 선택해주세요. 아이템 넣기(1), 아이템 빼기(2), 아이템 검색(3), 아이템 목록 출력(4)");
int.TryParse(Console.ReadLine(), out selectNum);
switch(selectNum)
{
case 1:
{
string itemName;
Console.WriteLine("아이템의 이름을 입력해주세요.");
itemName = Console.ReadLine();
inventory.AddItem(new Item(itemName, SetItemType()));
break;
}
case 2:
{
string itemName;
Console.WriteLine("아이템의 이름을 입력해주세요.");
itemName = Console.ReadLine();
inventory.GetItem(itemName);
break;
}
case 3:
{
string itemName;
Console.WriteLine("아이템의 이름을 입력해주세요.");
itemName = Console.ReadLine();
inventory.FindItem(itemName);
break;
}
case 4:
{
inventory.Print();
break;
}
default:
break;
}
}
}
public static Item.eItemType SetItemType()
{
int selectNum;
Item.eItemType itemType = 0;
Console.WriteLine("아이템 타입을 입력해주세요. 1 : Weapon, 2 : Armor, 3 : Accessories, 4 : Portion");
int.TryParse(Console.ReadLine(), out selectNum);
switch(selectNum)
{
case 1:
itemType = Item.eItemType.Weapon;
break;
case 2:
itemType = Item.eItemType.Armor;
break;
case 3:
itemType = Item.eItemType.Accessories;
break;
case 4:
itemType = Item.eItemType.Portion;
break;
default:
break;
}
return itemType;
}
}
}
Inventory.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Study03
{
public class Inventory
{
private Item[] items;
private int capacity;
public Inventory()
{
}
public Inventory(int capacity)
{
this.capacity = capacity;
this.items = new Item[capacity];
}
public void AddItem(Item item)
{
int idx = 0;
for (; idx < capacity; idx++)
{
if (items[idx] == null )
{
items[idx] = item;
Console.WriteLine("{0} 아이템을 넣었습니다.", item.GetName());
items[idx].SetItemCount(1);
break;
}
else if(items[idx].GetName() == item.GetName())
{
Console.WriteLine("{0} 아이템을 넣었습니다.", item.GetName());
items[idx].SetItemCount(items[idx].GetItemCount() + 1);
break;
}
}
if(idx == capacity)
{
Console.WriteLine("인벤토리에 공간이 부족합니다.");
}
}
public Item GetItem(string itemName)
{
Item item = null;
for (int i = 0; i < capacity; i++)
{
if (items[i] != null && items[i].GetName() == itemName)
{
item = items[i];
Console.WriteLine("{0} 아이템을 뺐습니다.", item.GetName());
if(items[i].GetItemCount() > 1)
{
items[i].SetItemCount(items[i].GetItemCount() - 1);
}
else
{
items[i] = null;
}
break;
}
}
if(item == null)
{
Console.WriteLine("해당하는 아이템이 없습니다.");
}
return item;
}
public bool FindItem(string itemName)
{
bool findItem = false;
for (int i = 0; i < capacity; i++)
{
if (items[i] != null && items[i].GetName() == itemName)
{
Console.WriteLine("{0} 아이템을 찾았습니다.", itemName);
findItem = true;
break;
}
}
if(!findItem)
{
Console.WriteLine("{0} 아이템을 찾지 못했습니다.", itemName);
}
return findItem;
}
public void Print()
{
Item[] tmp = new Item[capacity];
int idx = 0;
foreach(Item item in items)
{
if(item != null)
{
tmp[idx] = item;
idx++;
}
}
items = tmp;
int index = 1;
foreach(Item item in items)
{
if(item!=null)
{
Console.WriteLine("{0}. {1} {2} {3}",index, item.GetName(), item.GetItemType(), item.GetItemCount());
}
else
{
Console.WriteLine("{0}.", index);
}
index++;
}
}
}
}
Item.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Study03
{
public class Item
{
public enum eItemType
{
Weapon,
Armor,
Accessories,
Portion
}
private string name;
private eItemType itemType;
private int itemCount;
public Item()
{
}
public Item(string name, eItemType itemType)
{
this.name = name;
this.itemType = itemType;
}
public string GetName()
{
return this.name;
}
public void SetName(string name)
{
this.name = name;
}
public eItemType GetItemType()
{
return this.itemType;
}
public void SetItemType(eItemType itemType)
{
this.itemType = itemType;
}
public int GetItemCount()
{
return this.itemCount;
}
public void SetItemCount(int itemCount)
{
this.itemCount = itemCount;
}
}
}