public enum TYPE
{
GENERAL,
WEAPON,
}
public class Item
{
TYPE type;
public TYPE TYPE{ get { return type; } set { type = value; } }
string name;
public string Name { get { return name; } set { name = value; } }
int count;
public int Count { get { return count; } set { if (value <= 0) { count = 0; return; } count = value; } }
int cost;
public int Cost { get { return cost; }}
public Item(TYPE _type, string _name, int _count)
{
type = _type;
name = _name;
count = _count;
}
public Item(TYPE _type, string _name, int _count, int _cost)
{
type = _type;
name = _name;
count = _count;
cost = _cost;
}
}
public class Inven
{
public Item[] ArrayItem = null;
int InvenX;
int X = 0;
public Inven(int X, int Y)
{
ArrayItem = new Item[X * Y];
InvenX = X;
}
private void PrintItem()
{
if (ArrayItem[X] == null)
{
Console.WriteLine("무엇도 들어있지 않음");
return;
}
Console.WriteLine("타입:" + ArrayItem[X].TYPE + " 이름:" + ArrayItem[X].Name + " 갯수:" + ArrayItem[X].Count);
}
public void Render()
{
for (int i = 0; i < ArrayItem.Length; i++)
{
if ((i % InvenX) == 0)
{
Console.WriteLine();
}
if (i == X)
{
Console.Write("▣");
}
else if (ArrayItem[i] != null)
{
Console.Write("■");
}
else
{
Console.Write("□");
}
}
Console.WriteLine();
PrintItem();
}
private void setX(int amt)
{
if ((X + amt) < 0 || (X + amt) >= ArrayItem.Length)
{
return;
}
X = X + amt;
}
public int SelectRender()
{
ConsoleKeyInfo key = Console.ReadKey(true);
switch (key.Key)
{
case ConsoleKey.RightArrow:
setX(1);
break;
case ConsoleKey.LeftArrow:
setX(-1);
break;
case ConsoleKey.UpArrow:
setX(-(InvenX));
break;
case ConsoleKey.DownArrow:
setX((InvenX));
break;
case ConsoleKey.Spacebar:
return X;
}
return -1;
}
public void ItemIn(int Index, TYPE _type, string _name, int _count)
{
if (ArrayItem[Index] != null)
{
if (ArrayItem[Index].Name == _name)
{
ArrayItem[Index].Count = _count;
}
}
else
{
ArrayItem[Index] = new Item(_type, _name, _count);
}
}
public void ItemIn(int Index, TYPE _type, string _name, int _count, int _cost)
{
ArrayItem[Index] = new Item(_type, _name, _count, _cost);
}
public void ItemIn(Item item)
{
for (int i = 0; i < ArrayItem.Length; i++)
{
if (ArrayItem[i] == null)
{
ArrayItem[i] = item;
return;
}
else
{
if (ArrayItem[i].Name == item.Name)
{
item.Count += 1;
return;
}
}
}
}
}
class Shop
{
Player _player = null;
public Menu Potion(Player player)
{
Inven inven = new Inven(3, 2);
_player = player;
int Select;
inven.ItemIn(0,TYPE.GENERAL,"포션",1,100);
inven.ItemIn(1, TYPE.GENERAL, "암거나", 1,10);
inven.ItemIn(4, TYPE.GENERAL, "눈누난나", 1,5);
while (true)
{
Console.Clear();
inven.Render();
Select = inven.SelectRender();
if (Select != -1)
{
ShopchoiceMenu shopchoiceMenu = new ShopchoiceMenu();
shopchoiceMenu.Print();
Console.WriteLine("소지한 돈:{0}", _player.money);
if (shopchoiceMenu.Choice() == Menu.BUY)
{
_player.Pinevn.ItemIn(inven.ArrayItem[Select]);
}
else
{
player = _player;
return Menu.NULL;
}
}
}
}
}
인벤 클래스가 있고 거기안에
아이템클래스배열을 만들어져있습니다.
인벤에 아이템을 넣어주는 함수(Itemin)가 들어있습니다
상점에서 아이템 구매를 구현할려고 ItemIn함수에 매개변수로 아이템클래스를 넣으면
플레이어 인벤에 null인공간을 찾아서 넣어주고
인벤안에 같은 이름을 가진 아이템이 있으면 갯수를 하나 더해주는 함수를 구현했습니다.
플레이어와 상점안에 인벤을 만들고
상점인벤에 아이템을 추가해줍니다
플레이어가 아이템을 고르면 Itemin함수에다가 플레이어가 고른 아이템을 집어넣고
플레이어인벤 아이템배열에 추가 해주는데
문제가 같은 이름을 가진 아이템이 있으면 갯수를 하나 더해주는 부분이
플레이어 인벤에만 갯수가 하나 추가되야 되는데
상점인벤에도 그 아이템의 갯수가 하나 추가 됩니다.
코딩을 그렇게 안햇는데도요 ㅠㅠ 왜 이렇게 되는지 잘모르겟습니다