버그 해결을 위한 모든 질문을 던져
0 votes
158 views
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함수에다가 플레이어가 고른 아이템을 집어넣고

플레이어인벤 아이템배열에 추가 해주는데 

문제가 같은 이름을 가진 아이템이 있으면 갯수를 하나 더해주는 부분이 

플레이어 인벤에만 갯수가 하나 추가되야 되는데

상점인벤에도 그 아이템의 갯수가 하나 추가 됩니다.

코딩을 그렇게 안햇는데도요 ㅠㅠ 왜 이렇게 되는지 잘모르겟습니다

폐쇄 기록: 해결했습니다!
asked (2 point)
closed , 158 views

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

403 질문
536 answers
548 댓글
16,592 users